[Pkg-owncloud-commits] [owncloud] 105/111: Imported Upstream version 6.0.0~beta5+dfsg

David Prévot taffit at moszumanska.debian.org
Wed Nov 20 21:38:49 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 790a0ec1db2e21bbf35b5a1c2f7ff5bfe5e2a2e4
Merge: 70bb590 c2ccf4a
Author: David Prévot <taffit at debian.org>
Date:   Wed Nov 20 15:26:40 2013 -0400

    Imported Upstream version 6.0.0~beta5+dfsg

 apps/activity/css/style.css                        |    2 +-
 apps/bookmarks/l10n/sk_SK.php                      |    6 +-
 apps/bookmarks/l10n/sk_SK/bookmarks.po             |   12 +-
 apps/bookmarks/l10n/templates/bookmarks.pot        |    2 +-
 apps/bookmarks/templates/list.php                  |    2 +-
 .../calendar/3rdparty/fullcalendar/GPL-LICENSE.txt |  278 +
 .../calendar/3rdparty/fullcalendar/MIT-LICENSE.txt |   20 +
 .../3rdparty/fullcalendar/css/fullcalendar.css     |  579 +++
 .../fullcalendar/css/fullcalendar.print.css        |   32 +
 .../3rdparty/fullcalendar/js/fullcalendar.js       | 5378 ++++++++++++++++++++
 .../3rdparty/fullcalendar/js/fullcalendar.min.js   |    7 +
 apps/calendar/3rdparty/fullcalendar/js/gcal.js     |  107 +
 apps/calendar/ajax/event/new.form.php              |    2 +-
 apps/calendar/index.php                            |    4 +-
 apps/calendar/js/calendar.js                       |    3 +
 apps/calendar/l10n/es.php                          |    6 +-
 apps/calendar/l10n/es/calendar.po                  |   25 +-
 apps/calendar/l10n/sl.php                          |    3 +
 apps/calendar/l10n/sl/calendar.po                  |   24 +-
 apps/calendar/l10n/templates/calendar.pot          |   14 +-
 apps/calendar/l10n/uk.php                          |    2 +
 apps/calendar/l10n/uk/calendar.po                  |   20 +-
 apps/contacts/l10n/ar/contacts.po                  |   22 +-
 apps/contacts/l10n/bg_BG/contacts.po               |   22 +-
 apps/contacts/l10n/bn_BD/contacts.po               |   22 +-
 apps/contacts/l10n/ca/contacts.po                  |   22 +-
 apps/contacts/l10n/cs_CZ/contacts.po               |   22 +-
 apps/contacts/l10n/cy_GB/contacts.po               |   22 +-
 apps/contacts/l10n/da/contacts.po                  |   22 +-
 apps/contacts/l10n/de/contacts.po                  |   22 +-
 apps/contacts/l10n/de_CH/contacts.po               |   22 +-
 apps/contacts/l10n/de_DE/contacts.po               |   22 +-
 apps/contacts/l10n/el/contacts.po                  |   22 +-
 apps/contacts/l10n/en_GB/contacts.po               |   22 +-
 apps/contacts/l10n/eo/contacts.po                  |   22 +-
 apps/contacts/l10n/es/contacts.po                  |   22 +-
 apps/contacts/l10n/es_AR/contacts.po               |   22 +-
 apps/contacts/l10n/et_EE/contacts.po               |   22 +-
 apps/contacts/l10n/eu.php                          |   39 +
 apps/contacts/l10n/eu/contacts.po                  |  102 +-
 apps/contacts/l10n/fa/contacts.po                  |   22 +-
 apps/contacts/l10n/fi_FI/contacts.po               |   22 +-
 apps/contacts/l10n/fr/contacts.po                  |   22 +-
 apps/contacts/l10n/gl/contacts.po                  |   22 +-
 apps/contacts/l10n/he/contacts.po                  |   22 +-
 apps/contacts/l10n/hu_HU/contacts.po               |   22 +-
 apps/contacts/l10n/id/contacts.po                  |   22 +-
 apps/contacts/l10n/it/contacts.po                  |   22 +-
 apps/contacts/l10n/ja_JP/contacts.po               |   22 +-
 apps/contacts/l10n/ka_GE/contacts.po               |   22 +-
 apps/contacts/l10n/ko/contacts.po                  |   22 +-
 apps/contacts/l10n/lb/contacts.po                  |   22 +-
 apps/contacts/l10n/lt_LT/contacts.po               |   22 +-
 apps/contacts/l10n/lv/contacts.po                  |   22 +-
 apps/contacts/l10n/mk/contacts.po                  |   22 +-
 apps/contacts/l10n/ms_MY/contacts.po               |   22 +-
 apps/contacts/l10n/nb_NO/contacts.po               |   22 +-
 apps/contacts/l10n/nl/contacts.po                  |   22 +-
 apps/contacts/l10n/nn_NO/contacts.po               |   22 +-
 apps/contacts/l10n/oc/contacts.po                  |   22 +-
 apps/contacts/l10n/pa/contacts.po                  |  146 +-
 apps/contacts/l10n/pl/contacts.po                  |   22 +-
 apps/contacts/l10n/pt_BR/contacts.po               |   22 +-
 apps/contacts/l10n/pt_PT/contacts.po               |   22 +-
 apps/contacts/l10n/ro/contacts.po                  |   22 +-
 apps/contacts/l10n/ru/contacts.po                  |   22 +-
 apps/contacts/l10n/ru_RU/contacts.po               |   22 +-
 apps/contacts/l10n/si_LK/contacts.po               |   22 +-
 apps/contacts/l10n/sk_SK/contacts.po               |   22 +-
 apps/contacts/l10n/sl.php                          |   30 +-
 apps/contacts/l10n/sl/contacts.po                  |   82 +-
 apps/contacts/l10n/sr/contacts.po                  |   22 +-
 apps/contacts/l10n/sv/contacts.po                  |   22 +-
 apps/contacts/l10n/ta_LK/contacts.po               |   22 +-
 apps/contacts/l10n/templates/contacts.pot          |   20 +-
 apps/contacts/l10n/th_TH/contacts.po               |   22 +-
 apps/contacts/l10n/tr/contacts.po                  |   22 +-
 apps/contacts/l10n/ug/contacts.po                  |   22 +-
 apps/contacts/l10n/uk/contacts.po                  |   22 +-
 apps/contacts/l10n/vi/contacts.po                  |   22 +-
 apps/contacts/l10n/zh_CN/contacts.po               |   22 +-
 apps/contacts/l10n/zh_HK/contacts.po               |   22 +-
 apps/contacts/l10n/zh_TW/contacts.po               |   22 +-
 .../lib/controller/addressbookcontroller.php       |    6 +-
 .../lib/controller/contactphotocontroller.php      |    2 +-
 apps/documents/css/3rdparty/webodf/dojo-app.css    |    2 +-
 apps/documents/css/style.css                       |   53 +-
 apps/documents/js/3rdparty/webodf/editor/Editor.js |   62 +-
 .../js/3rdparty/webodf/editor/EditorSession.js     |   26 +-
 apps/documents/js/3rdparty/webodf/editor/Tools.js  |   16 +-
 apps/documents/js/3rdparty/webodf/webodf-debug.js  | 1426 ++++--
 apps/documents/js/3rdparty/webodf/webodf.js        | 1242 +++--
 apps/documents/js/documents.js                     |   18 +-
 apps/documents/js/locale.js                        |   48 +
 apps/documents/l10n/ach/documents.po               |  210 +-
 apps/documents/l10n/ady/documents.po               |  210 +-
 apps/documents/l10n/af/documents.po                |  210 +-
 apps/documents/l10n/af_ZA.php                      |    3 +
 apps/documents/l10n/af_ZA/documents.po             |  212 +-
 apps/documents/l10n/ar.php                         |    4 +-
 apps/documents/l10n/ar/documents.po                |  212 +-
 apps/documents/l10n/be/documents.po                |  210 +-
 apps/documents/l10n/bg_BG.php                      |    4 +-
 apps/documents/l10n/bg_BG/documents.po             |  212 +-
 apps/documents/l10n/bn_BD.php                      |    4 +-
 apps/documents/l10n/bn_BD/documents.po             |  212 +-
 apps/documents/l10n/bs/documents.po                |  210 +-
 apps/documents/l10n/ca.php                         |    2 +
 apps/documents/l10n/ca/documents.po                |  212 +-
 apps/documents/l10n/cs_CZ.php                      |    2 +
 apps/documents/l10n/cs_CZ/documents.po             |  212 +-
 apps/documents/l10n/cy_GB.php                      |    4 +-
 apps/documents/l10n/cy_GB/documents.po             |  212 +-
 apps/documents/l10n/da.php                         |    2 +
 apps/documents/l10n/da/documents.po                |  212 +-
 apps/documents/l10n/de.php                         |    3 +
 apps/documents/l10n/de/documents.po                |  214 +-
 apps/documents/l10n/de_AT/documents.po             |  210 +-
 apps/documents/l10n/de_CH.php                      |   18 +-
 apps/documents/l10n/de_CH/documents.po             |  239 +-
 apps/documents/l10n/de_DE.php                      |    3 +
 apps/documents/l10n/de_DE/documents.po             |  214 +-
 apps/documents/l10n/el.php                         |    2 +
 apps/documents/l10n/el/documents.po                |  212 +-
 apps/documents/l10n/en at pirate.php                  |    3 +
 apps/documents/l10n/en at pirate/documents.po         |  212 +-
 apps/documents/l10n/en_GB.php                      |    3 +
 apps/documents/l10n/en_GB/documents.po             |  214 +-
 apps/documents/l10n/eo.php                         |    2 +
 apps/documents/l10n/eo/documents.po                |  212 +-
 apps/documents/l10n/es.php                         |    3 +
 apps/documents/l10n/es/documents.po                |  214 +-
 apps/documents/l10n/es_AR.php                      |    2 +
 apps/documents/l10n/es_AR/documents.po             |  212 +-
 apps/documents/l10n/es_MX/documents.po             |  210 +-
 apps/documents/l10n/et_EE.php                      |    5 +-
 apps/documents/l10n/et_EE/documents.po             |  216 +-
 apps/documents/l10n/eu.php                         |    7 +
 apps/documents/l10n/eu/documents.po                |  222 +-
 apps/documents/l10n/fa.php                         |    4 +-
 apps/documents/l10n/fa/documents.po                |  212 +-
 apps/documents/l10n/fi_FI.php                      |    3 +
 apps/documents/l10n/fi_FI/documents.po             |  214 +-
 apps/documents/l10n/fr.php                         |    3 +
 apps/documents/l10n/fr/documents.po                |  214 +-
 apps/documents/l10n/gl.php                         |    3 +
 apps/documents/l10n/gl/documents.po                |  214 +-
 apps/documents/l10n/he.php                         |    4 +-
 apps/documents/l10n/he/documents.po                |  212 +-
 apps/documents/l10n/hi.php                         |    1 +
 apps/documents/l10n/hi/documents.po                |  212 +-
 apps/documents/l10n/hr.php                         |    3 +-
 apps/documents/l10n/hr/documents.po                |  212 +-
 apps/documents/l10n/hu_HU.php                      |    3 +
 apps/documents/l10n/hu_HU/documents.po             |  214 +-
 apps/documents/l10n/hy/documents.po                |  210 +-
 apps/documents/l10n/ia.php                         |    3 +-
 apps/documents/l10n/ia/documents.po                |  212 +-
 apps/documents/l10n/id.php                         |    4 +-
 apps/documents/l10n/id/documents.po                |  212 +-
 apps/documents/l10n/is.php                         |    3 +-
 apps/documents/l10n/is/documents.po                |  212 +-
 apps/documents/l10n/it.php                         |    3 +
 apps/documents/l10n/it/documents.po                |  215 +-
 apps/documents/l10n/ja_JP.php                      |    3 +
 apps/documents/l10n/ja_JP/documents.po             |  214 +-
 apps/documents/l10n/ka.php                         |    3 +
 apps/documents/l10n/ka/documents.po                |  212 +-
 apps/documents/l10n/ka_GE.php                      |    4 +-
 apps/documents/l10n/ka_GE/documents.po             |  212 +-
 apps/documents/l10n/km/documents.po                |  210 +-
 apps/documents/l10n/kn/documents.po                |  210 +-
 apps/documents/l10n/ko.php                         |    2 +
 apps/documents/l10n/ko/documents.po                |  212 +-
 apps/documents/l10n/ku_IQ.php                      |    3 +-
 apps/documents/l10n/ku_IQ/documents.po             |  212 +-
 apps/documents/l10n/lb.php                         |    4 +-
 apps/documents/l10n/lb/documents.po                |  212 +-
 apps/documents/l10n/lt_LT.php                      |    2 +
 apps/documents/l10n/lt_LT/documents.po             |  212 +-
 apps/documents/l10n/lv.php                         |    4 +-
 apps/documents/l10n/lv/documents.po                |  212 +-
 apps/documents/l10n/mk.php                         |    2 +
 apps/documents/l10n/mk/documents.po                |  212 +-
 apps/documents/l10n/ml_IN/documents.po             |  210 +-
 apps/documents/l10n/ms_MY.php                      |    4 +-
 apps/documents/l10n/ms_MY/documents.po             |  212 +-
 apps/documents/l10n/my_MM.php                      |    3 +
 apps/documents/l10n/my_MM/documents.po             |  212 +-
 apps/documents/l10n/nb_NO.php                      |    4 +-
 apps/documents/l10n/nb_NO/documents.po             |  212 +-
 apps/documents/l10n/nds/documents.po               |  210 +-
 apps/documents/l10n/ne/documents.po                |  210 +-
 apps/documents/l10n/nl.php                         |    3 +
 apps/documents/l10n/nl/documents.po                |  214 +-
 apps/documents/l10n/nn_NO.php                      |    2 +
 apps/documents/l10n/nn_NO/documents.po             |  212 +-
 apps/documents/l10n/nqo/documents.po               |  210 +-
 apps/documents/l10n/oc.php                         |    4 +-
 apps/documents/l10n/oc/documents.po                |  212 +-
 apps/documents/l10n/pa.php                         |    4 +-
 apps/documents/l10n/pa/documents.po                |  212 +-
 apps/documents/l10n/pl.php                         |    2 +
 apps/documents/l10n/pl/documents.po                |  212 +-
 apps/documents/l10n/pt_BR.php                      |    3 +
 apps/documents/l10n/pt_BR/documents.po             |  214 +-
 apps/documents/l10n/pt_PT.php                      |    2 +
 apps/documents/l10n/pt_PT/documents.po             |  212 +-
 apps/documents/l10n/ro.php                         |    4 +-
 apps/documents/l10n/ro/documents.po                |  212 +-
 apps/documents/l10n/ru.php                         |    7 +-
 apps/documents/l10n/ru/documents.po                |  220 +-
 apps/documents/l10n/ru_RU.php                      |    4 +-
 apps/documents/l10n/ru_RU/documents.po             |  212 +-
 apps/documents/l10n/si_LK.php                      |    4 +-
 apps/documents/l10n/si_LK/documents.po             |  212 +-
 apps/documents/l10n/sk/documents.po                |  210 +-
 apps/documents/l10n/sk_SK.php                      |    6 +-
 apps/documents/l10n/sk_SK/documents.po             |  218 +-
 apps/documents/l10n/sl.php                         |   20 +-
 apps/documents/l10n/sl/documents.po                |  243 +-
 apps/documents/l10n/sq.php                         |    3 +-
 apps/documents/l10n/sq/documents.po                |  212 +-
 apps/documents/l10n/sr.php                         |    4 +-
 apps/documents/l10n/sr/documents.po                |  212 +-
 apps/documents/l10n/sr at latin.php                   |    3 +-
 apps/documents/l10n/sr at latin/documents.po          |  212 +-
 apps/documents/l10n/sv.php                         |    2 +
 apps/documents/l10n/sv/documents.po                |  212 +-
 apps/documents/l10n/sw_KE/documents.po             |  210 +-
 apps/documents/l10n/ta_LK.php                      |    4 +-
 apps/documents/l10n/ta_LK/documents.po             |  212 +-
 apps/documents/l10n/te.php                         |    3 +-
 apps/documents/l10n/te/documents.po                |  212 +-
 apps/documents/l10n/templates/documents.pot        |  208 +-
 apps/documents/l10n/th_TH.php                      |    4 +-
 apps/documents/l10n/th_TH/documents.po             |  212 +-
 apps/documents/l10n/tr.php                         |    3 +
 apps/documents/l10n/tr/documents.po                |  214 +-
 apps/documents/l10n/tzm/documents.po               |  210 +-
 apps/documents/l10n/ug.php                         |    4 +-
 apps/documents/l10n/ug/documents.po                |  212 +-
 apps/documents/l10n/uk.php                         |    4 +-
 apps/documents/l10n/uk/documents.po                |  212 +-
 apps/documents/l10n/ur_PK.php                      |    2 +-
 apps/documents/l10n/ur_PK/documents.po             |  212 +-
 apps/documents/l10n/uz/documents.po                |  210 +-
 apps/documents/l10n/vi.php                         |    4 +-
 apps/documents/l10n/vi/documents.po                |  212 +-
 apps/documents/l10n/zh_CN.php                      |    4 +-
 apps/documents/l10n/zh_CN/documents.po             |  212 +-
 apps/documents/l10n/zh_HK.php                      |    4 +-
 apps/documents/l10n/zh_HK/documents.po             |  212 +-
 apps/documents/l10n/zh_TW.php                      |    2 +
 apps/documents/l10n/zh_TW/documents.po             |  212 +-
 apps/documents/src/locale.sh                       |   18 +
 apps/documents/templates/documents.php             |    4 +-
 apps/files/ajax/list.php                           |    2 +-
 apps/files/css/files.css                           |    1 +
 apps/files/index.php                               |    3 +-
 apps/files/js/filelist.js                          |   14 +-
 apps/files/l10n/cs_CZ.php                          |   15 +
 apps/files/l10n/hu_HU.php                          |    1 +
 apps/files/l10n/ja_JP.php                          |    1 +
 apps/files/l10n/sk_SK.php                          |   15 +
 apps/files/l10n/sl.php                             |   26 +-
 apps/files_encryption/l10n/ja_JP.php               |    1 +
 apps/files_encryption/l10n/sk_SK.php               |    1 +
 apps/files_encryption/lib/helper.php               |   51 +-
 apps/files_encryption/lib/keymanager.php           |    3 +-
 apps/files_encryption/lib/proxy.php                |   15 +-
 apps/files_encryption/lib/stream.php               |   34 +-
 apps/files_encryption/lib/util.php                 |   51 +-
 apps/files_encryption/tests/crypt.php              |   14 +-
 apps/files_encryption/tests/helper.php             |   15 +-
 apps/files_encryption/tests/util.php               |   58 +
 apps/files_external/3rdparty/smb4php/smb.php       |   12 +-
 apps/files_external/l10n/sk_SK.php                 |    4 +-
 apps/files_external/lib/smb.php                    |   19 +-
 apps/files_external/tests/smbfunctions.php         |   41 +
 apps/files_sharing/l10n/eu.php                     |    4 +-
 apps/files_sharing/l10n/sl.php                     |   11 +-
 apps/files_sharing/public.php                      |    1 +
 apps/files_sharing/templates/public.php            |    1 +
 apps/files_trashbin/l10n/sl.php                    |    3 +-
 apps/files_versions/js/versions.js                 |    2 +-
 apps/files_versions/l10n/sl.php                    |    3 +
 apps/user_ldap/css/settings.css                    |   18 +
 apps/user_ldap/js/settings.js                      |   93 +-
 apps/user_ldap/l10n/cs_CZ.php                      |   20 +-
 apps/user_ldap/l10n/hu_HU.php                      |    1 +
 apps/user_ldap/l10n/ja_JP.php                      |    1 +
 apps/user_ldap/l10n/sk_SK.php                      |   36 +-
 apps/user_ldap/l10n/sl.php                         |    3 +
 apps/user_ldap/lib/wizard.php                      |   13 +
 apps/user_ldap/templates/part.wizardcontrols.php   |    3 +-
 apps/user_webdavauth/l10n/sl.php                   |    4 +-
 apps/user_webdavauth/l10n/uk.php                   |    3 +-
 core/css/multiselect.css                           |    1 +
 core/css/styles.css                                |   44 +-
 core/doc/admin/_sources/maintenance/backup.txt     |   20 +-
 core/doc/admin/_sources/maintenance/index.txt      |    6 +-
 core/doc/admin/_sources/maintenance/migrating.txt  |   14 +-
 core/doc/admin/_sources/maintenance/restore.txt    |   39 +
 core/doc/admin/_sources/maintenance/update.txt     |   65 +-
 core/doc/admin/contents.html                       |   13 +-
 core/doc/admin/issues/index.html                   |    2 +-
 core/doc/admin/maintenance/backup.html             |   29 +-
 core/doc/admin/maintenance/index.html              |   12 +-
 core/doc/admin/maintenance/migrating.html          |   24 +-
 .../maintenance/{backup.html => restore.html}      |   55 +-
 core/doc/admin/maintenance/update.html             |   95 +-
 core/doc/admin/searchindex.js                      |    2 +-
 .../_images/external_google_drive_1_sign_in.png    |  Bin 0 -> 26480 bytes
 .../_images/external_google_drive_2_verify.png     |  Bin 0 -> 15526 bytes
 .../external_google_drive_3_create_project.png     |  Bin 0 -> 8244 bytes
 .../_images/external_google_drive_4_enable_api.png |  Bin 0 -> 9818 bytes
 .../external_google_drive_5_setup_ownCloud.png     |  Bin 0 -> 2820 bytes
 .../_images/external_google_drive_6_accept.png     |  Bin 0 -> 12736 bytes
 core/doc/user/_images/mediaplayer.png              |  Bin 61649 -> 0 bytes
 core/doc/user/_sources/contents.txt                |    3 +-
 .../_sources/external_storage/google_drive.txt     |   61 +
 core/doc/user/_sources/files/index.txt             |    2 +
 core/doc/user/_sources/files/quota.txt             |   83 +
 core/doc/user/_sources/index.txt                   |   13 +-
 core/doc/user/_sources/mediaplayer.txt             |   27 -
 core/doc/user/bookmarks.html                       |    4 +-
 core/doc/user/contents.html                        |   14 +-
 core/doc/user/external_storage/google_drive.html   |  197 +
 .../user/files/configuring_big_file_upload.html    |   18 +-
 core/doc/user/files/deletedfiles.html              |    4 +-
 core/doc/user/files/encryption.html                |    6 +-
 core/doc/user/files/files.html                     |    4 +-
 core/doc/user/files/index.html                     |    6 +-
 core/doc/user/files/quota.html                     |  226 +
 core/doc/user/files/sync.html                      |    4 +-
 core/doc/user/files/versioncontrol.html            |    4 +-
 core/doc/user/genindex.html                        |    2 +-
 core/doc/user/index.html                           |   19 +-
 core/doc/user/mediaplayer.html                     |  163 -
 core/doc/user/migration.html                       |    5 +-
 core/doc/user/pim/calendar.html                    |    2 +-
 core/doc/user/pim/contacts.html                    |    2 +-
 core/doc/user/pim/index.html                       |    4 +-
 core/doc/user/pim/sync_ios.html                    |    2 +-
 core/doc/user/pim/sync_kde.html                    |    2 +-
 core/doc/user/pim/sync_osx.html                    |    2 +-
 core/doc/user/pim/sync_thunderbird.html            |    2 +-
 core/doc/user/pim/troubleshooting.html             |    2 +-
 core/doc/user/search.html                          |    2 +-
 core/doc/user/searchindex.js                       |    2 +-
 core/doc/user/webinterface.html                    |    2 +-
 core/js/multiselect.js                             |    2 -
 core/js/share.js                                   |   17 +-
 core/l10n/de_CH.php                                |    5 +
 core/l10n/et_EE.php                                |    4 +-
 core/l10n/sk_SK.php                                |   37 +-
 core/l10n/sl.php                                   |   21 +-
 core/skeleton/ownCloudUserManual.pdf               |  Bin 1374256 -> 1392919 bytes
 db_structure.xml                                   |   30 +
 l10n/ach/user_ldap.po                              |  134 +-
 l10n/ady/user_ldap.po                              |  134 +-
 l10n/af/user_ldap.po                               |  134 +-
 l10n/af_ZA/core.po                                 |    4 +-
 l10n/af_ZA/files_sharing.po                        |   18 +-
 l10n/af_ZA/settings.po                             |    4 +-
 l10n/af_ZA/user_ldap.po                            |  134 +-
 l10n/ar/core.po                                    |    4 +-
 l10n/ar/files_sharing.po                           |   18 +-
 l10n/ar/settings.po                                |    4 +-
 l10n/ar/user_ldap.po                               |  134 +-
 l10n/be/user_ldap.po                               |  134 +-
 l10n/bg_BG/core.po                                 |    4 +-
 l10n/bg_BG/files_sharing.po                        |   18 +-
 l10n/bg_BG/settings.po                             |    4 +-
 l10n/bg_BG/user_ldap.po                            |  134 +-
 l10n/bn_BD/core.po                                 |    4 +-
 l10n/bn_BD/files_sharing.po                        |   18 +-
 l10n/bn_BD/settings.po                             |    4 +-
 l10n/bn_BD/user_ldap.po                            |  134 +-
 l10n/bs/user_ldap.po                               |  134 +-
 l10n/ca/core.po                                    |    4 +-
 l10n/ca/files_sharing.po                           |   18 +-
 l10n/ca/settings.po                                |    4 +-
 l10n/ca/user_ldap.po                               |  134 +-
 l10n/cs_CZ/core.po                                 |    4 +-
 l10n/cs_CZ/files.po                                |   57 +-
 l10n/cs_CZ/files_sharing.po                        |   18 +-
 l10n/cs_CZ/settings.po                             |   23 +-
 l10n/cs_CZ/user_ldap.po                            |  179 +-
 l10n/cy_GB/core.po                                 |    4 +-
 l10n/cy_GB/files_sharing.po                        |   18 +-
 l10n/cy_GB/settings.po                             |    4 +-
 l10n/cy_GB/user_ldap.po                            |  134 +-
 l10n/da/core.po                                    |    4 +-
 l10n/da/files_sharing.po                           |   18 +-
 l10n/da/settings.po                                |    4 +-
 l10n/da/user_ldap.po                               |  134 +-
 l10n/de/core.po                                    |    4 +-
 l10n/de/files_sharing.po                           |   18 +-
 l10n/de/settings.po                                |    4 +-
 l10n/de/user_ldap.po                               |  134 +-
 l10n/de_AT/user_ldap.po                            |  134 +-
 l10n/de_CH/core.po                                 |   17 +-
 l10n/de_CH/files_sharing.po                        |   18 +-
 l10n/de_CH/settings.po                             |    4 +-
 l10n/de_CH/user_ldap.po                            |  134 +-
 l10n/de_DE/core.po                                 |    4 +-
 l10n/de_DE/files_sharing.po                        |   18 +-
 l10n/de_DE/settings.po                             |    4 +-
 l10n/de_DE/user_ldap.po                            |  134 +-
 l10n/el/core.po                                    |    4 +-
 l10n/el/files_sharing.po                           |   18 +-
 l10n/el/settings.po                                |    4 +-
 l10n/el/user_ldap.po                               |  134 +-
 l10n/en at pirate/core.po                             |    4 +-
 l10n/en at pirate/files_sharing.po                    |   18 +-
 l10n/en at pirate/settings.po                         |    4 +-
 l10n/en at pirate/user_ldap.po                        |  134 +-
 l10n/en_GB/core.po                                 |    4 +-
 l10n/en_GB/files_sharing.po                        |   18 +-
 l10n/en_GB/settings.po                             |   14 +-
 l10n/en_GB/user_ldap.po                            |  134 +-
 l10n/eo/core.po                                    |    4 +-
 l10n/eo/files_sharing.po                           |   18 +-
 l10n/eo/settings.po                                |    4 +-
 l10n/eo/user_ldap.po                               |  134 +-
 l10n/es/core.po                                    |    4 +-
 l10n/es/files_sharing.po                           |   18 +-
 l10n/es/settings.po                                |    4 +-
 l10n/es/user_ldap.po                               |  134 +-
 l10n/es_AR/core.po                                 |    4 +-
 l10n/es_AR/files_sharing.po                        |   18 +-
 l10n/es_AR/settings.po                             |    4 +-
 l10n/es_AR/user_ldap.po                            |  134 +-
 l10n/es_MX/user_ldap.po                            |  134 +-
 l10n/et_EE/core.po                                 |    8 +-
 l10n/et_EE/files_encryption.po                     |    4 +-
 l10n/et_EE/files_sharing.po                        |   18 +-
 l10n/et_EE/settings.po                             |    4 +-
 l10n/et_EE/user_ldap.po                            |  134 +-
 l10n/eu/core.po                                    |    4 +-
 l10n/eu/files_sharing.po                           |   24 +-
 l10n/eu/settings.po                                |    4 +-
 l10n/eu/user_ldap.po                               |  134 +-
 l10n/fa/core.po                                    |    4 +-
 l10n/fa/files_sharing.po                           |   18 +-
 l10n/fa/settings.po                                |    4 +-
 l10n/fa/user_ldap.po                               |  134 +-
 l10n/fi_FI/core.po                                 |    4 +-
 l10n/fi_FI/files_sharing.po                        |   18 +-
 l10n/fi_FI/settings.po                             |    4 +-
 l10n/fi_FI/user_ldap.po                            |  134 +-
 l10n/fr/core.po                                    |    4 +-
 l10n/fr/files_sharing.po                           |   18 +-
 l10n/fr/settings.po                                |    4 +-
 l10n/fr/user_ldap.po                               |  134 +-
 l10n/gl/core.po                                    |    4 +-
 l10n/gl/files_sharing.po                           |   18 +-
 l10n/gl/settings.po                                |    4 +-
 l10n/gl/user_ldap.po                               |  134 +-
 l10n/he/core.po                                    |    4 +-
 l10n/he/files_sharing.po                           |   18 +-
 l10n/he/settings.po                                |    4 +-
 l10n/he/user_ldap.po                               |  134 +-
 l10n/hi/core.po                                    |    4 +-
 l10n/hi/files_sharing.po                           |   18 +-
 l10n/hi/settings.po                                |    4 +-
 l10n/hi/user_ldap.po                               |  134 +-
 l10n/hr/core.po                                    |    4 +-
 l10n/hr/files_sharing.po                           |   18 +-
 l10n/hr/settings.po                                |    4 +-
 l10n/hr/user_ldap.po                               |  134 +-
 l10n/hu_HU/core.po                                 |    4 +-
 l10n/hu_HU/files.po                                |   28 +-
 l10n/hu_HU/files_sharing.po                        |   18 +-
 l10n/hu_HU/settings.po                             |   26 +-
 l10n/hu_HU/user_ldap.po                            |  136 +-
 l10n/hy/user_ldap.po                               |  134 +-
 l10n/ia/core.po                                    |    4 +-
 l10n/ia/files_sharing.po                           |   18 +-
 l10n/ia/settings.po                                |    4 +-
 l10n/ia/user_ldap.po                               |  134 +-
 l10n/id/core.po                                    |    4 +-
 l10n/id/files_sharing.po                           |   18 +-
 l10n/id/settings.po                                |    4 +-
 l10n/id/user_ldap.po                               |  134 +-
 l10n/is/core.po                                    |    4 +-
 l10n/is/files_sharing.po                           |   18 +-
 l10n/is/settings.po                                |    4 +-
 l10n/is/user_ldap.po                               |  134 +-
 l10n/it/core.po                                    |    4 +-
 l10n/it/files_sharing.po                           |   18 +-
 l10n/it/settings.po                                |    4 +-
 l10n/it/user_ldap.po                               |  134 +-
 l10n/ja_JP/core.po                                 |    4 +-
 l10n/ja_JP/files.po                                |   28 +-
 l10n/ja_JP/files_encryption.po                     |    8 +-
 l10n/ja_JP/files_sharing.po                        |   18 +-
 l10n/ja_JP/settings.po                             |   26 +-
 l10n/ja_JP/user_ldap.po                            |  137 +-
 l10n/ka/core.po                                    |    4 +-
 l10n/ka/files_sharing.po                           |   18 +-
 l10n/ka/settings.po                                |    4 +-
 l10n/ka/user_ldap.po                               |  134 +-
 l10n/ka_GE/core.po                                 |    4 +-
 l10n/ka_GE/files_sharing.po                        |   18 +-
 l10n/ka_GE/settings.po                             |    4 +-
 l10n/ka_GE/user_ldap.po                            |  134 +-
 l10n/km/user_ldap.po                               |  134 +-
 l10n/kn/user_ldap.po                               |  134 +-
 l10n/ko/core.po                                    |    4 +-
 l10n/ko/files_sharing.po                           |   18 +-
 l10n/ko/settings.po                                |    4 +-
 l10n/ko/user_ldap.po                               |  134 +-
 l10n/ku_IQ/core.po                                 |    4 +-
 l10n/ku_IQ/files_sharing.po                        |   18 +-
 l10n/ku_IQ/settings.po                             |    4 +-
 l10n/ku_IQ/user_ldap.po                            |  134 +-
 l10n/lb/core.po                                    |    4 +-
 l10n/lb/files_sharing.po                           |   18 +-
 l10n/lb/settings.po                                |    4 +-
 l10n/lb/user_ldap.po                               |  134 +-
 l10n/lt_LT/core.po                                 |    4 +-
 l10n/lt_LT/files_sharing.po                        |   18 +-
 l10n/lt_LT/settings.po                             |    4 +-
 l10n/lt_LT/user_ldap.po                            |  134 +-
 l10n/lv/core.po                                    |    4 +-
 l10n/lv/files_sharing.po                           |   18 +-
 l10n/lv/settings.po                                |    4 +-
 l10n/lv/user_ldap.po                               |  134 +-
 l10n/mk/core.po                                    |    4 +-
 l10n/mk/files_sharing.po                           |   18 +-
 l10n/mk/settings.po                                |    4 +-
 l10n/mk/user_ldap.po                               |  134 +-
 l10n/ml_IN/user_ldap.po                            |  134 +-
 l10n/ms_MY/core.po                                 |    4 +-
 l10n/ms_MY/files_sharing.po                        |   18 +-
 l10n/ms_MY/settings.po                             |    4 +-
 l10n/ms_MY/user_ldap.po                            |  134 +-
 l10n/my_MM/core.po                                 |    4 +-
 l10n/my_MM/files_sharing.po                        |   18 +-
 l10n/my_MM/settings.po                             |    4 +-
 l10n/my_MM/user_ldap.po                            |  134 +-
 l10n/nb_NO/core.po                                 |    4 +-
 l10n/nb_NO/files_sharing.po                        |   18 +-
 l10n/nb_NO/settings.po                             |    4 +-
 l10n/nb_NO/user_ldap.po                            |  134 +-
 l10n/nds/user_ldap.po                              |  134 +-
 l10n/ne/user_ldap.po                               |  134 +-
 l10n/nl/core.po                                    |    4 +-
 l10n/nl/files_sharing.po                           |   18 +-
 l10n/nl/settings.po                                |   14 +-
 l10n/nl/user_ldap.po                               |  134 +-
 l10n/nn_NO/core.po                                 |    4 +-
 l10n/nn_NO/files_sharing.po                        |   18 +-
 l10n/nn_NO/settings.po                             |    4 +-
 l10n/nn_NO/user_ldap.po                            |  134 +-
 l10n/nqo/user_ldap.po                              |  134 +-
 l10n/oc/core.po                                    |    4 +-
 l10n/oc/files_sharing.po                           |   18 +-
 l10n/oc/settings.po                                |    4 +-
 l10n/oc/user_ldap.po                               |  134 +-
 l10n/pa/core.po                                    |    4 +-
 l10n/pa/files_sharing.po                           |   18 +-
 l10n/pa/settings.po                                |    4 +-
 l10n/pa/user_ldap.po                               |  134 +-
 l10n/pl/core.po                                    |    4 +-
 l10n/pl/files_sharing.po                           |   18 +-
 l10n/pl/settings.po                                |    4 +-
 l10n/pl/user_ldap.po                               |  134 +-
 l10n/pt_BR/core.po                                 |    4 +-
 l10n/pt_BR/files_sharing.po                        |   18 +-
 l10n/pt_BR/settings.po                             |    4 +-
 l10n/pt_BR/user_ldap.po                            |  134 +-
 l10n/pt_PT/core.po                                 |    4 +-
 l10n/pt_PT/files_sharing.po                        |   18 +-
 l10n/pt_PT/lib.po                                  |   16 +-
 l10n/pt_PT/settings.po                             |    4 +-
 l10n/pt_PT/user_ldap.po                            |  134 +-
 l10n/ro/core.po                                    |    4 +-
 l10n/ro/files_sharing.po                           |   18 +-
 l10n/ro/settings.po                                |    4 +-
 l10n/ro/user_ldap.po                               |  134 +-
 l10n/ru/core.po                                    |    4 +-
 l10n/ru/files_sharing.po                           |   18 +-
 l10n/ru/settings.po                                |    4 +-
 l10n/ru/user_ldap.po                               |  136 +-
 l10n/ru_RU/core.po                                 |    4 +-
 l10n/ru_RU/files_sharing.po                        |   18 +-
 l10n/ru_RU/settings.po                             |    4 +-
 l10n/ru_RU/user_ldap.po                            |  134 +-
 l10n/si_LK/core.po                                 |    4 +-
 l10n/si_LK/files_sharing.po                        |   18 +-
 l10n/si_LK/settings.po                             |    4 +-
 l10n/si_LK/user_ldap.po                            |  134 +-
 l10n/sk/user_ldap.po                               |  134 +-
 l10n/sk_SK/core.po                                 |   48 +-
 l10n/sk_SK/files.po                                |   56 +-
 l10n/sk_SK/files_encryption.po                     |    8 +-
 l10n/sk_SK/files_external.po                       |   16 +-
 l10n/sk_SK/files_sharing.po                        |   18 +-
 l10n/sk_SK/lib.po                                  |   46 +-
 l10n/sk_SK/settings.po                             |   36 +-
 l10n/sk_SK/user_ldap.po                            |  200 +-
 l10n/sl/core.po                                    |   36 +-
 l10n/sl/files.po                                   |   91 +-
 l10n/sl/files_sharing.po                           |   39 +-
 l10n/sl/files_trashbin.po                          |   15 +-
 l10n/sl/files_versions.po                          |   25 +-
 l10n/sl/lib.po                                     |   59 +-
 l10n/sl/settings.po                                |   22 +-
 l10n/sl/user_ldap.po                               |  141 +-
 l10n/sl/user_webdavauth.po                         |   12 +-
 l10n/sq/core.po                                    |    4 +-
 l10n/sq/files_sharing.po                           |   18 +-
 l10n/sq/settings.po                                |    4 +-
 l10n/sq/user_ldap.po                               |  134 +-
 l10n/sr/core.po                                    |    4 +-
 l10n/sr/files_sharing.po                           |   18 +-
 l10n/sr/settings.po                                |    4 +-
 l10n/sr/user_ldap.po                               |  134 +-
 l10n/sr at latin/core.po                              |    4 +-
 l10n/sr at latin/files_sharing.po                     |   18 +-
 l10n/sr at latin/settings.po                          |    4 +-
 l10n/sr at latin/user_ldap.po                         |  134 +-
 l10n/sv/core.po                                    |    4 +-
 l10n/sv/files_sharing.po                           |   18 +-
 l10n/sv/settings.po                                |    4 +-
 l10n/sv/user_ldap.po                               |  134 +-
 l10n/sw_KE/user_ldap.po                            |  134 +-
 l10n/ta_LK/core.po                                 |    4 +-
 l10n/ta_LK/files_sharing.po                        |   18 +-
 l10n/ta_LK/settings.po                             |    4 +-
 l10n/ta_LK/user_ldap.po                            |  134 +-
 l10n/te/core.po                                    |    4 +-
 l10n/te/files_sharing.po                           |   18 +-
 l10n/te/settings.po                                |    4 +-
 l10n/te/user_ldap.po                               |  134 +-
 l10n/templates/core.pot                            |    2 +-
 l10n/templates/files.pot                           |   22 +-
 l10n/templates/files_encryption.pot                |    2 +-
 l10n/templates/files_external.pot                  |    2 +-
 l10n/templates/files_sharing.pot                   |   16 +-
 l10n/templates/files_trashbin.pot                  |    4 +-
 l10n/templates/files_versions.pot                  |    2 +-
 l10n/templates/lib.pot                             |    2 +-
 l10n/templates/private.pot                         |    2 +-
 l10n/templates/settings.pot                        |    2 +-
 l10n/templates/user_ldap.pot                       |  132 +-
 l10n/templates/user_webdavauth.pot                 |    2 +-
 l10n/th_TH/core.po                                 |    4 +-
 l10n/th_TH/files_sharing.po                        |   18 +-
 l10n/th_TH/settings.po                             |    4 +-
 l10n/th_TH/user_ldap.po                            |  134 +-
 l10n/tr/core.po                                    |    4 +-
 l10n/tr/files_sharing.po                           |   18 +-
 l10n/tr/settings.po                                |    4 +-
 l10n/tr/user_ldap.po                               |  134 +-
 l10n/tzm/user_ldap.po                              |  134 +-
 l10n/ug/core.po                                    |    4 +-
 l10n/ug/files_sharing.po                           |   18 +-
 l10n/ug/settings.po                                |    4 +-
 l10n/ug/user_ldap.po                               |  134 +-
 l10n/uk/core.po                                    |    4 +-
 l10n/uk/files_sharing.po                           |   18 +-
 l10n/uk/settings.po                                |    4 +-
 l10n/uk/user_ldap.po                               |  134 +-
 l10n/uk/user_webdavauth.po                         |    8 +-
 l10n/ur_PK/core.po                                 |    4 +-
 l10n/ur_PK/files_sharing.po                        |   18 +-
 l10n/ur_PK/settings.po                             |    4 +-
 l10n/ur_PK/user_ldap.po                            |  134 +-
 l10n/uz/user_ldap.po                               |  134 +-
 l10n/vi/core.po                                    |    4 +-
 l10n/vi/files_sharing.po                           |   18 +-
 l10n/vi/settings.po                                |    4 +-
 l10n/vi/user_ldap.po                               |  134 +-
 l10n/zh_CN/core.po                                 |    4 +-
 l10n/zh_CN/files_sharing.po                        |   18 +-
 l10n/zh_CN/settings.po                             |    4 +-
 l10n/zh_CN/user_ldap.po                            |  134 +-
 l10n/zh_HK/core.po                                 |    4 +-
 l10n/zh_HK/files_sharing.po                        |   18 +-
 l10n/zh_HK/settings.po                             |    4 +-
 l10n/zh_HK/user_ldap.po                            |  134 +-
 l10n/zh_TW/core.po                                 |    4 +-
 l10n/zh_TW/files_sharing.po                        |   18 +-
 l10n/zh_TW/settings.po                             |    4 +-
 l10n/zh_TW/user_ldap.po                            |  134 +-
 lib/l10n/pt_PT.php                                 |    1 +
 lib/l10n/sk_SK.php                                 |   24 +-
 lib/l10n/sl.php                                    |   15 +-
 lib/private/api.php                                |   63 +-
 lib/private/connector/sabre/filesplugin.php        |    2 +
 lib/private/db/mdb2schemareader.php                |    7 +-
 lib/private/files.php                              |   12 +-
 lib/private/files/cache/homecache.php              |   13 +
 lib/private/files/filesystem.php                   |   26 +-
 lib/private/files/storage/common.php               |   26 +-
 lib/private/files/storage/commontest.php           |    2 +-
 lib/private/files/storage/local.php                |    8 -
 lib/private/files/storage/mappedlocal.php          |    8 -
 lib/private/files/view.php                         |    6 +-
 lib/private/helper.php                             |    3 +-
 lib/private/installer.php                          |    9 +-
 lib/private/preview/image.php                      |    4 +-
 lib/private/preview/movies.php                     |   59 +-
 lib/private/preview/mp3.php                        |    6 +-
 lib/private/preview/office-cl.php                  |    3 +-
 lib/private/preview/office-fallback.php            |    3 +-
 lib/public/share.php                               |    2 +-
 settings/l10n/cs_CZ.php                            |    8 +
 settings/l10n/en_GB.php                            |    4 +
 settings/l10n/hu_HU.php                            |   10 +
 settings/l10n/ja_JP.php                            |   10 +
 settings/l10n/nl.php                               |    4 +
 settings/l10n/sk_SK.php                            |   16 +-
 settings/l10n/sl.php                               |    8 +
 version.php                                        |    6 +-
 720 files changed, 37120 insertions(+), 10607 deletions(-)

diff --cc apps/activity/css/style.css
index 6b0feaf,0000000..06d2e05
mode 100644,000000..100644
--- a/apps/activity/css/style.css
+++ b/apps/activity/css/style.css
@@@ -1,176 -1,0 +1,176 @@@
 +.activitysubject {
 +	font-size:1.0em;
 +	color: #333;
 +	text-overflow: ellipsis;
 +	overflow-x: hidden;
 +}
 +.activitymessage {
 +	font-size:0.8em;
 +	color:#666;
 +	text-overflow: ellipsis;
 +	overflow-x: hidden;
 +}
 +
 +.noactivities{
 +	position: absolute;
 +	text-align: center;
- 	top: 50%;
++	top: 40%;
 +	width: 100%;
 +	padding: 20px;
 +	box-sizing: border-box;
 +	-moz-box-sizing: border-box;
 +}
 +.noactivities .head{
 +	font-size: 1.5em;
 +	color: #333;
 +	font-weight: bold;
 +	text-shadow: #fff 0 1px 0;
 +}
 +.noactivities .body{
 +	color: #666;
 +	margin-top: 10px;
 +	font-size: 1em;
 +}
 +
 +.rssbutton {
 +	font-size: 0.8em;
 +	position: absolute;
 +	top: 0;
 +	right: 0;
 +	margin: 10px 5px;
 +}
 +
 +#container {
 +  background: #FFF;
 +  padding: 10px 5px;
 +  margin-bottom: 20px;
 +  border-radius: 5px;
 +  clear: both;
 +  -webkit-border-radius: 5px;
 +	 -moz-border-radius: 5px;
 +		  border-radius: 5px;
 +}
 +
 +.group{
 +	clear: both;
 +	padding-bottom: 10px;
 +}
 +
 +.groupheader{
 +	font-weight: bold;
 +	font-size:2.2em;
 +	color: #666;
 +	border-top: 1px solid #DDD;
 +	padding: 20px 20px 10px 20px;
 +	clear: both;
 +	display: block;
 +}
 +
 +.group:first-child .groupheader{
 +	border-top: none;
 +}
 +
 +.box {
 +	width: 240px;
 +	float: left;
 +	padding: 15px;
 +	margin: 10px;
 +	background: #EEE;
 +	font-weight: 300;
 +	border: 1px solid #DDD;
 +	-webkit-border-radius: 5px;
 +	 -moz-border-radius: 5px;
 +		  border-radius: 5px;
 +}
 +
 +.box.loaded{
 +	transition: opacity 1s ease;
 +	-ms-transition: opacity 1s ease;
 +	-moz-transition: opacity 1s ease;
 +	-o-transition: opacity 1s ease;
 +	-webkit-transition: opacity 1s ease;
 +	opacity: 1;
 +}
 +
 +.box.loading{
 +	opacity: 0;
 +}
 +
 +.box .avatar{
 +	float: left;
 +	margin-right: 20px;
 +}
 +
 +.box .header{
 +	height: 32px;
 +	border-bottom: 1px solid #DDD;
 +	padding-bottom: 20px;
 +	margin-bottom: 10px;
 +}
 +
 +.box .messagecontainer{
 +	width: 100%;
 +	display: block;
 +}
 +
 +.box .preview{
 +	margin-top: 10px;
 +	margin-left: auto;
 +	margin-right: auto;
 +	display: block;
 +	width: 150px;
 +	height: 150px;
 +}
 +
 +.box .user{
 +	white-space: nowrap;
 +	overflow: hidden;
 +	text-overflow: ellipsis;
 +	float: left;
 +	display: inline-block;
 +	width: 180px;
 +}
 +
 +.box .user{
 +	font-weight: bold;
 +}
 +
 +.box .activitytime {
 +	float: left;
 +	color:#666;
 +	font-size: 0.8em;
 +}
 +
 +.box .appname {
 +	float: right;
 +	color: #333;
 +	font-size: 0.8em;
 +}
 +
 +.box .grouped{
 +	list-style: none;
 +}
 +
 +.box .grouped .more{
 +	cursor: default;
 +	color: #666;
 +	text-align: right;
 +}
 +
 +/* Infinite Scroll loader */
 +#infscr-loading {
 +  text-align: center;
 +  z-index: 100;
 +  position: fixed;
 +  left: 45%;
 +  bottom: 40px;
 +  width: 200px;
 +  padding: 10px;
 +  background: #000;
 +  opacity: 0.8;
 +  color: #FFF;
 +  -webkit-border-radius: 10px;
 +	 -moz-border-radius: 10px;
 +		  border-radius: 10px;
 +}
 +
diff --cc apps/bookmarks/l10n/sk_SK.php
index ab789d1,0000000..b223d12
mode 100644,000000..100644
--- a/apps/bookmarks/l10n/sk_SK.php
+++ b/apps/bookmarks/l10n/sk_SK.php
@@@ -1,35 -1,0 +1,35 @@@
 +<?php $TRANSLATIONS = array(
 +"No file provided for import" => "Žiadny súbor na import",
 +"Unsupported file type for import" => "Nepodporovaný typ súboru pre import",
 +"Bookmarks" => "Záložky",
 +"Tags" => "Značky",
 +"Filter by tag" => "Filtrovať podľa značky",
 +"Edit bookmark" => "Upraviť záložku",
 +"Are you sure you want to remove this tag from every entry?" => "Naozaj ste si istý, že chcete odstrániť túto značku z každého záznamu?",
- "Warning" => "Varovanie",
++"Warning" => "Upozornenie",
 +"Import error" => "Chyba importu",
 +"Import completed successfully." => "Import prebehol úspešne.",
 +"Uploading..." => "Odosielanie...",
 +"Bookm." => "Zál.",
 +"Add a bookmark" => "Pridať záložku",
 +"Close" => "Zavrieť",
 +"The title of the page" => "Názov stránky",
 +"The address of the page" => "Adresa stránky",
 +"Description of the page" => "Popis stránky",
 +"Save" => "Uložiť",
 +"Delete" => "Zmazať",
 +"Edit" => "Upraviť",
 +"Cancel" => "Zrušiť",
- "Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Presuňte toto do Vášho prehliadača a kliknite ak chcete aktuálnu stránku uložiť do záložiek.",
++"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Presuňte toto do vášho prehliadača a kliknite ak chcete aktuálnu stránku uložiť do záložiek.",
 +"Read later" => "Prečítať neskôr",
 +"Address" => "Adresa",
 +"Add" => "Pridať",
 +"Related Tags" => "Podobné značky",
 +"Settings" => "Nastavenia",
- "You have no bookmarks" => "Nemáte záložky",
++"You have no bookmarks" => "Nemáte žiadne záložky",
 +"You can also try to import a bookmark file" => "Môžte tiež skúsiť import súboru zo záložkami.",
 +"Bookmarklet" => "Bookmarklet",
 +"Export & Import" => "Export & Import",
 +"Export" => "Export",
 +"Import" => "Import"
 +);
diff --cc apps/bookmarks/l10n/sk_SK/bookmarks.po
index ab79811,0000000..de656db
mode 100644,000000..100644
--- a/apps/bookmarks/l10n/sk_SK/bookmarks.po
+++ b/apps/bookmarks/l10n/sk_SK/bookmarks.po
@@@ -1,156 -1,0 +1,156 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mhh <marian.hvolka at stuba.sk>, 2013
 +# martinb <martin.babik at gmail.com>, 2012
 +# Roman Priesol <roman at priesol.net>, 2012
 +# martin, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 05:55-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
- "Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
++"POT-Creation-Date: 2013-11-15 23:03-0500\n"
++"PO-Revision-Date: 2013-11-13 17:00+0000\n"
++"Last-Translator: mhh <marian.hvolka at stuba.sk>\n"
 +"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sk_SK\n"
 +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 +
 +#: ajax/import.php:9
 +msgid "No file provided for import"
 +msgstr "Žiadny súbor na import"
 +
 +#: ajax/import.php:21
 +msgid "Unsupported file type for import"
 +msgstr "Nepodporovaný typ súboru pre import"
 +
 +#: appinfo/app.php:17
 +msgid "Bookmarks"
 +msgstr "Záložky"
 +
 +#: js/addBm.js:42 js/bookmarks.js:235
 +msgid "Tags"
 +msgstr "Značky"
 +
 +#: js/bookmarks.js:22
 +msgid "Filter by tag"
 +msgstr "Filtrovať podľa značky"
 +
 +#: js/bookmarks.js:132
 +msgid "Edit bookmark"
 +msgstr "Upraviť záložku"
 +
 +#: js/bookmarks.js:369
 +msgid "Are you sure you want to remove this tag from every entry?"
 +msgstr "Naozaj ste si istý, že chcete odstrániť túto značku z každého záznamu?"
 +
 +#: js/bookmarks.js:370
 +msgid "Warning"
- msgstr "Varovanie"
++msgstr "Upozornenie"
 +
 +#: js/settings.js:18
 +msgid "Import error"
 +msgstr "Chyba importu"
 +
 +#: js/settings.js:29
 +msgid "Import completed successfully."
 +msgstr "Import prebehol úspešne."
 +
 +#: js/settings.js:61
 +msgid "Uploading..."
 +msgstr "Odosielanie..."
 +
 +#: lib/search.php:38
 +msgid "Bookm."
 +msgstr "Zál."
 +
 +#: templates/addBm.php:5
 +msgid "Add a bookmark"
 +msgstr "Pridať záložku"
 +
 +#: templates/addBm.php:8
 +msgid "Close"
 +msgstr "Zavrieť"
 +
 +#: templates/addBm.php:16 templates/js_tpl.php:27
 +msgid "The title of the page"
 +msgstr "Názov stránky"
 +
 +#: templates/addBm.php:21 templates/js_tpl.php:31
 +msgid "The address of the page"
 +msgstr "Adresa stránky"
 +
 +#: templates/addBm.php:34 templates/js_tpl.php:40
 +msgid "Description of the page"
 +msgstr "Popis stránky"
 +
 +#: templates/addBm.php:38 templates/js_tpl.php:45
 +msgid "Save"
 +msgstr "Uložiť"
 +
 +#: templates/js_tpl.php:6 templates/js_tpl.php:59
 +msgid "Delete"
 +msgstr "Zmazať"
 +
 +#: templates/js_tpl.php:14 templates/js_tpl.php:55
 +msgid "Edit"
 +msgstr "Upraviť"
 +
 +#: templates/js_tpl.php:44
 +msgid "Cancel"
 +msgstr "Zrušiť"
 +
 +#: templates/list.php:14
 +msgid ""
 +"Drag this to your browser bookmarks and click it, when you want to bookmark "
 +"a webpage quickly:"
- msgstr "Presuňte toto do Vášho prehliadača a kliknite ak chcete aktuálnu stránku uložiť do záložiek."
++msgstr "Presuňte toto do vášho prehliadača a kliknite ak chcete aktuálnu stránku uložiť do záložiek."
 +
 +#: templates/list.php:15
 +msgid "Read later"
 +msgstr "Prečítať neskôr"
 +
 +#: templates/list.php:22
 +msgid "Address"
 +msgstr "Adresa"
 +
 +#: templates/list.php:23
 +msgid "Add"
 +msgstr "Pridať"
 +
 +#: templates/list.php:31
 +msgid "Related Tags"
 +msgstr "Podobné značky"
 +
 +#: templates/list.php:38 templates/list.php:40
 +msgid "Settings"
 +msgstr "Nastavenia"
 +
 +#: templates/list.php:54
 +msgid "You have no bookmarks"
- msgstr "Nemáte záložky"
++msgstr "Nemáte žiadne záložky"
 +
 +#: templates/list.php:59
 +msgid "You can also try to import a bookmark file"
 +msgstr "Môžte tiež skúsiť import súboru zo záložkami."
 +
 +#: templates/settings.php:11
 +msgid "Bookmarklet"
 +msgstr "Bookmarklet"
 +
 +#: templates/settings.php:23
 +msgid "Export & Import"
 +msgstr "Export & Import"
 +
 +#: templates/settings.php:24
 +msgid "Export"
 +msgstr "Export"
 +
 +#: templates/settings.php:26
 +msgid "Import"
 +msgstr "Import"
diff --cc apps/bookmarks/l10n/templates/bookmarks.pot
index fe910f7,0000000..c4827db
mode 100644,000000..100644
--- a/apps/bookmarks/l10n/templates/bookmarks.pot
+++ b/apps/bookmarks/l10n/templates/bookmarks.pot
@@@ -1,152 -1,0 +1,152 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 +#
 +#, fuzzy
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud bookmarks 5.0.0\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 05:55-0500\n"
++"POT-Creation-Date: 2013-11-15 23:03-0500\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"
 +"Language: \n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=CHARSET\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +
 +#: ajax/import.php:9
 +msgid "No file provided for import"
 +msgstr ""
 +
 +#: ajax/import.php:21
 +msgid "Unsupported file type for import"
 +msgstr ""
 +
 +#: appinfo/app.php:17
 +msgid "Bookmarks"
 +msgstr ""
 +
 +#: js/addBm.js:42 js/bookmarks.js:235
 +msgid "Tags"
 +msgstr ""
 +
 +#: js/bookmarks.js:22
 +msgid "Filter by tag"
 +msgstr ""
 +
 +#: js/bookmarks.js:132
 +msgid "Edit bookmark"
 +msgstr ""
 +
 +#: js/bookmarks.js:369
 +msgid "Are you sure you want to remove this tag from every entry?"
 +msgstr ""
 +
 +#: js/bookmarks.js:370
 +msgid "Warning"
 +msgstr ""
 +
 +#: js/settings.js:18
 +msgid "Import error"
 +msgstr ""
 +
 +#: js/settings.js:29
 +msgid "Import completed successfully."
 +msgstr ""
 +
 +#: js/settings.js:61
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: lib/search.php:38
 +msgid "Bookm."
 +msgstr ""
 +
 +#: templates/addBm.php:5
 +msgid "Add a bookmark"
 +msgstr ""
 +
 +#: templates/addBm.php:8
 +msgid "Close"
 +msgstr ""
 +
 +#: templates/addBm.php:16 templates/js_tpl.php:27
 +msgid "The title of the page"
 +msgstr ""
 +
 +#: templates/addBm.php:21 templates/js_tpl.php:31
 +msgid "The address of the page"
 +msgstr ""
 +
 +#: templates/addBm.php:34 templates/js_tpl.php:40
 +msgid "Description of the page"
 +msgstr ""
 +
 +#: templates/addBm.php:38 templates/js_tpl.php:45
 +msgid "Save"
 +msgstr ""
 +
 +#: templates/js_tpl.php:6 templates/js_tpl.php:59
 +msgid "Delete"
 +msgstr ""
 +
 +#: templates/js_tpl.php:14 templates/js_tpl.php:55
 +msgid "Edit"
 +msgstr ""
 +
 +#: templates/js_tpl.php:44
 +msgid "Cancel"
 +msgstr ""
 +
 +#: templates/list.php:14
 +msgid ""
 +"Drag this to your browser bookmarks and click it, when you want to bookmark "
 +"a webpage quickly:"
 +msgstr ""
 +
 +#: templates/list.php:15
 +msgid "Read later"
 +msgstr ""
 +
 +#: templates/list.php:22
 +msgid "Address"
 +msgstr ""
 +
 +#: templates/list.php:23
 +msgid "Add"
 +msgstr ""
 +
 +#: templates/list.php:31
 +msgid "Related Tags"
 +msgstr ""
 +
 +#: templates/list.php:38 templates/list.php:40
 +msgid "Settings"
 +msgstr ""
 +
 +#: templates/list.php:54
 +msgid "You have no bookmarks"
 +msgstr ""
 +
 +#: templates/list.php:59
 +msgid "You can also try to import a bookmark file"
 +msgstr ""
 +
 +#: templates/settings.php:11
 +msgid "Bookmarklet"
 +msgstr ""
 +
 +#: templates/settings.php:23
 +msgid "Export & Import"
 +msgstr ""
 +
 +#: templates/settings.php:24
 +msgid "Export"
 +msgstr ""
 +
 +#: templates/settings.php:26
 +msgid "Import"
 +msgstr ""
diff --cc apps/bookmarks/templates/list.php
index c6c4ac0,0000000..e0b6c52
mode 100644,000000..100644
--- a/apps/bookmarks/templates/list.php
+++ b/apps/bookmarks/templates/list.php
@@@ -1,66 -1,0 +1,66 @@@
 +<?php 
 +/**
 + * Copyright (c) 2011 Marvin Thomas Rabe <mrabe at marvinrabe.de>
 + * Copyright (c) 2011 Arthur Schiwon <blizzz at arthur-schiwon.de>
 + * This file is licensed under the Affero General Public License version 3 or
 + * later.
 + * See the COPYING-README file.
 + */
 +function bookmarklet(){
 +	$l = new OC_l10n('bookmarks');
 +	$blet = "javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open('";
 +	$blet .= OCP\Util::linkToAbsolute('bookmarks', 'addBm.php');
 +	$blet .= "?output=popup&url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=400px,width=550px,resizable=1,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();";
 +	$help_msg  = $l->t('Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:');
- 	return '<div class="bkm_hint">'.$help_msg.'</div><br /><a class="button bookmarklet" href="' . $blet . '">' . $l->t('Read later') . '</a>';
++	return '<div class="bkm_hint">'.$help_msg.'</div><br /><a class="button bookmarklet" href="' . $blet . '">' . $l->t('Add to ownCloud') . '</a>';
 +}
 +?>
 +
 +<div id="leftcontent">
 +
 +	<form id="add_form">
 +		<input type="text" id="add_url" value="" placeholder="<?php p($l->t('Address')); ?>"/>
 +		<input type="submit" value="<?php p($l->t('Add')); ?>" id="bookmark_add_submit" />
 +	</form>
 +
 +	<p id="tag_filter">
 +		<input type="text" value="<?php p($_['req_tag']); ?>"/>
 +	</p>
 +	<input type="hidden" id="bookmarkFilterTag" value="<?php p($_['req_tag']); ?>" />
 +
 +	<label><?php p($l->t('Related Tags')); ?></label>
 +	<ul class="tag_list">
 +	</ul>
 +
 +
 +<div id="bookmark_settings" class="">
 +	<ul class="controls">
 +			<li id="settingsbtn" title="<?php p($l->t('Settings')); ?>">
 +				<img class="svg" src="<?php print_unescaped(OCP\Util::imagePath('core', 'actions/settings.svg')); ?>"
 +				alt="<?php p($l->t('Settings')); ?>" />
 +			</li>
 +	</ul>
 +	<div id="bm_setting_panel">
 +		<?php require 'settings.php';?>
 +	</div>
 +</div>
 +
 +</div>
 +<div id="rightcontent" class="rightcontent">
 +	<div id="firstrun" style="display: none;">
 +		<div id="distance"></div>
 +		<div id="firstrun_message">
 +			<p class="title"><?php
 +			p($l->t('You have no bookmarks'));
 +			$embedded = true;
 +			
 +			print_unescaped(bookmarklet());?></p><br/><br />
 +
 +			<div class="bkm_hint"><a href="#" id="firstrun_setting"><?php p($l->t('You can also try to import a bookmark file'));?></a></div>
 +		</div>
 +	</div>
 +	<div class="bookmarks_list"></div>
 +</div>
 +<script type="text/javascript" src="<?php print_unescaped(OC_Helper::linkTo('bookmarks/js', 'full_tags.php'));?>"></script>
 +
 +<?php require 'js_tpl.php';?>
diff --cc apps/calendar/3rdparty/fullcalendar/GPL-LICENSE.txt
index 0000000,0000000..11dddd0
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/GPL-LICENSE.txt
@@@ -1,0 -1,0 +1,278 @@@
++        GNU GENERAL PUBLIC LICENSE
++           Version 2, June 1991
++
++ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
++ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++          Preamble
++
++  The licenses for most software are designed to take away your
++freedom to share and change it.  By contrast, the GNU General Public
++License is intended to guarantee your freedom to share and change free
++software--to make sure the software is free for all its users.  This
++General Public License applies to most of the Free Software
++Foundation's software and to any other program whose authors commit to
++using it.  (Some other Free Software Foundation software is covered by
++the GNU Lesser General Public License instead.)  You can apply it to
++your programs, too.
++
++  When we speak of free software, we are referring to freedom, not
++price.  Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++this service if you wish), that you receive source code or can get it
++if you want it, that you can change the software or use pieces of it
++in new free programs; and that you know you can do these things.
++
++  To protect your rights, we need to make restrictions that forbid
++anyone to deny you these rights or to ask you to surrender the rights.
++These restrictions translate to certain responsibilities for you if you
++distribute copies of the software, or if you modify it.
++
++  For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must give the recipients all the rights that
++you have.  You must make sure that they, too, receive or can get the
++source code.  And you must show them these terms so they know their
++rights.
++
++  We protect your rights with two steps: (1) copyright the software, and
++(2) offer you this license which gives you legal permission to copy,
++distribute and/or modify the software.
++
++  Also, for each author's protection and ours, we want to make certain
++that everyone understands that there is no warranty for this free
++software.  If the software is modified by someone else and passed on, we
++want its recipients to know that what they have is not the original, so
++that any problems introduced by others will not reflect on the original
++authors' reputations.
++
++  Finally, any free program is threatened constantly by software
++patents.  We wish to avoid the danger that redistributors of a free
++program will individually obtain patent licenses, in effect making the
++program proprietary.  To prevent this, we have made it clear that any
++patent must be licensed for everyone's free use or not licensed at all.
++
++  The precise terms and conditions for copying, distribution and
++modification follow.
++
++        GNU GENERAL PUBLIC LICENSE
++   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
++
++  0. This License applies to any program or other work which contains
++a notice placed by the copyright holder saying it may be distributed
++under the terms of this General Public License.  The "Program", below,
++refers to any such program or work, and a "work based on the Program"
++means either the Program or any derivative work under copyright law:
++that is to say, a work containing the Program or a portion of it,
++either verbatim or with modifications and/or translated into another
++language.  (Hereinafter, translation is included without limitation in
++the term "modification".)  Each licensee is addressed as "you".
++
++Activities other than copying, distribution and modification are not
++covered by this License; they are outside its scope.  The act of
++running the Program is not restricted, and the output from the Program
++is covered only if its contents constitute a work based on the
++Program (independent of having been made by running the Program).
++Whether that is true depends on what the Program does.
++
++  1. You may copy and distribute verbatim copies of the Program's
++source code as you receive it, in any medium, provided that you
++conspicuously and appropriately publish on each copy an appropriate
++copyright notice and disclaimer of warranty; keep intact all the
++notices that refer to this License and to the absence of any warranty;
++and give any other recipients of the Program a copy of this License
++along with the Program.
++
++You may charge a fee for the physical act of transferring a copy, and
++you may at your option offer warranty protection in exchange for a fee.
++
++  2. You may modify your copy or copies of the Program or any portion
++of it, thus forming a work based on the Program, and copy and
++distribute such modifications or work under the terms of Section 1
++above, provided that you also meet all of these conditions:
++
++    a) You must cause the modified files to carry prominent notices
++    stating that you changed the files and the date of any change.
++
++    b) You must cause any work that you distribute or publish, that in
++    whole or in part contains or is derived from the Program or any
++    part thereof, to be licensed as a whole at no charge to all third
++    parties under the terms of this License.
++
++    c) If the modified program normally reads commands interactively
++    when run, you must cause it, when started running for such
++    interactive use in the most ordinary way, to print or display an
++    announcement including an appropriate copyright notice and a
++    notice that there is no warranty (or else, saying that you provide
++    a warranty) and that users may redistribute the program under
++    these conditions, and telling the user how to view a copy of this
++    License.  (Exception: if the Program itself is interactive but
++    does not normally print such an announcement, your work based on
++    the Program is not required to print an announcement.)
++
++These requirements apply to the modified work as a whole.  If
++identifiable sections of that work are not derived from the Program,
++and can be reasonably considered independent and separate works in
++themselves, then this License, and its terms, do not apply to those
++sections when you distribute them as separate works.  But when you
++distribute the same sections as part of a whole which is a work based
++on the Program, the distribution of the whole must be on the terms of
++this License, whose permissions for other licensees extend to the
++entire whole, and thus to each and every part regardless of who wrote it.
++
++Thus, it is not the intent of this section to claim rights or contest
++your rights to work written entirely by you; rather, the intent is to
++exercise the right to control the distribution of derivative or
++collective works based on the Program.
++
++In addition, mere aggregation of another work not based on the Program
++with the Program (or with a work based on the Program) on a volume of
++a storage or distribution medium does not bring the other work under
++the scope of this License.
++
++  3. You may copy and distribute the Program (or a work based on it,
++under Section 2) in object code or executable form under the terms of
++Sections 1 and 2 above provided that you also do one of the following:
++
++    a) Accompany it with the complete corresponding machine-readable
++    source code, which must be distributed under the terms of Sections
++    1 and 2 above on a medium customarily used for software interchange; or,
++
++    b) Accompany it with a written offer, valid for at least three
++    years, to give any third party, for a charge no more than your
++    cost of physically performing source distribution, a complete
++    machine-readable copy of the corresponding source code, to be
++    distributed under the terms of Sections 1 and 2 above on a medium
++    customarily used for software interchange; or,
++
++    c) Accompany it with the information you received as to the offer
++    to distribute corresponding source code.  (This alternative is
++    allowed only for noncommercial distribution and only if you
++    received the program in object code or executable form with such
++    an offer, in accord with Subsection b above.)
++
++The source code for a work means the preferred form of the work for
++making modifications to it.  For an executable work, complete source
++code means all the source code for all modules it contains, plus any
++associated interface definition files, plus the scripts used to
++control compilation and installation of the executable.  However, as a
++special exception, the source code distributed need not include
++anything that is normally distributed (in either source or binary
++form) with the major components (compiler, kernel, and so on) of the
++operating system on which the executable runs, unless that component
++itself accompanies the executable.
++
++If distribution of executable or object code is made by offering
++access to copy from a designated place, then offering equivalent
++access to copy the source code from the same place counts as
++distribution of the source code, even though third parties are not
++compelled to copy the source along with the object code.
++
++  4. You may not copy, modify, sublicense, or distribute the Program
++except as expressly provided under this License.  Any attempt
++otherwise to copy, modify, sublicense or distribute the Program is
++void, and will automatically terminate your rights under this License.
++However, parties who have received copies, or rights, from you under
++this License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++  5. You are not required to accept this License, since you have not
++signed it.  However, nothing else grants you permission to modify or
++distribute the Program or its derivative works.  These actions are
++prohibited by law if you do not accept this License.  Therefore, by
++modifying or distributing the Program (or any work based on the
++Program), you indicate your acceptance of this License to do so, and
++all its terms and conditions for copying, distributing or modifying
++the Program or works based on it.
++
++  6. Each time you redistribute the Program (or any work based on the
++Program), the recipient automatically receives a license from the
++original licensor to copy, distribute or modify the Program subject to
++these terms and conditions.  You may not impose any further
++restrictions on the recipients' exercise of the rights granted herein.
++You are not responsible for enforcing compliance by third parties to
++this License.
++
++  7. If, as a consequence of a court judgment or allegation of patent
++infringement or for any other reason (not limited to patent issues),
++conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License.  If you cannot
++distribute so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you
++may not distribute the Program at all.  For example, if a patent
++license would not permit royalty-free redistribution of the Program by
++all those who receive copies directly or indirectly through you, then
++the only way you could satisfy both it and this License would be to
++refrain entirely from distribution of the Program.
++
++If any portion of this section is held invalid or unenforceable under
++any particular circumstance, the balance of the section is intended to
++apply and the section as a whole is intended to apply in other
++circumstances.
++
++It is not the purpose of this section to induce you to infringe any
++patents or other property right claims or to contest validity of any
++such claims; this section has the sole purpose of protecting the
++integrity of the free software distribution system, which is
++implemented by public license practices.  Many people have made
++generous contributions to the wide range of software distributed
++through that system in reliance on consistent application of that
++system; it is up to the author/donor to decide if he or she is willing
++to distribute software through any other system and a licensee cannot
++impose that choice.
++
++This section is intended to make thoroughly clear what is believed to
++be a consequence of the rest of this License.
++
++  8. If the distribution and/or use of the Program is restricted in
++certain countries either by patents or by copyrighted interfaces, the
++original copyright holder who places the Program under this License
++may add an explicit geographical distribution limitation excluding
++those countries, so that distribution is permitted only in or among
++countries not thus excluded.  In such case, this License incorporates
++the limitation as if written in the body of this License.
++
++  9. The Free Software Foundation may publish revised and/or new versions
++of the General Public License from time to time.  Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++Each version is given a distinguishing version number.  If the Program
++specifies a version number of this License which applies to it and "any
++later version", you have the option of following the terms and conditions
++either of that version or of any later version published by the Free
++Software Foundation.  If the Program does not specify a version number of
++this License, you may choose any version ever published by the Free Software
++Foundation.
++
++  10. If you wish to incorporate parts of the Program into other free
++programs whose distribution conditions are different, write to the author
++to ask for permission.  For software which is copyrighted by the Free
++Software Foundation, write to the Free Software Foundation; we sometimes
++make exceptions for this.  Our decision will be guided by the two goals
++of preserving the free status of all derivatives of our free software and
++of promoting the sharing and reuse of software generally.
++
++          NO WARRANTY
++
++  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
++REPAIR OR CORRECTION.
++
++  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGES.
diff --cc apps/calendar/3rdparty/fullcalendar/MIT-LICENSE.txt
index 0000000,0000000..46d4754
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/MIT-LICENSE.txt
@@@ -1,0 -1,0 +1,20 @@@
++Copyright (c) 2009 Adam Shaw
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --cc apps/calendar/3rdparty/fullcalendar/css/fullcalendar.css
index 0000000,0000000..2df4544
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/css/fullcalendar.css
@@@ -1,0 -1,0 +1,579 @@@
++/*!
++ * FullCalendar v1.6.1 Stylesheet
++ * Docs & License: http://arshaw.com/fullcalendar/
++ * (c) 2013 Adam Shaw
++ */
++
++
++.fc {
++	direction: ltr;
++	text-align: left;
++	}
++	
++.fc table {
++	border-collapse: collapse;
++	border-spacing: 0;
++	}
++	
++html .fc,
++.fc table {
++	font-size: 1em;
++	}
++	
++.fc td,
++.fc th {
++	padding: 0;
++	vertical-align: top;
++	}
++
++
++
++/* Header
++------------------------------------------------------------------------*/
++
++.fc-header td {
++	white-space: nowrap;
++	}
++
++.fc-header-left {
++	width: 25%;
++	text-align: left;
++	}
++	
++.fc-header-center {
++	text-align: center;
++	}
++	
++.fc-header-right {
++	width: 25%;
++	text-align: right;
++	}
++	
++.fc-header-title {
++	display: inline-block;
++	vertical-align: top;
++	}
++	
++.fc-header-title h2 {
++	margin-top: 0;
++	white-space: nowrap;
++	}
++	
++.fc .fc-header-space {
++	padding-left: 10px;
++	}
++	
++.fc-header .fc-button {
++	margin-bottom: 1em;
++	vertical-align: top;
++	}
++	
++/* buttons edges butting together */
++
++.fc-header .fc-button {
++	margin-right: -1px;
++	}
++	
++.fc-header .fc-corner-right,  /* non-theme */
++.fc-header .ui-corner-right { /* theme */
++	margin-right: 0; /* back to normal */
++	}
++	
++/* button layering (for border precedence) */
++	
++.fc-header .fc-state-hover,
++.fc-header .ui-state-hover {
++	z-index: 2;
++	}
++	
++.fc-header .fc-state-down {
++	z-index: 3;
++	}
++
++.fc-header .fc-state-active,
++.fc-header .ui-state-active {
++	z-index: 4;
++	}
++	
++	
++	
++/* Content
++------------------------------------------------------------------------*/
++	
++.fc-content {
++	clear: both;
++	}
++	
++.fc-view {
++	width: 100%; /* needed for view switching (when view is absolute) */
++	overflow: hidden;
++	}
++	
++	
++
++/* Cell Styles
++------------------------------------------------------------------------*/
++
++.fc-widget-header,    /* <th>, usually */
++.fc-widget-content {  /* <td>, usually */
++	border: 1px solid #ddd;
++	}
++	
++.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
++	background: #ffa;
++	}
++	
++.fc-cell-overlay { /* semi-transparent rectangle while dragging */
++	background: #bce8f1;
++	opacity: .3;
++	filter: alpha(opacity=30); /* for IE */
++	}
++	
++
++
++/* Buttons
++------------------------------------------------------------------------*/
++
++.fc-button {
++	position: relative;
++	display: inline-block;
++	padding: 0 .6em;
++	overflow: hidden;
++	height: 1.9em;
++	line-height: 1.9em;
++	white-space: nowrap;
++	cursor: pointer;
++	}
++	
++.fc-state-default { /* non-theme */
++	border: 1px solid;
++	}
++
++.fc-state-default.fc-corner-left { /* non-theme */
++	border-top-left-radius: 4px;
++	border-bottom-left-radius: 4px;
++	}
++
++.fc-state-default.fc-corner-right { /* non-theme */
++	border-top-right-radius: 4px;
++	border-bottom-right-radius: 4px;
++	}
++
++/*
++	Our default prev/next buttons use HTML entities like ‹ › « »
++	and we'll try to make them look good cross-browser.
++*/
++
++.fc-text-arrow {
++	margin: 0 .1em;
++	font-size: 2em;
++	font-family: "Courier New", Courier, monospace;
++	vertical-align: baseline; /* for IE7 */
++	}
++
++.fc-button-prev .fc-text-arrow,
++.fc-button-next .fc-text-arrow { /* for ‹ › */
++	font-weight: bold;
++	}
++	
++/* icon (for jquery ui) */
++	
++.fc-button .fc-icon-wrap {
++	position: relative;
++	float: left;
++	top: 50%;
++	}
++	
++.fc-button .ui-icon {
++	position: relative;
++	float: left;
++	margin-top: -50%;
++	*margin-top: 0;
++	*top: -50%;
++	}
++	
++/*
++  button states
++  borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)
++*/
++
++.fc-state-default {
++	background-color: #f5f5f5;
++	background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
++	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
++	background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
++	background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
++	background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
++	background-repeat: repeat-x;
++	border-color: #e6e6e6 #e6e6e6 #bfbfbf;
++	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
++	color: #333;
++	text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
++	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
++	}
++
++.fc-state-hover,
++.fc-state-down,
++.fc-state-active,
++.fc-state-disabled {
++	color: #333333;
++	background-color: #e6e6e6;
++	}
++
++.fc-state-hover {
++	color: #333333;
++	text-decoration: none;
++	background-position: 0 -15px;
++	-webkit-transition: background-position 0.1s linear;
++	   -moz-transition: background-position 0.1s linear;
++	     -o-transition: background-position 0.1s linear;
++	        transition: background-position 0.1s linear;
++	}
++
++.fc-state-down,
++.fc-state-active {
++	background-color: #cccccc;
++	background-image: none;
++	outline: 0;
++	box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
++	}
++
++.fc-state-disabled {
++	cursor: default;
++	background-image: none;
++	opacity: 0.65;
++	filter: alpha(opacity=65);
++	box-shadow: none;
++	}
++
++	
++
++/* Global Event Styles
++------------------------------------------------------------------------*/
++	 
++.fc-event {
++	border: 1px solid #3a87ad; /* default BORDER color */
++	background-color: #3a87ad; /* default BACKGROUND color */
++	color: #fff;               /* default TEXT color */
++	font-size: .85em;
++	cursor: default;
++	}
++
++a.fc-event {
++	text-decoration: none;
++	}
++	
++a.fc-event,
++.fc-event-draggable {
++	cursor: pointer;
++	}
++	
++.fc-rtl .fc-event {
++	text-align: right;
++	}
++
++.fc-event-inner {
++	width: 100%;
++	height: 100%;
++	overflow: hidden;
++	}
++	
++.fc-event-time,
++.fc-event-title {
++	padding: 0 1px;
++	}
++	
++.fc .ui-resizable-handle {
++	display: block;
++	position: absolute;
++	z-index: 99999;
++	overflow: hidden; /* hacky spaces (IE6/7) */
++	font-size: 300%;  /* */
++	line-height: 50%; /* */
++	}
++	
++	
++	
++/* Horizontal Events
++------------------------------------------------------------------------*/
++
++.fc-event-hori {
++	border-width: 1px 0;
++	margin-bottom: 1px;
++	}
++
++.fc-ltr .fc-event-hori.fc-event-start,
++.fc-rtl .fc-event-hori.fc-event-end {
++	border-left-width: 1px;
++	border-top-left-radius: 3px;
++	border-bottom-left-radius: 3px;
++	}
++
++.fc-ltr .fc-event-hori.fc-event-end,
++.fc-rtl .fc-event-hori.fc-event-start {
++	border-right-width: 1px;
++	border-top-right-radius: 3px;
++	border-bottom-right-radius: 3px;
++	}
++	
++/* resizable */
++	
++.fc-event-hori .ui-resizable-e {
++	top: 0           !important; /* importants override pre jquery ui 1.7 styles */
++	right: -3px      !important;
++	width: 7px       !important;
++	height: 100%     !important;
++	cursor: e-resize;
++	}
++	
++.fc-event-hori .ui-resizable-w {
++	top: 0           !important;
++	left: -3px       !important;
++	width: 7px       !important;
++	height: 100%     !important;
++	cursor: w-resize;
++	}
++	
++.fc-event-hori .ui-resizable-handle {
++	_padding-bottom: 14px; /* IE6 had 0 height */
++	}
++	
++	
++	
++/* Reusable Separate-border Table
++------------------------------------------------------------*/
++
++table.fc-border-separate {
++	border-collapse: separate;
++	}
++	
++.fc-border-separate th,
++.fc-border-separate td {
++	border-width: 1px 0 0 1px;
++	}
++	
++.fc-border-separate th.fc-last,
++.fc-border-separate td.fc-last {
++	border-right-width: 1px;
++	}
++	
++.fc-border-separate tr.fc-last th,
++.fc-border-separate tr.fc-last td {
++	border-bottom-width: 1px;
++	}
++	
++.fc-border-separate tbody tr.fc-first td,
++.fc-border-separate tbody tr.fc-first th {
++	border-top-width: 0;
++	}
++	
++	
++
++/* Month View, Basic Week View, Basic Day View
++------------------------------------------------------------------------*/
++
++.fc-grid th {
++	text-align: center;
++	}
++
++.fc .fc-week-number {
++	width: 22px;
++	text-align: center;
++	}
++
++.fc .fc-week-number div {
++	padding: 0 2px;
++	}
++	
++.fc-grid .fc-day-number {
++	float: right;
++	padding: 0 2px;
++	}
++	
++.fc-grid .fc-other-month .fc-day-number {
++	opacity: 0.3;
++	filter: alpha(opacity=30); /* for IE */
++	/* opacity with small font can sometimes look too faded
++	   might want to set the 'color' property instead
++	   making day-numbers bold also fixes the problem */
++	}
++	
++.fc-grid .fc-day-content {
++	clear: both;
++	padding: 2px 2px 1px; /* distance between events and day edges */
++	}
++	
++/* event styles */
++	
++.fc-grid .fc-event-time {
++	font-weight: bold;
++	}
++	
++/* right-to-left */
++	
++.fc-rtl .fc-grid .fc-day-number {
++	float: left;
++	}
++	
++.fc-rtl .fc-grid .fc-event-time {
++	float: right;
++	}
++	
++	
++
++/* Agenda Week View, Agenda Day View
++------------------------------------------------------------------------*/
++
++.fc-agenda table {
++	border-collapse: separate;
++	}
++	
++.fc-agenda-days th {
++	text-align: center;
++	}
++	
++.fc-agenda .fc-agenda-axis {
++	width: 50px;
++	padding: 0 4px;
++	vertical-align: middle;
++	text-align: right;
++	white-space: nowrap;
++	font-weight: normal;
++	}
++
++.fc-agenda .fc-week-number {
++	font-weight: bold;
++	}
++	
++.fc-agenda .fc-day-content {
++	padding: 2px 2px 1px;
++	}
++	
++/* make axis border take precedence */
++	
++.fc-agenda-days .fc-agenda-axis {
++	border-right-width: 1px;
++	}
++	
++.fc-agenda-days .fc-col0 {
++	border-left-width: 0;
++	}
++	
++/* all-day area */
++	
++.fc-agenda-allday th {
++	border-width: 0 1px;
++	}
++	
++.fc-agenda-allday .fc-day-content {
++	min-height: 34px; /* TODO: doesnt work well in quirksmode */
++	_height: 34px;
++	}
++	
++/* divider (between all-day and slots) */
++	
++.fc-agenda-divider-inner {
++	height: 2px;
++	overflow: hidden;
++	}
++	
++.fc-widget-header .fc-agenda-divider-inner {
++	background: #eee;
++	}
++	
++/* slot rows */
++	
++.fc-agenda-slots th {
++	border-width: 1px 1px 0;
++	}
++	
++.fc-agenda-slots td {
++	border-width: 1px 0 0;
++	background: none;
++	}
++	
++.fc-agenda-slots td div {
++	height: 20px;
++	}
++	
++.fc-agenda-slots tr.fc-slot0 th,
++.fc-agenda-slots tr.fc-slot0 td {
++	border-top-width: 0;
++	}
++
++.fc-agenda-slots tr.fc-minor th,
++.fc-agenda-slots tr.fc-minor td {
++	border-top-style: dotted;
++	}
++	
++.fc-agenda-slots tr.fc-minor th.ui-widget-header {
++	*border-top-style: solid; /* doesn't work with background in IE6/7 */
++	}
++	
++
++
++/* Vertical Events
++------------------------------------------------------------------------*/
++
++.fc-event-vert {
++	border-width: 0 1px;
++	}
++
++.fc-event-vert.fc-event-start {
++	border-top-width: 1px;
++	border-top-left-radius: 3px;
++	border-top-right-radius: 3px;
++	}
++
++.fc-event-vert.fc-event-end {
++	border-bottom-width: 1px;
++	border-bottom-left-radius: 3px;
++	border-bottom-right-radius: 3px;
++	}
++	
++.fc-event-vert .fc-event-time {
++	white-space: nowrap;
++	font-size: 10px;
++	}
++
++.fc-event-vert .fc-event-inner {
++	position: relative;
++	z-index: 2;
++	}
++	
++.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay  */
++	position: absolute;
++	z-index: 1;
++	top: 0;
++	left: 0;
++	width: 100%;
++	height: 100%;
++	background: #fff;
++	opacity: .25;
++	filter: alpha(opacity=25);
++	}
++	
++.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
++.fc-select-helper .fc-event-bg {
++	display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
++	}
++	
++/* resizable */
++	
++.fc-event-vert .ui-resizable-s {
++	bottom: 0        !important; /* importants override pre jquery ui 1.7 styles */
++	width: 100%      !important;
++	height: 8px      !important;
++	overflow: hidden !important;
++	line-height: 8px !important;
++	font-size: 11px  !important;
++	font-family: monospace;
++	text-align: center;
++	cursor: s-resize;
++	}
++	
++.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
++	_overflow: hidden;
++	}
++	
++	
diff --cc apps/calendar/3rdparty/fullcalendar/css/fullcalendar.print.css
index 0000000,0000000..8fea38d
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/css/fullcalendar.print.css
@@@ -1,0 -1,0 +1,32 @@@
++/*!
++ * FullCalendar v1.6.1 Print Stylesheet
++ * Docs & License: http://arshaw.com/fullcalendar/
++ * (c) 2013 Adam Shaw
++ */
++
++/*
++ * Include this stylesheet on your page to get a more printer-friendly calendar.
++ * When including this stylesheet, use the media='print' attribute of the <link> tag.
++ * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
++ */
++ 
++ 
++ /* Events
++-----------------------------------------------------*/
++ 
++.fc-event {
++	background: #fff !important;
++	color: #000 !important;
++	}
++	
++/* for vertical events */
++	
++.fc-event-bg {
++	display: none !important;
++	}
++	
++.fc-event .ui-resizable-handle {
++	display: none !important;
++	}
++	
++	
diff --cc apps/calendar/3rdparty/fullcalendar/js/fullcalendar.js
index 0000000,0000000..0d43e58
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/js/fullcalendar.js
@@@ -1,0 -1,0 +1,5378 @@@
++/*!
++ * FullCalendar v1.6.1
++ * Docs & License: http://arshaw.com/fullcalendar/
++ * (c) 2013 Adam Shaw
++ */
++
++/*
++ * Use fullcalendar.css for basic styling.
++ * For event drag & drop, requires jQuery UI draggable.
++ * For event resizing, requires jQuery UI resizable.
++ */
++ 
++(function($, undefined) {
++
++
++;;
++
++var defaults = {
++
++	// display
++	defaultView: 'month',
++	aspectRatio: 1.35,
++	header: {
++		left: 'title',
++		center: '',
++		right: 'today prev,next'
++	},
++	weekends: true,
++	weekNumbers: false,
++	weekNumberCalculation: 'iso',
++	weekNumberTitle: 'W',
++	
++	// editing
++	//editable: false,
++	//disableDragging: false,
++	//disableResizing: false,
++	
++	allDayDefault: true,
++	ignoreTimezone: true,
++	
++	// event ajax
++	lazyFetching: true,
++	startParam: 'start',
++	endParam: 'end',
++	
++	// time formats
++	titleFormat: {
++		month: 'MMMM yyyy',
++		week: "MMM d[ yyyy]{ '—'[ MMM] d yyyy}",
++		day: 'dddd, MMM d, yyyy'
++	},
++	columnFormat: {
++		month: 'ddd',
++		week: 'ddd M/d',
++		day: 'dddd M/d'
++	},
++	timeFormat: { // for event elements
++		'': 'h(:mm)t' // default
++	},
++	
++	// locale
++	isRTL: false,
++	firstDay: 0,
++	monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'],
++	monthNamesShort: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
++	dayNames: ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
++	dayNamesShort: ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],
++	buttonText: {
++		prev: "<span class='fc-text-arrow'>‹</span>",
++		next: "<span class='fc-text-arrow'>›</span>",
++		prevYear: "<span class='fc-text-arrow'>«</span>",
++		nextYear: "<span class='fc-text-arrow'>»</span>",
++		today: 'today',
++		month: 'month',
++		week: 'week',
++		day: 'day'
++	},
++	
++	// jquery-ui theming
++	theme: false,
++	buttonIcons: {
++		prev: 'circle-triangle-w',
++		next: 'circle-triangle-e'
++	},
++	
++	//selectable: false,
++	unselectAuto: true,
++	
++	dropAccept: '*'
++	
++};
++
++// right-to-left defaults
++var rtlDefaults = {
++	header: {
++		left: 'next,prev today',
++		center: '',
++		right: 'title'
++	},
++	buttonText: {
++		prev: "<span class='fc-text-arrow'>›</span>",
++		next: "<span class='fc-text-arrow'>‹</span>",
++		prevYear: "<span class='fc-text-arrow'>»</span>",
++		nextYear: "<span class='fc-text-arrow'>«</span>"
++	},
++	buttonIcons: {
++		prev: 'circle-triangle-e',
++		next: 'circle-triangle-w'
++	}
++};
++
++
++
++;;
++
++var fc = $.fullCalendar = { version: "1.6.1" };
++var fcViews = fc.views = {};
++
++
++$.fn.fullCalendar = function(options) {
++
++
++	// method calling
++	if (typeof options == 'string') {
++		var args = Array.prototype.slice.call(arguments, 1);
++		var res;
++		this.each(function() {
++			var calendar = $.data(this, 'fullCalendar');
++			if (calendar && $.isFunction(calendar[options])) {
++				var r = calendar[options].apply(calendar, args);
++				if (res === undefined) {
++					res = r;
++				}
++				if (options == 'destroy') {
++					$.removeData(this, 'fullCalendar');
++				}
++			}
++		});
++		if (res !== undefined) {
++			return res;
++		}
++		return this;
++	}
++	
++	
++	// would like to have this logic in EventManager, but needs to happen before options are recursively extended
++	var eventSources = options.eventSources || [];
++	delete options.eventSources;
++	if (options.events) {
++		eventSources.push(options.events);
++		delete options.events;
++	}
++	
++
++	options = $.extend(true, {},
++		defaults,
++		(options.isRTL || options.isRTL===undefined && defaults.isRTL) ? rtlDefaults : {},
++		options
++	);
++	
++	
++	this.each(function(i, _element) {
++		var element = $(_element);
++		var calendar = new Calendar(element, options, eventSources);
++		element.data('fullCalendar', calendar); // TODO: look into memory leak implications
++		calendar.render();
++	});
++	
++	
++	return this;
++	
++};
++
++
++// function for adding/overriding defaults
++function setDefaults(d) {
++	$.extend(true, defaults, d);
++}
++
++
++
++;;
++
++ 
++function Calendar(element, options, eventSources) {
++	var t = this;
++	
++	
++	// exports
++	t.options = options;
++	t.render = render;
++	t.destroy = destroy;
++	t.refetchEvents = refetchEvents;
++	t.reportEvents = reportEvents;
++	t.reportEventChange = reportEventChange;
++	t.rerenderEvents = rerenderEvents;
++	t.changeView = changeView;
++	t.select = select;
++	t.unselect = unselect;
++	t.prev = prev;
++	t.next = next;
++	t.prevYear = prevYear;
++	t.nextYear = nextYear;
++	t.today = today;
++	t.gotoDate = gotoDate;
++	t.incrementDate = incrementDate;
++	t.formatDate = function(format, date) { return formatDate(format, date, options) };
++	t.formatDates = function(format, date1, date2) { return formatDates(format, date1, date2, options) };
++	t.getDate = getDate;
++	t.getView = getView;
++	t.option = option;
++	t.trigger = trigger;
++	
++	
++	// imports
++	EventManager.call(t, options, eventSources);
++	var isFetchNeeded = t.isFetchNeeded;
++	var fetchEvents = t.fetchEvents;
++	
++	
++	// locals
++	var _element = element[0];
++	var header;
++	var headerElement;
++	var content;
++	var tm; // for making theme classes
++	var currentView;
++	var viewInstances = {};
++	var elementOuterWidth;
++	var suggestedViewHeight;
++	var absoluteViewElement;
++	var resizeUID = 0;
++	var ignoreWindowResize = 0;
++	var date = new Date();
++	var events = [];
++	var _dragElement;
++	
++	
++	
++	/* Main Rendering
++	-----------------------------------------------------------------------------*/
++	
++	
++	setYMD(date, options.year, options.month, options.date);
++	
++	
++	function render(inc) {
++		if (!content) {
++			initialRender();
++		}else{
++			calcSize();
++			markSizesDirty();
++			markEventsDirty();
++			renderView(inc);
++		}
++	}
++	
++	
++	function initialRender() {
++		tm = options.theme ? 'ui' : 'fc';
++		element.addClass('fc');
++		if (options.isRTL) {
++			element.addClass('fc-rtl');
++		}
++		else {
++			element.addClass('fc-ltr');
++		}
++		if (options.theme) {
++			element.addClass('ui-widget');
++		}
++		content = $("<div class='fc-content' style='position:relative'/>")
++			.prependTo(element);
++		header = new Header(t, options);
++		headerElement = header.render();
++		if (headerElement) {
++			element.prepend(headerElement);
++		}
++		changeView(options.defaultView);
++		$(window).resize(windowResize);
++		// needed for IE in a 0x0 iframe, b/c when it is resized, never triggers a windowResize
++		if (!bodyVisible()) {
++			lateRender();
++		}
++	}
++	
++	
++	// called when we know the calendar couldn't be rendered when it was initialized,
++	// but we think it's ready now
++	function lateRender() {
++		setTimeout(function() { // IE7 needs this so dimensions are calculated correctly
++			if (!currentView.start && bodyVisible()) { // !currentView.start makes sure this never happens more than once
++				renderView();
++			}
++		},0);
++	}
++	
++	
++	function destroy() {
++		$(window).unbind('resize', windowResize);
++		header.destroy();
++		content.remove();
++		element.removeClass('fc fc-rtl ui-widget');
++	}
++	
++	
++	
++	function elementVisible() {
++		return _element.offsetWidth !== 0;
++	}
++	
++	
++	function bodyVisible() {
++		return $('body')[0].offsetWidth !== 0;
++	}
++	
++	
++	
++	/* View Rendering
++	-----------------------------------------------------------------------------*/
++	
++	// TODO: improve view switching (still weird transition in IE, and FF has whiteout problem)
++	
++	function changeView(newViewName) {
++		if (!currentView || newViewName != currentView.name) {
++			ignoreWindowResize++; // because setMinHeight might change the height before render (and subsequently setSize) is reached
++
++			unselect();
++			
++			var oldView = currentView;
++			var newViewElement;
++				
++			if (oldView) {
++				(oldView.beforeHide || noop)(); // called before changing min-height. if called after, scroll state is reset (in Opera)
++				setMinHeight(content, content.height());
++				oldView.element.hide();
++			}else{
++				setMinHeight(content, 1); // needs to be 1 (not 0) for IE7, or else view dimensions miscalculated
++			}
++			content.css('overflow', 'hidden');
++			
++			currentView = viewInstances[newViewName];
++			if (currentView) {
++				currentView.element.show();
++			}else{
++				currentView = viewInstances[newViewName] = new fcViews[newViewName](
++					newViewElement = absoluteViewElement =
++						$("<div class='fc-view fc-view-" + newViewName + "' style='position:absolute'/>")
++							.appendTo(content),
++					t // the calendar object
++				);
++			}
++			
++			if (oldView) {
++				header.deactivateButton(oldView.name);
++			}
++			header.activateButton(newViewName);
++			
++			renderView(); // after height has been set, will make absoluteViewElement's position=relative, then set to null
++			
++			content.css('overflow', '');
++			if (oldView) {
++				setMinHeight(content, 1);
++			}
++			
++			if (!newViewElement) {
++				(currentView.afterShow || noop)(); // called after setting min-height/overflow, so in final scroll state (for Opera)
++			}
++			
++			ignoreWindowResize--;
++		}
++	}
++	
++	
++	
++	function renderView(inc) {
++		if (elementVisible()) {
++			ignoreWindowResize++; // because renderEvents might temporarily change the height before setSize is reached
++
++			unselect();
++			
++			if (suggestedViewHeight === undefined) {
++				calcSize();
++			}
++			
++			var forceEventRender = false;
++			if (!currentView.start || inc || date < currentView.start || date >= currentView.end) {
++				// view must render an entire new date range (and refetch/render events)
++				currentView.render(date, inc || 0); // responsible for clearing events
++				setSize(true);
++				forceEventRender = true;
++			}
++			else if (currentView.sizeDirty) {
++				// view must resize (and rerender events)
++				currentView.clearEvents();
++				setSize();
++				forceEventRender = true;
++			}
++			else if (currentView.eventsDirty) {
++				currentView.clearEvents();
++				forceEventRender = true;
++			}
++			currentView.sizeDirty = false;
++			currentView.eventsDirty = false;
++			updateEvents(forceEventRender);
++			
++			elementOuterWidth = element.outerWidth();
++			
++			header.updateTitle(currentView.title);
++			var today = new Date();
++			if (today >= currentView.start && today < currentView.end) {
++				header.disableButton('today');
++			}else{
++				header.enableButton('today');
++			}
++			
++			ignoreWindowResize--;
++			currentView.trigger('viewDisplay', _element);
++		}
++	}
++	
++	
++	
++	/* Resizing
++	-----------------------------------------------------------------------------*/
++	
++	
++	function updateSize() {
++		markSizesDirty();
++		if (elementVisible()) {
++			calcSize();
++			setSize();
++			unselect();
++			currentView.clearEvents();
++			currentView.renderEvents(events);
++			currentView.sizeDirty = false;
++		}
++	}
++	
++	
++	function markSizesDirty() {
++		$.each(viewInstances, function(i, inst) {
++			inst.sizeDirty = true;
++		});
++	}
++	
++	
++	function calcSize() {
++		if (options.contentHeight) {
++			suggestedViewHeight = options.contentHeight;
++		}
++		else if (options.height) {
++			suggestedViewHeight = options.height - (headerElement ? headerElement.height() : 0) - vsides(content);
++		}
++		else {
++			suggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5));
++		}
++	}
++	
++	
++	function setSize(dateChanged) { // todo: dateChanged?
++		ignoreWindowResize++;
++		currentView.setHeight(suggestedViewHeight, dateChanged);
++		if (absoluteViewElement) {
++			absoluteViewElement.css('position', 'relative');
++			absoluteViewElement = null;
++		}
++		currentView.setWidth(content.width(), dateChanged);
++		ignoreWindowResize--;
++	}
++	
++	
++	function windowResize() {
++		if (!ignoreWindowResize) {
++			if (currentView.start) { // view has already been rendered
++				var uid = ++resizeUID;
++				setTimeout(function() { // add a delay
++					if (uid == resizeUID && !ignoreWindowResize && elementVisible()) {
++						if (elementOuterWidth != (elementOuterWidth = element.outerWidth())) {
++							ignoreWindowResize++; // in case the windowResize callback changes the height
++							updateSize();
++							currentView.trigger('windowResize', _element);
++							ignoreWindowResize--;
++						}
++					}
++				}, 200);
++			}else{
++				// calendar must have been initialized in a 0x0 iframe that has just been resized
++				lateRender();
++			}
++		}
++	}
++	
++	
++	
++	/* Event Fetching/Rendering
++	-----------------------------------------------------------------------------*/
++	
++	
++	// fetches events if necessary, rerenders events if necessary (or if forced)
++	function updateEvents(forceRender) {
++		if (!options.lazyFetching || isFetchNeeded(currentView.visStart, currentView.visEnd)) {
++			refetchEvents();
++		}
++		else if (forceRender) {
++			rerenderEvents();
++		}
++	}
++	
++	
++	function refetchEvents() {
++		fetchEvents(currentView.visStart, currentView.visEnd); // will call reportEvents
++	}
++	
++	
++	// called when event data arrives
++	function reportEvents(_events) {
++		events = _events;
++		rerenderEvents();
++	}
++	
++	
++	// called when a single event's data has been changed
++	function reportEventChange(eventID) {
++		rerenderEvents(eventID);
++	}
++	
++	
++	// attempts to rerenderEvents
++	function rerenderEvents(modifiedEventID) {
++		markEventsDirty();
++		if (elementVisible()) {
++			currentView.clearEvents();
++			currentView.renderEvents(events, modifiedEventID);
++			currentView.eventsDirty = false;
++		}
++	}
++	
++	
++	function markEventsDirty() {
++		$.each(viewInstances, function(i, inst) {
++			inst.eventsDirty = true;
++		});
++	}
++	
++
++
++	/* Selection
++	-----------------------------------------------------------------------------*/
++	
++
++	function select(start, end, allDay) {
++		currentView.select(start, end, allDay===undefined ? true : allDay);
++	}
++	
++
++	function unselect() { // safe to be called before renderView
++		if (currentView) {
++			currentView.unselect();
++		}
++	}
++	
++	
++	
++	/* Date
++	-----------------------------------------------------------------------------*/
++	
++	
++	function prev() {
++		renderView(-1);
++	}
++	
++	
++	function next() {
++		renderView(1);
++	}
++	
++	
++	function prevYear() {
++		addYears(date, -1);
++		renderView();
++	}
++	
++	
++	function nextYear() {
++		addYears(date, 1);
++		renderView();
++	}
++	
++	
++	function today() {
++		date = new Date();
++		renderView();
++	}
++	
++	
++	function gotoDate(year, month, dateOfMonth) {
++		if (year instanceof Date) {
++			date = cloneDate(year); // provided 1 argument, a Date
++		}else{
++			setYMD(date, year, month, dateOfMonth);
++		}
++		renderView();
++	}
++	
++	
++	function incrementDate(years, months, days) {
++		if (years !== undefined) {
++			addYears(date, years);
++		}
++		if (months !== undefined) {
++			addMonths(date, months);
++		}
++		if (days !== undefined) {
++			addDays(date, days);
++		}
++		renderView();
++	}
++	
++	
++	function getDate() {
++		return cloneDate(date);
++	}
++	
++	
++	
++	/* Misc
++	-----------------------------------------------------------------------------*/
++	
++	
++	function getView() {
++		return currentView;
++	}
++	
++	
++	function option(name, value) {
++		if (value === undefined) {
++			return options[name];
++		}
++		if (name == 'height' || name == 'contentHeight' || name == 'aspectRatio') {
++			options[name] = value;
++			updateSize();
++		}
++	}
++	
++	
++	function trigger(name, thisObj) {
++		if (options[name]) {
++			return options[name].apply(
++				thisObj || _element,
++				Array.prototype.slice.call(arguments, 2)
++			);
++		}
++	}
++	
++	
++	
++	/* External Dragging
++	------------------------------------------------------------------------*/
++	
++	if (options.droppable) {
++		$(document)
++			.bind('dragstart', function(ev, ui) {
++				var _e = ev.target;
++				var e = $(_e);
++				if (!e.parents('.fc').length) { // not already inside a calendar
++					var accept = options.dropAccept;
++					if ($.isFunction(accept) ? accept.call(_e, e) : e.is(accept)) {
++						_dragElement = _e;
++						currentView.dragStart(_dragElement, ev, ui);
++					}
++				}
++			})
++			.bind('dragstop', function(ev, ui) {
++				if (_dragElement) {
++					currentView.dragStop(_dragElement, ev, ui);
++					_dragElement = null;
++				}
++			});
++	}
++	
++
++}
++
++;;
++
++function Header(calendar, options) {
++	var t = this;
++	
++	
++	// exports
++	t.render = render;
++	t.destroy = destroy;
++	t.updateTitle = updateTitle;
++	t.activateButton = activateButton;
++	t.deactivateButton = deactivateButton;
++	t.disableButton = disableButton;
++	t.enableButton = enableButton;
++	
++	
++	// locals
++	var element = $([]);
++	var tm;
++	
++
++
++	function render() {
++		tm = options.theme ? 'ui' : 'fc';
++		var sections = options.header;
++		if (sections) {
++			element = $("<table class='fc-header' style='width:100%'/>")
++				.append(
++					$("<tr/>")
++						.append(renderSection('left'))
++						.append(renderSection('center'))
++						.append(renderSection('right'))
++				);
++			return element;
++		}
++	}
++	
++	
++	function destroy() {
++		element.remove();
++	}
++	
++	
++	function renderSection(position) {
++		var e = $("<td class='fc-header-" + position + "'/>");
++		var buttonStr = options.header[position];
++		if (buttonStr) {
++			$.each(buttonStr.split(' '), function(i) {
++				if (i > 0) {
++					e.append("<span class='fc-header-space'/>");
++				}
++				var prevButton;
++				$.each(this.split(','), function(j, buttonName) {
++					if (buttonName == 'title') {
++						e.append("<span class='fc-header-title'><h2> </h2></span>");
++						if (prevButton) {
++							prevButton.addClass(tm + '-corner-right');
++						}
++						prevButton = null;
++					}else{
++						var buttonClick;
++						if (calendar[buttonName]) {
++							buttonClick = calendar[buttonName]; // calendar method
++						}
++						else if (fcViews[buttonName]) {
++							buttonClick = function() {
++								button.removeClass(tm + '-state-hover'); // forget why
++								calendar.changeView(buttonName);
++							};
++						}
++						if (buttonClick) {
++							var icon = options.theme ? smartProperty(options.buttonIcons, buttonName) : null; // why are we using smartProperty here?
++							var text = smartProperty(options.buttonText, buttonName); // why are we using smartProperty here?
++							var button = $(
++								"<span class='fc-button fc-button-" + buttonName + " " + tm + "-state-default'>" +
++									(icon ?
++										"<span class='fc-icon-wrap'>" +
++											"<span class='ui-icon ui-icon-" + icon + "'/>" +
++										"</span>" :
++										text
++										) +
++								"</span>"
++								)
++								.click(function() {
++									if (!button.hasClass(tm + '-state-disabled')) {
++										buttonClick();
++									}
++								})
++								.mousedown(function() {
++									button
++										.not('.' + tm + '-state-active')
++										.not('.' + tm + '-state-disabled')
++										.addClass(tm + '-state-down');
++								})
++								.mouseup(function() {
++									button.removeClass(tm + '-state-down');
++								})
++								.hover(
++									function() {
++										button
++											.not('.' + tm + '-state-active')
++											.not('.' + tm + '-state-disabled')
++											.addClass(tm + '-state-hover');
++									},
++									function() {
++										button
++											.removeClass(tm + '-state-hover')
++											.removeClass(tm + '-state-down');
++									}
++								)
++								.appendTo(e);
++							disableTextSelection(button);
++							if (!prevButton) {
++								button.addClass(tm + '-corner-left');
++							}
++							prevButton = button;
++						}
++					}
++				});
++				if (prevButton) {
++					prevButton.addClass(tm + '-corner-right');
++				}
++			});
++		}
++		return e;
++	}
++	
++	
++	function updateTitle(html) {
++		element.find('h2')
++			.html(html);
++	}
++	
++	
++	function activateButton(buttonName) {
++		element.find('span.fc-button-' + buttonName)
++			.addClass(tm + '-state-active');
++	}
++	
++	
++	function deactivateButton(buttonName) {
++		element.find('span.fc-button-' + buttonName)
++			.removeClass(tm + '-state-active');
++	}
++	
++	
++	function disableButton(buttonName) {
++		element.find('span.fc-button-' + buttonName)
++			.addClass(tm + '-state-disabled');
++	}
++	
++	
++	function enableButton(buttonName) {
++		element.find('span.fc-button-' + buttonName)
++			.removeClass(tm + '-state-disabled');
++	}
++
++
++}
++
++;;
++
++fc.sourceNormalizers = [];
++fc.sourceFetchers = [];
++
++var ajaxDefaults = {
++	dataType: 'json',
++	cache: false
++};
++
++var eventGUID = 1;
++
++
++function EventManager(options, _sources) {
++	var t = this;
++	
++	
++	// exports
++	t.isFetchNeeded = isFetchNeeded;
++	t.fetchEvents = fetchEvents;
++	t.addEventSource = addEventSource;
++	t.removeEventSource = removeEventSource;
++	t.updateEvent = updateEvent;
++	t.renderEvent = renderEvent;
++	t.removeEvents = removeEvents;
++	t.clientEvents = clientEvents;
++	t.normalizeEvent = normalizeEvent;
++	
++	
++	// imports
++	var trigger = t.trigger;
++	var getView = t.getView;
++	var reportEvents = t.reportEvents;
++	
++	
++	// locals
++	var stickySource = { events: [] };
++	var sources = [ stickySource ];
++	var rangeStart, rangeEnd;
++	var currentFetchID = 0;
++	var pendingSourceCnt = 0;
++	var loadingLevel = 0;
++	var cache = [];
++	
++	
++	for (var i=0; i<_sources.length; i++) {
++		_addEventSource(_sources[i]);
++	}
++	
++	
++	
++	/* Fetching
++	-----------------------------------------------------------------------------*/
++	
++	
++	function isFetchNeeded(start, end) {
++		return !rangeStart || start < rangeStart || end > rangeEnd;
++	}
++	
++	
++	function fetchEvents(start, end) {
++		rangeStart = start;
++		rangeEnd = end;
++		cache = [];
++		var fetchID = ++currentFetchID;
++		var len = sources.length;
++		pendingSourceCnt = len;
++		for (var i=0; i<len; i++) {
++			fetchEventSource(sources[i], fetchID);
++		}
++	}
++	
++	
++	function fetchEventSource(source, fetchID) {
++		_fetchEventSource(source, function(events) {
++			if (fetchID == currentFetchID) {
++				if (events) {
++
++					if (options.eventDataTransform) {
++						events = $.map(events, options.eventDataTransform);
++					}
++					if (source.eventDataTransform) {
++						events = $.map(events, source.eventDataTransform);
++					}
++					// TODO: this technique is not ideal for static array event sources.
++					//  For arrays, we'll want to process all events right in the beginning, then never again.
++				
++					for (var i=0; i<events.length; i++) {
++						events[i].source = source;
++						normalizeEvent(events[i]);
++					}
++					cache = cache.concat(events);
++				}
++				pendingSourceCnt--;
++				if (!pendingSourceCnt) {
++					reportEvents(cache);
++				}
++			}
++		});
++	}
++	
++	
++	function _fetchEventSource(source, callback) {
++		var i;
++		var fetchers = fc.sourceFetchers;
++		var res;
++		for (i=0; i<fetchers.length; i++) {
++			res = fetchers[i](source, rangeStart, rangeEnd, callback);
++			if (res === true) {
++				// the fetcher is in charge. made its own async request
++				return;
++			}
++			else if (typeof res == 'object') {
++				// the fetcher returned a new source. process it
++				_fetchEventSource(res, callback);
++				return;
++			}
++		}
++		var events = source.events;
++		if (events) {
++			if ($.isFunction(events)) {
++				pushLoading();
++				events(cloneDate(rangeStart), cloneDate(rangeEnd), function(events) {
++					callback(events);
++					popLoading();
++				});
++			}
++			else if ($.isArray(events)) {
++				callback(events);
++			}
++			else {
++				callback();
++			}
++		}else{
++			var url = source.url;
++			if (url) {
++				var success = source.success;
++				var error = source.error;
++				var complete = source.complete;
++				var data = $.extend({}, source.data || {});
++				var startParam = firstDefined(source.startParam, options.startParam);
++				var endParam = firstDefined(source.endParam, options.endParam);
++				if (startParam) {
++					data[startParam] = Math.round(+rangeStart / 1000);
++				}
++				if (endParam) {
++					data[endParam] = Math.round(+rangeEnd / 1000);
++				}
++				pushLoading();
++				$.ajax($.extend({}, ajaxDefaults, source, {
++					data: data,
++					success: function(events) {
++						events = events || [];
++						var res = applyAll(success, this, arguments);
++						if ($.isArray(res)) {
++							events = res;
++						}
++						callback(events);
++					},
++					error: function() {
++						applyAll(error, this, arguments);
++						callback();
++					},
++					complete: function() {
++						applyAll(complete, this, arguments);
++						popLoading();
++					}
++				}));
++			}else{
++				callback();
++			}
++		}
++	}
++	
++	
++	
++	/* Sources
++	-----------------------------------------------------------------------------*/
++	
++
++	function addEventSource(source) {
++		source = _addEventSource(source);
++		if (source) {
++			pendingSourceCnt++;
++			fetchEventSource(source, currentFetchID); // will eventually call reportEvents
++		}
++	}
++	
++	
++	function _addEventSource(source) {
++		if ($.isFunction(source) || $.isArray(source)) {
++			source = { events: source };
++		}
++		else if (typeof source == 'string') {
++			source = { url: source };
++		}
++		if (typeof source == 'object') {
++			normalizeSource(source);
++			sources.push(source);
++			return source;
++		}
++	}
++	
++
++	function removeEventSource(source) {
++		sources = $.grep(sources, function(src) {
++			return !isSourcesEqual(src, source);
++		});
++		// remove all client events from that source
++		cache = $.grep(cache, function(e) {
++			return !isSourcesEqual(e.source, source);
++		});
++		reportEvents(cache);
++	}
++	
++	
++	
++	/* Manipulation
++	-----------------------------------------------------------------------------*/
++	
++	
++	function updateEvent(event) { // update an existing event
++		var i, len = cache.length, e,
++			defaultEventEnd = getView().defaultEventEnd, // getView???
++			startDelta = event.start - event._start,
++			endDelta = event.end ?
++				(event.end - (event._end || defaultEventEnd(event))) // event._end would be null if event.end
++				: 0;                                                      // was null and event was just resized
++		for (i=0; i<len; i++) {
++			e = cache[i];
++			if (e._id == event._id && e != event) {
++				e.start = new Date(+e.start + startDelta);
++				if (event.end) {
++					if (e.end) {
++						e.end = new Date(+e.end + endDelta);
++					}else{
++						e.end = new Date(+defaultEventEnd(e) + endDelta);
++					}
++				}else{
++					e.end = null;
++				}
++				e.title = event.title;
++				e.url = event.url;
++				e.allDay = event.allDay;
++				e.className = event.className;
++				e.editable = event.editable;
++				e.color = event.color;
++				e.backgroudColor = event.backgroudColor;
++				e.borderColor = event.borderColor;
++				e.textColor = event.textColor;
++				normalizeEvent(e);
++			}
++		}
++		normalizeEvent(event);
++		reportEvents(cache);
++	}
++	
++	
++	function renderEvent(event, stick) {
++		normalizeEvent(event);
++		if (!event.source) {
++			if (stick) {
++				stickySource.events.push(event);
++				event.source = stickySource;
++			}
++			cache.push(event);
++		}
++		reportEvents(cache);
++	}
++	
++	
++	function removeEvents(filter) {
++		if (!filter) { // remove all
++			cache = [];
++			// clear all array sources
++			for (var i=0; i<sources.length; i++) {
++				if ($.isArray(sources[i].events)) {
++					sources[i].events = [];
++				}
++			}
++		}else{
++			if (!$.isFunction(filter)) { // an event ID
++				var id = filter + '';
++				filter = function(e) {
++					return e._id == id;
++				};
++			}
++			cache = $.grep(cache, filter, true);
++			// remove events from array sources
++			for (var i=0; i<sources.length; i++) {
++				if ($.isArray(sources[i].events)) {
++					sources[i].events = $.grep(sources[i].events, filter, true);
++				}
++			}
++		}
++		reportEvents(cache);
++	}
++	
++	
++	function clientEvents(filter) {
++		if ($.isFunction(filter)) {
++			return $.grep(cache, filter);
++		}
++		else if (filter) { // an event ID
++			filter += '';
++			return $.grep(cache, function(e) {
++				return e._id == filter;
++			});
++		}
++		return cache; // else, return all
++	}
++	
++	
++	
++	/* Loading State
++	-----------------------------------------------------------------------------*/
++	
++	
++	function pushLoading() {
++		if (!loadingLevel++) {
++			trigger('loading', null, true);
++		}
++	}
++	
++	
++	function popLoading() {
++		if (!--loadingLevel) {
++			trigger('loading', null, false);
++		}
++	}
++	
++	
++	
++	/* Event Normalization
++	-----------------------------------------------------------------------------*/
++	
++	
++	function normalizeEvent(event) {
++		var source = event.source || {};
++		var ignoreTimezone = firstDefined(source.ignoreTimezone, options.ignoreTimezone);
++		event._id = event._id || (event.id === undefined ? '_fc' + eventGUID++ : event.id + '');
++		if (event.date) {
++			if (!event.start) {
++				event.start = event.date;
++			}
++			delete event.date;
++		}
++		event._start = cloneDate(event.start = parseDate(event.start, ignoreTimezone));
++		event.end = parseDate(event.end, ignoreTimezone);
++		if (event.end && event.end <= event.start) {
++			event.end = null;
++		}
++		event._end = event.end ? cloneDate(event.end) : null;
++		if (event.allDay === undefined) {
++			event.allDay = firstDefined(source.allDayDefault, options.allDayDefault);
++		}
++		if (event.className) {
++			if (typeof event.className == 'string') {
++				event.className = event.className.split(/\s+/);
++			}
++		}else{
++			event.className = [];
++		}
++		// TODO: if there is no start date, return false to indicate an invalid event
++	}
++	
++	
++	
++	/* Utils
++	------------------------------------------------------------------------------*/
++	
++	
++	function normalizeSource(source) {
++		if (source.className) {
++			// TODO: repeat code, same code for event classNames
++			if (typeof source.className == 'string') {
++				source.className = source.className.split(/\s+/);
++			}
++		}else{
++			source.className = [];
++		}
++		var normalizers = fc.sourceNormalizers;
++		for (var i=0; i<normalizers.length; i++) {
++			normalizers[i](source);
++		}
++	}
++	
++	
++	function isSourcesEqual(source1, source2) {
++		return source1 && source2 && getSourcePrimitive(source1) == getSourcePrimitive(source2);
++	}
++	
++	
++	function getSourcePrimitive(source) {
++		return ((typeof source == 'object') ? (source.events || source.url) : '') || source;
++	}
++
++
++}
++
++;;
++
++
++fc.addDays = addDays;
++fc.cloneDate = cloneDate;
++fc.parseDate = parseDate;
++fc.parseISO8601 = parseISO8601;
++fc.parseTime = parseTime;
++fc.formatDate = formatDate;
++fc.formatDates = formatDates;
++
++
++
++/* Date Math
++-----------------------------------------------------------------------------*/
++
++var dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
++	DAY_MS = 86400000,
++	HOUR_MS = 3600000,
++	MINUTE_MS = 60000;
++	
++
++function addYears(d, n, keepTime) {
++	d.setFullYear(d.getFullYear() + n);
++	if (!keepTime) {
++		clearTime(d);
++	}
++	return d;
++}
++
++
++function addMonths(d, n, keepTime) { // prevents day overflow/underflow
++	if (+d) { // prevent infinite looping on invalid dates
++		var m = d.getMonth() + n,
++			check = cloneDate(d);
++		check.setDate(1);
++		check.setMonth(m);
++		d.setMonth(m);
++		if (!keepTime) {
++			clearTime(d);
++		}
++		while (d.getMonth() != check.getMonth()) {
++			d.setDate(d.getDate() + (d < check ? 1 : -1));
++		}
++	}
++	return d;
++}
++
++
++function addDays(d, n, keepTime) { // deals with daylight savings
++	if (+d) {
++		var dd = d.getDate() + n,
++			check = cloneDate(d);
++		check.setHours(9); // set to middle of day
++		check.setDate(dd);
++		d.setDate(dd);
++		if (!keepTime) {
++			clearTime(d);
++		}
++		fixDate(d, check);
++	}
++	return d;
++}
++
++
++function fixDate(d, check) { // force d to be on check's YMD, for daylight savings purposes
++	if (+d) { // prevent infinite looping on invalid dates
++		while (d.getDate() != check.getDate()) {
++			d.setTime(+d + (d < check ? 1 : -1) * HOUR_MS);
++		}
++	}
++}
++
++
++function addMinutes(d, n) {
++	d.setMinutes(d.getMinutes() + n);
++	return d;
++}
++
++
++function clearTime(d) {
++	d.setHours(0);
++	d.setMinutes(0);
++	d.setSeconds(0); 
++	d.setMilliseconds(0);
++	return d;
++}
++
++
++function cloneDate(d, dontKeepTime) {
++	if (dontKeepTime) {
++		return clearTime(new Date(+d));
++	}
++	return new Date(+d);
++}
++
++
++function zeroDate() { // returns a Date with time 00:00:00 and dateOfMonth=1
++	var i=0, d;
++	do {
++		d = new Date(1970, i++, 1);
++	} while (d.getHours()); // != 0
++	return d;
++}
++
++
++function skipWeekend(date, inc, excl) {
++	inc = inc || 1;
++	while (!date.getDay() || (excl && date.getDay()==1 || !excl && date.getDay()==6)) {
++		addDays(date, inc);
++	}
++	return date;
++}
++
++
++function dayDiff(d1, d2) { // d1 - d2
++	return Math.round((cloneDate(d1, true) - cloneDate(d2, true)) / DAY_MS);
++}
++
++
++function setYMD(date, y, m, d) {
++	if (y !== undefined && y != date.getFullYear()) {
++		date.setDate(1);
++		date.setMonth(0);
++		date.setFullYear(y);
++	}
++	if (m !== undefined && m != date.getMonth()) {
++		date.setDate(1);
++		date.setMonth(m);
++	}
++	if (d !== undefined) {
++		date.setDate(d);
++	}
++}
++
++
++
++/* Date Parsing
++-----------------------------------------------------------------------------*/
++
++
++function parseDate(s, ignoreTimezone) { // ignoreTimezone defaults to true
++	if (typeof s == 'object') { // already a Date object
++		return s;
++	}
++	if (typeof s == 'number') { // a UNIX timestamp
++		return new Date(s * 1000);
++	}
++	if (typeof s == 'string') {
++		if (s.match(/^\d+(\.\d+)?$/)) { // a UNIX timestamp
++			return new Date(parseFloat(s) * 1000);
++		}
++		if (ignoreTimezone === undefined) {
++			ignoreTimezone = true;
++		}
++		return parseISO8601(s, ignoreTimezone) || (s ? new Date(s) : null);
++	}
++	// TODO: never return invalid dates (like from new Date(<string>)), return null instead
++	return null;
++}
++
++
++function parseISO8601(s, ignoreTimezone) { // ignoreTimezone defaults to false
++	// derived from http://delete.me.uk/2005/03/iso8601.html
++	// TODO: for a know glitch/feature, read tests/issue_206_parseDate_dst.html
++	var m = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);
++	if (!m) {
++		return null;
++	}
++	var date = new Date(m[1], 0, 1);
++	if (ignoreTimezone || !m[13]) {
++		var check = new Date(m[1], 0, 1, 9, 0);
++		if (m[3]) {
++			date.setMonth(m[3] - 1);
++			check.setMonth(m[3] - 1);
++		}
++		if (m[5]) {
++			date.setDate(m[5]);
++			check.setDate(m[5]);
++		}
++		fixDate(date, check);
++		if (m[7]) {
++			date.setHours(m[7]);
++		}
++		if (m[8]) {
++			date.setMinutes(m[8]);
++		}
++		if (m[10]) {
++			date.setSeconds(m[10]);
++		}
++		if (m[12]) {
++			date.setMilliseconds(Number("0." + m[12]) * 1000);
++		}
++		fixDate(date, check);
++	}else{
++		date.setUTCFullYear(
++			m[1],
++			m[3] ? m[3] - 1 : 0,
++			m[5] || 1
++		);
++		date.setUTCHours(
++			m[7] || 0,
++			m[8] || 0,
++			m[10] || 0,
++			m[12] ? Number("0." + m[12]) * 1000 : 0
++		);
++		if (m[14]) {
++			var offset = Number(m[16]) * 60 + (m[18] ? Number(m[18]) : 0);
++			offset *= m[15] == '-' ? 1 : -1;
++			date = new Date(+date + (offset * 60 * 1000));
++		}
++	}
++	return date;
++}
++
++
++function parseTime(s) { // returns minutes since start of day
++	if (typeof s == 'number') { // an hour
++		return s * 60;
++	}
++	if (typeof s == 'object') { // a Date object
++		return s.getHours() * 60 + s.getMinutes();
++	}
++	var m = s.match(/(\d+)(?::(\d+))?\s*(\w+)?/);
++	if (m) {
++		var h = parseInt(m[1], 10);
++		if (m[3]) {
++			h %= 12;
++			if (m[3].toLowerCase().charAt(0) == 'p') {
++				h += 12;
++			}
++		}
++		return h * 60 + (m[2] ? parseInt(m[2], 10) : 0);
++	}
++}
++
++
++
++/* Date Formatting
++-----------------------------------------------------------------------------*/
++// TODO: use same function formatDate(date, [date2], format, [options])
++
++
++function formatDate(date, format, options) {
++	return formatDates(date, null, format, options);
++}
++
++
++function formatDates(date1, date2, format, options) {
++	options = options || defaults;
++	var date = date1,
++		otherDate = date2,
++		i, len = format.length, c,
++		i2, formatter,
++		res = '';
++	for (i=0; i<len; i++) {
++		c = format.charAt(i);
++		if (c == "'") {
++			for (i2=i+1; i2<len; i2++) {
++				if (format.charAt(i2) == "'") {
++					if (date) {
++						if (i2 == i+1) {
++							res += "'";
++						}else{
++							res += format.substring(i+1, i2);
++						}
++						i = i2;
++					}
++					break;
++				}
++			}
++		}
++		else if (c == '(') {
++			for (i2=i+1; i2<len; i2++) {
++				if (format.charAt(i2) == ')') {
++					var subres = formatDate(date, format.substring(i+1, i2), options);
++					if (parseInt(subres.replace(/\D/, ''), 10)) {
++						res += subres;
++					}
++					i = i2;
++					break;
++				}
++			}
++		}
++		else if (c == '[') {
++			for (i2=i+1; i2<len; i2++) {
++				if (format.charAt(i2) == ']') {
++					var subformat = format.substring(i+1, i2);
++					var subres = formatDate(date, subformat, options);
++					if (subres != formatDate(otherDate, subformat, options)) {
++						res += subres;
++					}
++					i = i2;
++					break;
++				}
++			}
++		}
++		else if (c == '{') {
++			date = date2;
++			otherDate = date1;
++		}
++		else if (c == '}') {
++			date = date1;
++			otherDate = date2;
++		}
++		else {
++			for (i2=len; i2>i; i2--) {
++				if (formatter = dateFormatters[format.substring(i, i2)]) {
++					if (date) {
++						res += formatter(date, options);
++					}
++					i = i2 - 1;
++					break;
++				}
++			}
++			if (i2 == i) {
++				if (date) {
++					res += c;
++				}
++			}
++		}
++	}
++	return res;
++};
++
++
++var dateFormatters = {
++	s	: function(d)	{ return d.getSeconds() },
++	ss	: function(d)	{ return zeroPad(d.getSeconds()) },
++	m	: function(d)	{ return d.getMinutes() },
++	mm	: function(d)	{ return zeroPad(d.getMinutes()) },
++	h	: function(d)	{ return d.getHours() % 12 || 12 },
++	hh	: function(d)	{ return zeroPad(d.getHours() % 12 || 12) },
++	H	: function(d)	{ return d.getHours() },
++	HH	: function(d)	{ return zeroPad(d.getHours()) },
++	d	: function(d)	{ return d.getDate() },
++	dd	: function(d)	{ return zeroPad(d.getDate()) },
++	ddd	: function(d,o)	{ return o.dayNamesShort[d.getDay()] },
++	dddd: function(d,o)	{ return o.dayNames[d.getDay()] },
++	M	: function(d)	{ return d.getMonth() + 1 },
++	MM	: function(d)	{ return zeroPad(d.getMonth() + 1) },
++	MMM	: function(d,o)	{ return o.monthNamesShort[d.getMonth()] },
++	MMMM: function(d,o)	{ return o.monthNames[d.getMonth()] },
++	yy	: function(d)	{ return (d.getFullYear()+'').substring(2) },
++	yyyy: function(d)	{ return d.getFullYear() },
++	t	: function(d)	{ return d.getHours() < 12 ? 'a' : 'p' },
++	tt	: function(d)	{ return d.getHours() < 12 ? 'am' : 'pm' },
++	T	: function(d)	{ return d.getHours() < 12 ? 'A' : 'P' },
++	TT	: function(d)	{ return d.getHours() < 12 ? 'AM' : 'PM' },
++	u	: function(d)	{ return formatDate(d, "yyyy-MM-dd'T'HH:mm:ss'Z'") },
++	S	: function(d)	{
++		var date = d.getDate();
++		if (date > 10 && date < 20) {
++			return 'th';
++		}
++		return ['st', 'nd', 'rd'][date%10-1] || 'th';
++	},
++	w   : function(d, o) { // local
++		return o.weekNumberCalculation(d);
++	},
++	W   : function(d) { // ISO
++		return iso8601Week(d);
++	}
++};
++fc.dateFormatters = dateFormatters;
++
++
++/* thanks jQuery UI (https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js)
++ * 
++ * Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
++ * @param  date  Date - the date to get the week for
++ * @return  number - the number of the week within the year that contains this date
++ */
++function iso8601Week(date) {
++	var time;
++	var checkDate = new Date(date.getTime());
++
++	// Find Thursday of this week starting on Monday
++	checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
++
++	time = checkDate.getTime();
++	checkDate.setMonth(0); // Compare with Jan 1
++	checkDate.setDate(1);
++	return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
++}
++
++
++;;
++
++fc.applyAll = applyAll;
++
++
++/* Event Date Math
++-----------------------------------------------------------------------------*/
++
++
++function exclEndDay(event) {
++	if (event.end) {
++		return _exclEndDay(event.end, event.allDay);
++	}else{
++		return addDays(cloneDate(event.start), 1);
++	}
++}
++
++
++function _exclEndDay(end, allDay) {
++	end = cloneDate(end);
++	return allDay || end.getHours() || end.getMinutes() ? addDays(end, 1) : clearTime(end);
++}
++
++
++function segCmp(a, b) {
++	return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start);
++}
++
++
++function segsCollide(seg1, seg2) {
++	return seg1.end > seg2.start && seg1.start < seg2.end;
++}
++
++
++
++/* Event Sorting
++-----------------------------------------------------------------------------*/
++
++
++// event rendering utilities
++function sliceSegs(events, visEventEnds, start, end) {
++	var segs = [],
++		i, len=events.length, event,
++		eventStart, eventEnd,
++		segStart, segEnd,
++		isStart, isEnd;
++	for (i=0; i<len; i++) {
++		event = events[i];
++		eventStart = event.start;
++		eventEnd = visEventEnds[i];
++		if (eventEnd > start && eventStart < end) {
++			if (eventStart < start) {
++				segStart = cloneDate(start);
++				isStart = false;
++			}else{
++				segStart = eventStart;
++				isStart = true;
++			}
++			if (eventEnd > end) {
++				segEnd = cloneDate(end);
++				isEnd = false;
++			}else{
++				segEnd = eventEnd;
++				isEnd = true;
++			}
++			segs.push({
++				event: event,
++				start: segStart,
++				end: segEnd,
++				isStart: isStart,
++				isEnd: isEnd,
++				msLength: segEnd - segStart
++			});
++		}
++	}
++	return segs.sort(segCmp);
++}
++
++
++// event rendering calculation utilities
++function stackSegs(segs) {
++	var levels = [],
++		i, len = segs.length, seg,
++		j, collide, k;
++	for (i=0; i<len; i++) {
++		seg = segs[i];
++		j = 0; // the level index where seg should belong
++		while (true) {
++			collide = false;
++			if (levels[j]) {
++				for (k=0; k<levels[j].length; k++) {
++					if (segsCollide(levels[j][k], seg)) {
++						collide = true;
++						break;
++					}
++				}
++			}
++			if (collide) {
++				j++;
++			}else{
++				break;
++			}
++		}
++		if (levels[j]) {
++			levels[j].push(seg);
++		}else{
++			levels[j] = [seg];
++		}
++	}
++	return levels;
++}
++
++
++
++/* Event Element Binding
++-----------------------------------------------------------------------------*/
++
++
++function lazySegBind(container, segs, bindHandlers) {
++	container.unbind('mouseover').mouseover(function(ev) {
++		var parent=ev.target, e,
++			i, seg;
++		while (parent != this) {
++			e = parent;
++			parent = parent.parentNode;
++		}
++		if ((i = e._fci) !== undefined) {
++			e._fci = undefined;
++			seg = segs[i];
++			bindHandlers(seg.event, seg.element, seg);
++			$(ev.target).trigger(ev);
++		}
++		ev.stopPropagation();
++	});
++}
++
++
++
++/* Element Dimensions
++-----------------------------------------------------------------------------*/
++
++
++function setOuterWidth(element, width, includeMargins) {
++	for (var i=0, e; i<element.length; i++) {
++		e = $(element[i]);
++		e.width(Math.max(0, width - hsides(e, includeMargins)));
++	}
++}
++
++
++function setOuterHeight(element, height, includeMargins) {
++	for (var i=0, e; i<element.length; i++) {
++		e = $(element[i]);
++		e.height(Math.max(0, height - vsides(e, includeMargins)));
++	}
++}
++
++
++function hsides(element, includeMargins) {
++	return hpadding(element) + hborders(element) + (includeMargins ? hmargins(element) : 0);
++}
++
++
++function hpadding(element) {
++	return (parseFloat($.css(element[0], 'paddingLeft', true)) || 0) +
++	       (parseFloat($.css(element[0], 'paddingRight', true)) || 0);
++}
++
++
++function hmargins(element) {
++	return (parseFloat($.css(element[0], 'marginLeft', true)) || 0) +
++	       (parseFloat($.css(element[0], 'marginRight', true)) || 0);
++}
++
++
++function hborders(element) {
++	return (parseFloat($.css(element[0], 'borderLeftWidth', true)) || 0) +
++	       (parseFloat($.css(element[0], 'borderRightWidth', true)) || 0);
++}
++
++
++function vsides(element, includeMargins) {
++	return vpadding(element) +  vborders(element) + (includeMargins ? vmargins(element) : 0);
++}
++
++
++function vpadding(element) {
++	return (parseFloat($.css(element[0], 'paddingTop', true)) || 0) +
++	       (parseFloat($.css(element[0], 'paddingBottom', true)) || 0);
++}
++
++
++function vmargins(element) {
++	return (parseFloat($.css(element[0], 'marginTop', true)) || 0) +
++	       (parseFloat($.css(element[0], 'marginBottom', true)) || 0);
++}
++
++
++function vborders(element) {
++	return (parseFloat($.css(element[0], 'borderTopWidth', true)) || 0) +
++	       (parseFloat($.css(element[0], 'borderBottomWidth', true)) || 0);
++}
++
++
++function setMinHeight(element, height) {
++	height = (typeof height == 'number' ? height + 'px' : height);
++	element.each(function(i, _element) {
++		_element.style.cssText += ';min-height:' + height + ';_height:' + height;
++		// why can't we just use .css() ? i forget
++	});
++}
++
++
++
++/* Misc Utils
++-----------------------------------------------------------------------------*/
++
++
++//TODO: arraySlice
++//TODO: isFunction, grep ?
++
++
++function noop() { }
++
++
++function cmp(a, b) {
++	return a - b;
++}
++
++
++function arrayMax(a) {
++	return Math.max.apply(Math, a);
++}
++
++
++function zeroPad(n) {
++	return (n < 10 ? '0' : '') + n;
++}
++
++
++function smartProperty(obj, name) { // get a camel-cased/namespaced property of an object
++	if (obj[name] !== undefined) {
++		return obj[name];
++	}
++	var parts = name.split(/(?=[A-Z])/),
++		i=parts.length-1, res;
++	for (; i>=0; i--) {
++		res = obj[parts[i].toLowerCase()];
++		if (res !== undefined) {
++			return res;
++		}
++	}
++	return obj[''];
++}
++
++
++function htmlEscape(s) {
++	return s.replace(/&/g, '&')
++		.replace(/</g, '<')
++		.replace(/>/g, '>')
++		.replace(/'/g, ''')
++		.replace(/"/g, '"')
++		.replace(/\n/g, '<br />');
++}
++
++
++function cssKey(_element) {
++	return _element.id + '/' + _element.className + '/' + _element.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig, '');
++}
++
++
++function disableTextSelection(element) {
++	element
++		.attr('unselectable', 'on')
++		.css('MozUserSelect', 'none')
++		.bind('selectstart.ui', function() { return false; });
++}
++
++
++/*
++function enableTextSelection(element) {
++	element
++		.attr('unselectable', 'off')
++		.css('MozUserSelect', '')
++		.unbind('selectstart.ui');
++}
++*/
++
++
++function markFirstLast(e) {
++	e.children()
++		.removeClass('fc-first fc-last')
++		.filter(':first-child')
++			.addClass('fc-first')
++		.end()
++		.filter(':last-child')
++			.addClass('fc-last');
++}
++
++
++function setDayID(cell, date) {
++	cell.each(function(i, _cell) {
++		_cell.className = _cell.className.replace(/^fc-\w*/, 'fc-' + dayIDs[date.getDay()]);
++		// TODO: make a way that doesn't rely on order of classes
++	});
++}
++
++
++function getSkinCss(event, opt) {
++	var source = event.source || {};
++	var eventColor = event.color;
++	var sourceColor = source.color;
++	var optionColor = opt('eventColor');
++	var backgroundColor =
++		event.backgroundColor ||
++		eventColor ||
++		source.backgroundColor ||
++		sourceColor ||
++		opt('eventBackgroundColor') ||
++		optionColor;
++	var borderColor =
++		event.borderColor ||
++		eventColor ||
++		source.borderColor ||
++		sourceColor ||
++		opt('eventBorderColor') ||
++		optionColor;
++	var textColor =
++		event.textColor ||
++		source.textColor ||
++		opt('eventTextColor');
++	var statements = [];
++	if (backgroundColor) {
++		statements.push('background-color:' + backgroundColor);
++	}
++	if (borderColor) {
++		statements.push('border-color:' + borderColor);
++	}
++	if (textColor) {
++		statements.push('color:' + textColor);
++	}
++	return statements.join(';');
++}
++
++
++function applyAll(functions, thisObj, args) {
++	if ($.isFunction(functions)) {
++		functions = [ functions ];
++	}
++	if (functions) {
++		var i;
++		var ret;
++		for (i=0; i<functions.length; i++) {
++			ret = functions[i].apply(thisObj, args) || ret;
++		}
++		return ret;
++	}
++}
++
++
++function firstDefined() {
++	for (var i=0; i<arguments.length; i++) {
++		if (arguments[i] !== undefined) {
++			return arguments[i];
++		}
++	}
++}
++
++
++;;
++
++fcViews.month = MonthView;
++
++function MonthView(element, calendar) {
++	var t = this;
++	
++	
++	// exports
++	t.render = render;
++	
++	
++	// imports
++	BasicView.call(t, element, calendar, 'month');
++	var opt = t.opt;
++	var renderBasic = t.renderBasic;
++	var formatDate = calendar.formatDate;
++	
++	
++	
++	function render(date, delta) {
++		if (delta) {
++			addMonths(date, delta);
++			date.setDate(1);
++		}
++		var start = cloneDate(date, true);
++		start.setDate(1);
++		var end = addMonths(cloneDate(start), 1);
++		var visStart = cloneDate(start);
++		var visEnd = cloneDate(end);
++		var firstDay = opt('firstDay');
++		var nwe = opt('weekends') ? 0 : 1;
++		if (nwe) {
++			skipWeekend(visStart);
++			skipWeekend(visEnd, -1, true);
++		}
++		addDays(visStart, -((visStart.getDay() - Math.max(firstDay, nwe) + 7) % 7));
++		addDays(visEnd, (7 - visEnd.getDay() + Math.max(firstDay, nwe)) % 7);
++		var rowCnt = Math.round((visEnd - visStart) / (DAY_MS * 7));
++		if (opt('weekMode') == 'fixed') {
++			addDays(visEnd, (6 - rowCnt) * 7);
++			rowCnt = 6;
++		}
++		t.title = formatDate(start, opt('titleFormat'));
++		t.start = start;
++		t.end = end;
++		t.visStart = visStart;
++		t.visEnd = visEnd;
++		renderBasic(rowCnt, nwe ? 5 : 7, true);
++	}
++	
++	
++}
++
++;;
++
++fcViews.basicWeek = BasicWeekView;
++
++function BasicWeekView(element, calendar) {
++	var t = this;
++	
++	
++	// exports
++	t.render = render;
++	
++	
++	// imports
++	BasicView.call(t, element, calendar, 'basicWeek');
++	var opt = t.opt;
++	var renderBasic = t.renderBasic;
++	var formatDates = calendar.formatDates;
++	
++	
++	
++	function render(date, delta) {
++		if (delta) {
++			addDays(date, delta * 7);
++		}
++		var start = addDays(cloneDate(date), -((date.getDay() - opt('firstDay') + 7) % 7));
++		var end = addDays(cloneDate(start), 7);
++		var visStart = cloneDate(start);
++		var visEnd = cloneDate(end);
++		var weekends = opt('weekends');
++		if (!weekends) {
++			skipWeekend(visStart);
++			skipWeekend(visEnd, -1, true);
++		}
++		t.title = formatDates(
++			visStart,
++			addDays(cloneDate(visEnd), -1),
++			opt('titleFormat')
++		);
++		t.start = start;
++		t.end = end;
++		t.visStart = visStart;
++		t.visEnd = visEnd;
++		renderBasic(1, weekends ? 7 : 5, false);
++	}
++	
++	
++}
++
++;;
++
++fcViews.basicDay = BasicDayView;
++
++//TODO: when calendar's date starts out on a weekend, shouldn't happen
++
++
++function BasicDayView(element, calendar) {
++	var t = this;
++	
++	
++	// exports
++	t.render = render;
++	
++	
++	// imports
++	BasicView.call(t, element, calendar, 'basicDay');
++	var opt = t.opt;
++	var renderBasic = t.renderBasic;
++	var formatDate = calendar.formatDate;
++	
++	
++	
++	function render(date, delta) {
++		if (delta) {
++			addDays(date, delta);
++			if (!opt('weekends')) {
++				skipWeekend(date, delta < 0 ? -1 : 1);
++			}
++		}
++		t.title = formatDate(date, opt('titleFormat'));
++		t.start = t.visStart = cloneDate(date, true);
++		t.end = t.visEnd = addDays(cloneDate(t.start), 1);
++		renderBasic(1, 1, false);
++	}
++	
++	
++}
++
++;;
++
++setDefaults({
++	weekMode: 'fixed'
++});
++
++
++function BasicView(element, calendar, viewName) {
++	var t = this;
++	
++	
++	// exports
++	t.renderBasic = renderBasic;
++	t.setHeight = setHeight;
++	t.setWidth = setWidth;
++	t.renderDayOverlay = renderDayOverlay;
++	t.defaultSelectionEnd = defaultSelectionEnd;
++	t.renderSelection = renderSelection;
++	t.clearSelection = clearSelection;
++	t.reportDayClick = reportDayClick; // for selection (kinda hacky)
++	t.dragStart = dragStart;
++	t.dragStop = dragStop;
++	t.defaultEventEnd = defaultEventEnd;
++	t.getHoverListener = function() { return hoverListener };
++	t.colContentLeft = colContentLeft;
++	t.colContentRight = colContentRight;
++	t.dayOfWeekCol = dayOfWeekCol;
++	t.dateCell = dateCell;
++	t.cellDate = cellDate;
++	t.cellIsAllDay = function() { return true };
++	t.allDayRow = allDayRow;
++	t.allDayBounds = allDayBounds;
++	t.getRowCnt = function() { return rowCnt };
++	t.getColCnt = function() { return colCnt };
++	t.getColWidth = function() { return colWidth };
++	t.getDaySegmentContainer = function() { return daySegmentContainer };
++	
++	
++	// imports
++	View.call(t, element, calendar, viewName);
++	OverlayManager.call(t);
++	SelectionManager.call(t);
++	BasicEventRenderer.call(t);
++	var opt = t.opt;
++	var trigger = t.trigger;
++	var clearEvents = t.clearEvents;
++	var renderOverlay = t.renderOverlay;
++	var clearOverlays = t.clearOverlays;
++	var daySelectionMousedown = t.daySelectionMousedown;
++	var formatDate = calendar.formatDate;
++	
++	
++	// locals
++	
++	var table;
++	var head;
++	var headCells;
++	var body;
++	var bodyRows;
++	var bodyCells;
++	var bodyFirstCells;
++	var bodyCellTopInners;
++	var daySegmentContainer;
++	
++	var viewWidth;
++	var viewHeight;
++	var colWidth;
++	var weekNumberWidth;
++	
++	var rowCnt, colCnt;
++	var coordinateGrid;
++	var hoverListener;
++	var colContentPositions;
++	
++	var rtl, dis, dit;
++	var firstDay;
++	var nwe; // no weekends? a 0 or 1 for easy computations
++	var tm;
++	var colFormat;
++	var showWeekNumbers;
++	var weekNumberTitle;
++	var weekNumberFormat;
++	
++	
++	
++	/* Rendering
++	------------------------------------------------------------*/
++	
++	
++	disableTextSelection(element.addClass('fc-grid'));
++	
++	
++	function renderBasic(r, c, showNumbers) {
++		rowCnt = r;
++		colCnt = c;
++		updateOptions();
++		var firstTime = !body;
++		if (firstTime) {
++			buildEventContainer();
++		}else{
++			clearEvents();
++		}
++		buildTable(showNumbers);
++	}
++	
++	
++	
++	function updateOptions() {
++		rtl = opt('isRTL');
++		if (rtl) {
++			dis = -1;
++			dit = colCnt - 1;
++		}else{
++			dis = 1;
++			dit = 0;
++		}
++		firstDay = opt('firstDay');
++		nwe = opt('weekends') ? 0 : 1;
++		tm = opt('theme') ? 'ui' : 'fc';
++		colFormat = opt('columnFormat');
++
++		// week # options. (TODO: bad, logic also in other views)
++		showWeekNumbers = opt('weekNumbers');
++		weekNumberTitle = opt('weekNumberTitle');
++		if (opt('weekNumberCalculation') != 'iso') {
++			weekNumberFormat = "w";
++		}
++		else {
++			weekNumberFormat = "W";
++		}
++	}
++	
++	
++	
++	function buildEventContainer() {
++		daySegmentContainer =
++			$("<div style='position:absolute;z-index:8;top:0;left:0'/>")
++				.appendTo(element);
++	}
++	
++	
++	
++	function buildTable(showNumbers) {
++		var html = '';
++		var i, j;
++		var headerClass = tm + "-widget-header";
++		var contentClass = tm + "-widget-content";
++		var month = t.start.getMonth();
++		var today = clearTime(new Date());
++		var cellDate; // not to be confused with local function. TODO: better names
++		var cellClasses;
++		var cell;
++
++		html += "<table class='fc-border-separate' style='width:100%' cellspacing='0'>" +
++		        "<thead>" +
++		        "<tr>";
++
++		if (showWeekNumbers) {
++			html += "<th class='fc-week-number " + headerClass + "'/>";
++		}
++
++		for (i=0; i<colCnt; i++) {
++			cellDate = _cellDate(0, i); // a little confusing. cellDate is local variable. _cellDate is private function
++			html += "<th class='fc-day-header fc-" + dayIDs[cellDate.getDay()] + " " + headerClass + "'/>";
++		}
++
++		html += "</tr>" +
++		        "</thead>" +
++		        "<tbody>";
++
++		for (i=0; i<rowCnt; i++) {
++			html += "<tr class='fc-week'>";
++
++			if (showWeekNumbers) {
++				html += "<td class='fc-week-number " + contentClass + "'>" +
++				        "<div/>" +
++				        "</td>";
++			}
++
++			for (j=0; j<colCnt; j++) {
++				cellDate = _cellDate(i, j); // a little confusing. cellDate is local variable. _cellDate is private function
++
++				cellClasses = [
++					'fc-day',
++					'fc-' + dayIDs[cellDate.getDay()],
++					contentClass
++				];
++				if (cellDate.getMonth() != month) {
++					cellClasses.push('fc-other-month');
++				}
++				if (+cellDate == +today) {
++					cellClasses.push('fc-today');
++					cellClasses.push(tm + '-state-highlight');
++				}
++
++				html += "<td" +
++				        " class='" + cellClasses.join(' ') + "'" +
++				        " data-date='" + formatDate(cellDate, 'yyyy-MM-dd') + "'" +
++				        ">" + 
++				        "<div>";
++				if (showNumbers) {
++					html += "<div class='fc-day-number'>" + cellDate.getDate() + "</div>";
++				}
++				html += "<div class='fc-day-content'>" +
++				        "<div style='position:relative'> </div>" +
++				        "</div>" +
++				        "</div>" +
++				        "</td>";
++			}
++
++			html += "</tr>";
++		}
++		html += "</tbody>" +
++		        "</table>";
++
++		lockHeight(); // the unlock happens later, in setHeight()...
++		if (table) {
++			table.remove();
++		}
++		table = $(html).appendTo(element);
++
++		head = table.find('thead');
++		headCells = head.find('.fc-day-header');
++		body = table.find('tbody');
++		bodyRows = body.find('tr');
++		bodyCells = body.find('.fc-day');
++		bodyFirstCells = bodyRows.find('td:first-child');
++		bodyCellTopInners = bodyRows.eq(0).find('.fc-day-content > div');
++		
++		markFirstLast(head.add(head.find('tr'))); // marks first+last tr/th's
++		markFirstLast(bodyRows); // marks first+last td's
++		bodyRows.eq(0).addClass('fc-first');
++		bodyRows.filter(':last').addClass('fc-last');
++	
++		if (showWeekNumbers) {
++			head.find('.fc-week-number').text(weekNumberTitle);
++		}
++
++		headCells.each(function(i, _cell) {
++			var date = indexDate(i);
++			$(_cell).text(formatDate(date, colFormat));
++		});
++
++		if (showWeekNumbers) {
++			body.find('.fc-week-number > div').each(function(i, _cell) {
++				var weekStart = _cellDate(i, 0);
++				$(_cell).text(formatDate(weekStart, weekNumberFormat));
++			});
++		}
++		
++		bodyCells.each(function(i, _cell) {
++			var date = indexDate(i);
++			trigger('dayRender', t, date, $(_cell));
++		});
++
++		dayBind(bodyCells);
++	}
++	
++	
++	
++	function setHeight(height) {
++		viewHeight = height;
++		
++		var bodyHeight = viewHeight - head.height();
++		var rowHeight;
++		var rowHeightLast;
++		var cell;
++			
++		if (opt('weekMode') == 'variable') {
++			rowHeight = rowHeightLast = Math.floor(bodyHeight / (rowCnt==1 ? 2 : 6));
++		}else{
++			rowHeight = Math.floor(bodyHeight / rowCnt);
++			rowHeightLast = bodyHeight - rowHeight * (rowCnt-1);
++		}
++		
++		bodyFirstCells.each(function(i, _cell) {
++			if (i < rowCnt) {
++				cell = $(_cell);
++				setMinHeight(
++					cell.find('> div'),
++					(i==rowCnt-1 ? rowHeightLast : rowHeight) - vsides(cell)
++				);
++			}
++		});
++		
++		unlockHeight();
++	}
++	
++	
++	function setWidth(width) {
++		viewWidth = width;
++		colContentPositions.clear();
++
++		weekNumberWidth = 0;
++		if (showWeekNumbers) {
++			weekNumberWidth = head.find('th.fc-week-number').outerWidth();
++		}
++
++		colWidth = Math.floor((viewWidth - weekNumberWidth) / colCnt);
++		setOuterWidth(headCells.slice(0, -1), colWidth);
++	}
++	
++	
++	
++	/* Day clicking and binding
++	-----------------------------------------------------------*/
++	
++	
++	function dayBind(days) {
++		days.click(dayClick)
++			.mousedown(daySelectionMousedown);
++	}
++	
++	
++	function dayClick(ev) {
++		if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick
++			var date = parseISO8601($(this).data('date'));
++			trigger('dayClick', this, date, true, ev);
++		}
++	}
++	
++	
++	
++	/* Semi-transparent Overlay Helpers
++	------------------------------------------------------*/
++	
++	
++	function renderDayOverlay(overlayStart, overlayEnd, refreshCoordinateGrid) { // overlayEnd is exclusive
++		if (refreshCoordinateGrid) {
++			coordinateGrid.build();
++		}
++		var rowStart = cloneDate(t.visStart);
++		var rowEnd = addDays(cloneDate(rowStart), colCnt);
++		for (var i=0; i<rowCnt; i++) {
++			var stretchStart = new Date(Math.max(rowStart, overlayStart));
++			var stretchEnd = new Date(Math.min(rowEnd, overlayEnd));
++			if (stretchStart < stretchEnd) {
++				var colStart, colEnd;
++				if (rtl) {
++					colStart = dayDiff(stretchEnd, rowStart)*dis+dit+1;
++					colEnd = dayDiff(stretchStart, rowStart)*dis+dit+1;
++				}else{
++					colStart = dayDiff(stretchStart, rowStart);
++					colEnd = dayDiff(stretchEnd, rowStart);
++				}
++				dayBind(
++					renderCellOverlay(i, colStart, i, colEnd-1)
++				);
++			}
++			addDays(rowStart, 7);
++			addDays(rowEnd, 7);
++		}
++	}
++	
++	
++	function renderCellOverlay(row0, col0, row1, col1) { // row1,col1 is inclusive
++		var rect = coordinateGrid.rect(row0, col0, row1, col1, element);
++		return renderOverlay(rect, element);
++	}
++	
++	
++	
++	/* Selection
++	-----------------------------------------------------------------------*/
++	
++	
++	function defaultSelectionEnd(startDate, allDay) {
++		return cloneDate(startDate);
++	}
++	
++	
++	function renderSelection(startDate, endDate, allDay) {
++		renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true); // rebuild every time???
++	}
++	
++	
++	function clearSelection() {
++		clearOverlays();
++	}
++	
++	
++	function reportDayClick(date, allDay, ev) {
++		var cell = dateCell(date);
++		var _element = bodyCells[cell.row*colCnt + cell.col];
++		trigger('dayClick', _element, date, allDay, ev);
++	}
++	
++	
++	
++	/* External Dragging
++	-----------------------------------------------------------------------*/
++	
++	
++	function dragStart(_dragElement, ev, ui) {
++		hoverListener.start(function(cell) {
++			clearOverlays();
++			if (cell) {
++				renderCellOverlay(cell.row, cell.col, cell.row, cell.col);
++			}
++		}, ev);
++	}
++	
++	
++	function dragStop(_dragElement, ev, ui) {
++		var cell = hoverListener.stop();
++		clearOverlays();
++		if (cell) {
++			var d = cellDate(cell);
++			trigger('drop', _dragElement, d, true, ev, ui);
++		}
++	}
++	
++	
++	
++	/* Utilities
++	--------------------------------------------------------*/
++	
++	
++	function defaultEventEnd(event) {
++		return cloneDate(event.start);
++	}
++	
++	
++	coordinateGrid = new CoordinateGrid(function(rows, cols) {
++		var e, n, p;
++		headCells.each(function(i, _e) {
++			e = $(_e);
++			n = e.offset().left;
++			if (i) {
++				p[1] = n;
++			}
++			p = [n];
++			cols[i] = p;
++		});
++		p[1] = n + e.outerWidth();
++		bodyRows.each(function(i, _e) {
++			if (i < rowCnt) {
++				e = $(_e);
++				n = e.offset().top;
++				if (i) {
++					p[1] = n;
++				}
++				p = [n];
++				rows[i] = p;
++			}
++		});
++		p[1] = n + e.outerHeight();
++	});
++	
++	
++	hoverListener = new HoverListener(coordinateGrid);
++	
++	
++	colContentPositions = new HorizontalPositionCache(function(col) {
++		return bodyCellTopInners.eq(col);
++	});
++	
++	
++	function colContentLeft(col) {
++		return colContentPositions.left(col);
++	}
++	
++	
++	function colContentRight(col) {
++		return colContentPositions.right(col);
++	}
++	
++	
++	
++	
++	function dateCell(date) {
++		return {
++			row: Math.floor(dayDiff(date, t.visStart) / 7),
++			col: dayOfWeekCol(date.getDay())
++		};
++	}
++	
++	
++	function cellDate(cell) {
++		return _cellDate(cell.row, cell.col);
++	}
++	
++	
++	function _cellDate(row, col) {
++		return addDays(cloneDate(t.visStart), row*7 + col*dis+dit);
++		// what about weekends in middle of week?
++	}
++	
++	
++	function indexDate(index) {
++		return _cellDate(Math.floor(index/colCnt), index%colCnt);
++	}
++	
++	
++	function dayOfWeekCol(dayOfWeek) {
++		return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt) * dis + dit;
++	}
++	
++	
++	
++	
++	function allDayRow(i) {
++		return bodyRows.eq(i);
++	}
++	
++	
++	function allDayBounds(i) {
++		var left = 0;
++		if (showWeekNumbers) {
++			left += weekNumberWidth;
++		}
++		return {
++			left: left,
++			right: viewWidth
++		};
++	}
++
++
++
++	// makes sure height doesn't collapse while we destroy/render new cells
++	// (this causes a bad end-user scrollbar jump)
++	// TODO: generalize this for all view rendering. (also in Calendar.js)
++
++	function lockHeight() {
++		setMinHeight(element, element.height());
++	}
++
++	function unlockHeight() {
++		setMinHeight(element, 1);
++	}
++	
++}
++
++;;
++
++function BasicEventRenderer() {
++	var t = this;
++	
++	
++	// exports
++	t.renderEvents = renderEvents;
++	t.compileDaySegs = compileSegs; // for DayEventRenderer
++	t.clearEvents = clearEvents;
++	t.bindDaySeg = bindDaySeg;
++	
++	
++	// imports
++	DayEventRenderer.call(t);
++	var opt = t.opt;
++	var trigger = t.trigger;
++	//var setOverflowHidden = t.setOverflowHidden;
++	var isEventDraggable = t.isEventDraggable;
++	var isEventResizable = t.isEventResizable;
++	var reportEvents = t.reportEvents;
++	var reportEventClear = t.reportEventClear;
++	var eventElementHandlers = t.eventElementHandlers;
++	var showEvents = t.showEvents;
++	var hideEvents = t.hideEvents;
++	var eventDrop = t.eventDrop;
++	var getDaySegmentContainer = t.getDaySegmentContainer;
++	var getHoverListener = t.getHoverListener;
++	var renderDayOverlay = t.renderDayOverlay;
++	var clearOverlays = t.clearOverlays;
++	var getRowCnt = t.getRowCnt;
++	var getColCnt = t.getColCnt;
++	var renderDaySegs = t.renderDaySegs;
++	var resizableDayEvent = t.resizableDayEvent;
++	
++	
++	
++	/* Rendering
++	--------------------------------------------------------------------*/
++	
++	
++	function renderEvents(events, modifiedEventId) {
++		reportEvents(events);
++		renderDaySegs(compileSegs(events), modifiedEventId);
++		trigger('eventAfterAllRender');
++	}
++	
++	
++	function clearEvents() {
++		reportEventClear();
++		getDaySegmentContainer().empty();
++	}
++	
++	
++	function compileSegs(events) {
++		var rowCnt = getRowCnt(),
++			colCnt = getColCnt(),
++			d1 = cloneDate(t.visStart),
++			d2 = addDays(cloneDate(d1), colCnt),
++			visEventsEnds = $.map(events, exclEndDay),
++			i, row,
++			j, level,
++			k, seg,
++			segs=[];
++		for (i=0; i<rowCnt; i++) {
++			row = stackSegs(sliceSegs(events, visEventsEnds, d1, d2));
++			for (j=0; j<row.length; j++) {
++				level = row[j];
++				for (k=0; k<level.length; k++) {
++					seg = level[k];
++					seg.row = i;
++					seg.level = j; // not needed anymore
++					segs.push(seg);
++				}
++			}
++			addDays(d1, 7);
++			addDays(d2, 7);
++		}
++		return segs;
++	}
++	
++	
++	function bindDaySeg(event, eventElement, seg) {
++		if (isEventDraggable(event)) {
++			draggableDayEvent(event, eventElement);
++		}
++		if (seg.isEnd && isEventResizable(event)) {
++			resizableDayEvent(event, eventElement, seg);
++		}
++		eventElementHandlers(event, eventElement);
++			// needs to be after, because resizableDayEvent might stopImmediatePropagation on click
++	}
++	
++	
++	
++	/* Dragging
++	----------------------------------------------------------------------------*/
++	
++	
++	function draggableDayEvent(event, eventElement) {
++		var hoverListener = getHoverListener();
++		var dayDelta;
++		eventElement.draggable({
++			zIndex: 9,
++			delay: 50,
++			opacity: opt('dragOpacity'),
++			revertDuration: opt('dragRevertDuration'),
++			start: function(ev, ui) {
++				trigger('eventDragStart', eventElement, event, ev, ui);
++				hideEvents(event, eventElement);
++				hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
++					eventElement.draggable('option', 'revert', !cell || !rowDelta && !colDelta);
++					clearOverlays();
++					if (cell) {
++						//setOverflowHidden(true);
++						dayDelta = rowDelta*7 + colDelta * (opt('isRTL') ? -1 : 1);
++						renderDayOverlay(
++							addDays(cloneDate(event.start), dayDelta),
++							addDays(exclEndDay(event), dayDelta)
++						);
++					}else{
++						//setOverflowHidden(false);
++						dayDelta = 0;
++					}
++				}, ev, 'drag');
++			},
++			stop: function(ev, ui) {
++				hoverListener.stop();
++				clearOverlays();
++				trigger('eventDragStop', eventElement, event, ev, ui);
++				if (dayDelta) {
++					eventDrop(this, event, dayDelta, 0, event.allDay, ev, ui);
++				}else{
++					eventElement.css('filter', ''); // clear IE opacity side-effects
++					showEvents(event, eventElement);
++				}
++				//setOverflowHidden(false);
++			}
++		});
++	}
++
++
++}
++
++;;
++
++fcViews.agendaWeek = AgendaWeekView;
++
++function AgendaWeekView(element, calendar) {
++	var t = this;
++	
++	
++	// exports
++	t.render = render;
++	
++	
++	// imports
++	AgendaView.call(t, element, calendar, 'agendaWeek');
++	var opt = t.opt;
++	var renderAgenda = t.renderAgenda;
++	var formatDates = calendar.formatDates;
++	
++	
++	
++	function render(date, delta) {
++		if (delta) {
++			addDays(date, delta * 7);
++		}
++		var start = addDays(cloneDate(date), -((date.getDay() - opt('firstDay') + 7) % 7));
++		var end = addDays(cloneDate(start), 7);
++		var visStart = cloneDate(start);
++		var visEnd = cloneDate(end);
++		var weekends = opt('weekends');
++		if (!weekends) {
++			skipWeekend(visStart);
++			skipWeekend(visEnd, -1, true);
++		}
++		t.title = formatDates(
++			visStart,
++			addDays(cloneDate(visEnd), -1),
++			opt('titleFormat')
++		);
++		t.start = start;
++		t.end = end;
++		t.visStart = visStart;
++		t.visEnd = visEnd;
++		renderAgenda(weekends ? 7 : 5);
++	}
++	
++
++}
++
++;;
++
++fcViews.agendaDay = AgendaDayView;
++
++function AgendaDayView(element, calendar) {
++	var t = this;
++	
++	
++	// exports
++	t.render = render;
++	
++	
++	// imports
++	AgendaView.call(t, element, calendar, 'agendaDay');
++	var opt = t.opt;
++	var renderAgenda = t.renderAgenda;
++	var formatDate = calendar.formatDate;
++	
++	
++	
++	function render(date, delta) {
++		if (delta) {
++			addDays(date, delta);
++			if (!opt('weekends')) {
++				skipWeekend(date, delta < 0 ? -1 : 1);
++			}
++		}
++		var start = cloneDate(date, true);
++		var end = addDays(cloneDate(start), 1);
++		t.title = formatDate(date, opt('titleFormat'));
++		t.start = t.visStart = start;
++		t.end = t.visEnd = end;
++		renderAgenda(1);
++	}
++	
++
++}
++
++;;
++
++setDefaults({
++	allDaySlot: true,
++	allDayText: 'all-day',
++	firstHour: 6,
++	slotMinutes: 30,
++	defaultEventMinutes: 120,
++	axisFormat: 'h(:mm)tt',
++	timeFormat: {
++		agenda: 'h:mm{ - h:mm}'
++	},
++	dragOpacity: {
++		agenda: .5
++	},
++	minTime: 0,
++	maxTime: 24
++});
++
++
++// TODO: make it work in quirks mode (event corners, all-day height)
++// TODO: test liquid width, especially in IE6
++
++
++function AgendaView(element, calendar, viewName) {
++	var t = this;
++	
++	
++	// exports
++	t.renderAgenda = renderAgenda;
++	t.setWidth = setWidth;
++	t.setHeight = setHeight;
++	t.beforeHide = beforeHide;
++	t.afterShow = afterShow;
++	t.defaultEventEnd = defaultEventEnd;
++	t.timePosition = timePosition;
++	t.dayOfWeekCol = dayOfWeekCol;
++	t.dateCell = dateCell;
++	t.cellDate = cellDate;
++	t.cellIsAllDay = cellIsAllDay;
++	t.allDayRow = getAllDayRow;
++	t.allDayBounds = allDayBounds;
++	t.getHoverListener = function() { return hoverListener };
++	t.colContentLeft = colContentLeft;
++	t.colContentRight = colContentRight;
++	t.getDaySegmentContainer = function() { return daySegmentContainer };
++	t.getSlotSegmentContainer = function() { return slotSegmentContainer };
++	t.getMinMinute = function() { return minMinute };
++	t.getMaxMinute = function() { return maxMinute };
++	t.getBodyContent = function() { return slotContent }; // !!??
++	t.getRowCnt = function() { return 1 };
++	t.getColCnt = function() { return colCnt };
++	t.getColWidth = function() { return colWidth };
++	t.getSnapHeight = function() { return snapHeight };
++	t.getSnapMinutes = function() { return snapMinutes };
++	t.defaultSelectionEnd = defaultSelectionEnd;
++	t.renderDayOverlay = renderDayOverlay;
++	t.renderSelection = renderSelection;
++	t.clearSelection = clearSelection;
++	t.reportDayClick = reportDayClick; // selection mousedown hack
++	t.dragStart = dragStart;
++	t.dragStop = dragStop;
++	
++	
++	// imports
++	View.call(t, element, calendar, viewName);
++	OverlayManager.call(t);
++	SelectionManager.call(t);
++	AgendaEventRenderer.call(t);
++	var opt = t.opt;
++	var trigger = t.trigger;
++	var clearEvents = t.clearEvents;
++	var renderOverlay = t.renderOverlay;
++	var clearOverlays = t.clearOverlays;
++	var reportSelection = t.reportSelection;
++	var unselect = t.unselect;
++	var daySelectionMousedown = t.daySelectionMousedown;
++	var slotSegHtml = t.slotSegHtml;
++	var formatDate = calendar.formatDate;
++	
++	
++	// locals
++	
++	var dayTable;
++	var dayHead;
++	var dayHeadCells;
++	var dayBody;
++	var dayBodyCells;
++	var dayBodyCellInners;
++	var dayBodyFirstCell;
++	var dayBodyFirstCellStretcher;
++	var slotLayer;
++	var daySegmentContainer;
++	var allDayTable;
++	var allDayRow;
++	var slotScroller;
++	var slotContent;
++	var slotSegmentContainer;
++	var slotTable;
++	var slotTableFirstInner;
++	var axisFirstCells;
++	var gutterCells;
++	var selectionHelper;
++	
++	var viewWidth;
++	var viewHeight;
++	var axisWidth;
++	var colWidth;
++	var gutterWidth;
++	var slotHeight; // TODO: what if slotHeight changes? (see issue 650)
++
++	var snapMinutes;
++	var snapRatio; // ratio of number of "selection" slots to normal slots. (ex: 1, 2, 4)
++	var snapHeight; // holds the pixel hight of a "selection" slot
++	
++	var colCnt;
++	var slotCnt;
++	var coordinateGrid;
++	var hoverListener;
++	var colContentPositions;
++	var slotTopCache = {};
++	var savedScrollTop;
++	
++	var tm;
++	var firstDay;
++	var nwe;            // no weekends (int)
++	var rtl, dis, dit;  // day index sign / translate
++	var minMinute, maxMinute;
++	var colFormat;
++	var showWeekNumbers;
++	var weekNumberTitle;
++	var weekNumberFormat;
++	
++
++	
++	/* Rendering
++	-----------------------------------------------------------------------------*/
++	
++	
++	disableTextSelection(element.addClass('fc-agenda'));
++	
++	
++	function renderAgenda(c) {
++		colCnt = c;
++		updateOptions();
++		if (!dayTable) {
++			buildSkeleton();
++		}else{
++			clearEvents();
++		}
++		updateCells();
++	}
++	
++	
++	
++	function updateOptions() {
++		tm = opt('theme') ? 'ui' : 'fc';
++		nwe = opt('weekends') ? 0 : 1;
++		firstDay = opt('firstDay');
++		if (rtl = opt('isRTL')) {
++			dis = -1;
++			dit = colCnt - 1;
++		}else{
++			dis = 1;
++			dit = 0;
++		}
++		minMinute = parseTime(opt('minTime'));
++		maxMinute = parseTime(opt('maxTime'));
++		colFormat = opt('columnFormat');
++
++		// week # options. (TODO: bad, logic also in other views)
++		showWeekNumbers = opt('weekNumbers');
++		weekNumberTitle = opt('weekNumberTitle');
++		if (opt('weekNumberCalculation') != 'iso') {
++			weekNumberFormat = "w";
++		}
++		else {
++			weekNumberFormat = "W";
++		}
++
++		snapMinutes = opt('snapMinutes') || opt('slotMinutes');
++	}
++	
++	
++	
++	function buildSkeleton() {
++		var headerClass = tm + "-widget-header";
++		var contentClass = tm + "-widget-content";
++		var s;
++		var i;
++		var d;
++		var maxd;
++		var minutes;
++		var slotNormal = opt('slotMinutes') % 15 == 0;
++		
++		s =
++			"<table style='width:100%' class='fc-agenda-days fc-border-separate' cellspacing='0'>" +
++			"<thead>" +
++			"<tr>";
++
++		if (showWeekNumbers) {
++			s += "<th class='fc-agenda-axis fc-week-number " + headerClass + "'/>";
++		}
++		else {
++			s += "<th class='fc-agenda-axis " + headerClass + "'> </th>";
++		}
++
++		for (i=0; i<colCnt; i++) {
++			s +=
++				"<th class='fc- fc-col" + i + ' ' + headerClass + "'/>"; // fc- needed for setDayID
++		}
++		s +=
++			"<th class='fc-agenda-gutter " + headerClass + "'> </th>" +
++			"</tr>" +
++			"</thead>" +
++			"<tbody>" +
++			"<tr>" +
++			"<th class='fc-agenda-axis " + headerClass + "'> </th>";
++		for (i=0; i<colCnt; i++) {
++			s +=
++				"<td class='fc- fc-col" + i + ' ' + contentClass + "'>" + // fc- needed for setDayID
++				"<div>" +
++				"<div class='fc-day-content'>" +
++				"<div style='position:relative'> </div>" +
++				"</div>" +
++				"</div>" +
++				"</td>";
++		}
++		s +=
++			"<td class='fc-agenda-gutter " + contentClass + "'> </td>" +
++			"</tr>" +
++			"</tbody>" +
++			"</table>";
++		dayTable = $(s).appendTo(element);
++		dayHead = dayTable.find('thead');
++		dayHeadCells = dayHead.find('th').slice(1, -1);
++		dayBody = dayTable.find('tbody');
++		dayBodyCells = dayBody.find('td').slice(0, -1);
++		dayBodyCellInners = dayBodyCells.find('div.fc-day-content div');
++		dayBodyFirstCell = dayBodyCells.eq(0);
++		dayBodyFirstCellStretcher = dayBodyFirstCell.find('> div');
++		
++		markFirstLast(dayHead.add(dayHead.find('tr')));
++		markFirstLast(dayBody.add(dayBody.find('tr')));
++		
++		axisFirstCells = dayHead.find('th:first');
++		gutterCells = dayTable.find('.fc-agenda-gutter');
++		
++		slotLayer =
++			$("<div style='position:absolute;z-index:2;left:0;width:100%'/>")
++				.appendTo(element);
++				
++		if (opt('allDaySlot')) {
++		
++			daySegmentContainer =
++				$("<div style='position:absolute;z-index:8;top:0;left:0'/>")
++					.appendTo(slotLayer);
++		
++			s =
++				"<table style='width:100%' class='fc-agenda-allday' cellspacing='0'>" +
++				"<tr>" +
++				"<th class='" + headerClass + " fc-agenda-axis'>" + opt('allDayText') + "</th>" +
++				"<td>" +
++				"<div class='fc-day-content'><div style='position:relative'/></div>" +
++				"</td>" +
++				"<th class='" + headerClass + " fc-agenda-gutter'> </th>" +
++				"</tr>" +
++				"</table>";
++			allDayTable = $(s).appendTo(slotLayer);
++			allDayRow = allDayTable.find('tr');
++			
++			dayBind(allDayRow.find('td'));
++			
++			axisFirstCells = axisFirstCells.add(allDayTable.find('th:first'));
++			gutterCells = gutterCells.add(allDayTable.find('th.fc-agenda-gutter'));
++			
++			slotLayer.append(
++				"<div class='fc-agenda-divider " + headerClass + "'>" +
++				"<div class='fc-agenda-divider-inner'/>" +
++				"</div>"
++			);
++			
++		}else{
++		
++			daySegmentContainer = $([]); // in jQuery 1.4, we can just do $()
++		
++		}
++		
++		slotScroller =
++			$("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>")
++				.appendTo(slotLayer);
++				
++		slotContent =
++			$("<div style='position:relative;width:100%;overflow:hidden'/>")
++				.appendTo(slotScroller);
++				
++		slotSegmentContainer =
++			$("<div style='position:absolute;z-index:8;top:0;left:0'/>")
++				.appendTo(slotContent);
++		
++		s =
++			"<table class='fc-agenda-slots' style='width:100%' cellspacing='0'>" +
++			"<tbody>";
++		d = zeroDate();
++		maxd = addMinutes(cloneDate(d), maxMinute);
++		addMinutes(d, minMinute);
++		slotCnt = 0;
++		for (i=0; d < maxd; i++) {
++			minutes = d.getMinutes();
++			s +=
++				"<tr class='fc-slot" + i + ' ' + (!minutes ? '' : 'fc-minor') + "'>" +
++				"<th class='fc-agenda-axis " + headerClass + "'>" +
++				((!slotNormal || !minutes) ? formatDate(d, opt('axisFormat')) : ' ') +
++				"</th>" +
++				"<td class='" + contentClass + "'>" +
++				"<div style='position:relative'> </div>" +
++				"</td>" +
++				"</tr>";
++			addMinutes(d, opt('slotMinutes'));
++			slotCnt++;
++		}
++		s +=
++			"</tbody>" +
++			"</table>";
++		slotTable = $(s).appendTo(slotContent);
++		slotTableFirstInner = slotTable.find('div:first');
++		
++		slotBind(slotTable.find('td'));
++		
++		axisFirstCells = axisFirstCells.add(slotTable.find('th:first'));
++	}
++	
++	
++	
++	function updateCells() {
++		var i;
++		var headCell;
++		var bodyCell;
++		var date;
++		var today = clearTime(new Date());
++
++		if (showWeekNumbers) {
++			var weekText = formatDate(colDate(0), weekNumberFormat);
++			if (rtl) {
++				weekText = weekText + weekNumberTitle;
++			}
++			else {
++				weekText = weekNumberTitle + weekText;
++			}
++			dayHead.find('.fc-week-number').text(weekText);
++		}
++
++		for (i=0; i<colCnt; i++) {
++			date = colDate(i);
++			headCell = dayHeadCells.eq(i);
++			headCell.html(formatDate(date, colFormat));
++			bodyCell = dayBodyCells.eq(i);
++			if (+date == +today) {
++				bodyCell.addClass(tm + '-state-highlight fc-today');
++			}else{
++				bodyCell.removeClass(tm + '-state-highlight fc-today');
++			}
++			setDayID(headCell.add(bodyCell), date);
++		}
++	}
++	
++	
++	
++	function setHeight(height, dateChanged) {
++		if (height === undefined) {
++			height = viewHeight;
++		}
++		viewHeight = height;
++		slotTopCache = {};
++	
++		var headHeight = dayBody.position().top;
++		var allDayHeight = slotScroller.position().top; // including divider
++		var bodyHeight = Math.min( // total body height, including borders
++			height - headHeight,   // when scrollbars
++			slotTable.height() + allDayHeight + 1 // when no scrollbars. +1 for bottom border
++		);
++		
++		dayBodyFirstCellStretcher
++			.height(bodyHeight - vsides(dayBodyFirstCell));
++		
++		slotLayer.css('top', headHeight);
++		
++		slotScroller.height(bodyHeight - allDayHeight - 1);
++		
++		slotHeight = slotTableFirstInner.height() + 1; // +1 for border
++
++		snapRatio = opt('slotMinutes') / snapMinutes;
++		snapHeight = slotHeight / snapRatio;
++		
++		if (dateChanged) {
++			resetScroll();
++		}
++	}
++	
++	
++	
++	function setWidth(width) {
++		viewWidth = width;
++		colContentPositions.clear();
++		
++		axisWidth = 0;
++		setOuterWidth(
++			axisFirstCells
++				.width('')
++				.each(function(i, _cell) {
++					axisWidth = Math.max(axisWidth, $(_cell).outerWidth());
++				}),
++			axisWidth
++		);
++		
++		var slotTableWidth = slotScroller[0].clientWidth; // needs to be done after axisWidth (for IE7)
++		//slotTable.width(slotTableWidth);
++		
++		gutterWidth = slotScroller.width() - slotTableWidth;
++		if (gutterWidth) {
++			setOuterWidth(gutterCells, gutterWidth);
++			gutterCells
++				.show()
++				.prev()
++				.removeClass('fc-last');
++		}else{
++			gutterCells
++				.hide()
++				.prev()
++				.addClass('fc-last');
++		}
++		
++		colWidth = Math.floor((slotTableWidth - axisWidth) / colCnt);
++		setOuterWidth(dayHeadCells.slice(0, -1), colWidth);
++	}
++	
++
++
++	function resetScroll() {
++		var d0 = zeroDate();
++		var scrollDate = cloneDate(d0);
++		scrollDate.setHours(opt('firstHour'));
++		var top = timePosition(d0, scrollDate) + 1; // +1 for the border
++		function scroll() {
++			slotScroller.scrollTop(top);
++		}
++		scroll();
++		setTimeout(scroll, 0); // overrides any previous scroll state made by the browser
++	}
++	
++	
++	function beforeHide() {
++		savedScrollTop = slotScroller.scrollTop();
++	}
++	
++	
++	function afterShow() {
++		slotScroller.scrollTop(savedScrollTop);
++	}
++	
++	
++	
++	/* Slot/Day clicking and binding
++	-----------------------------------------------------------------------*/
++	
++
++	function dayBind(cells) {
++		cells.click(slotClick)
++			.mousedown(daySelectionMousedown);
++	}
++
++
++	function slotBind(cells) {
++		cells.click(slotClick)
++			.mousedown(slotSelectionMousedown);
++	}
++	
++	
++	function slotClick(ev) {
++		if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick
++			var col = Math.min(colCnt-1, Math.floor((ev.pageX - dayTable.offset().left - axisWidth) / colWidth));
++			var date = colDate(col);
++			var rowMatch = this.parentNode.className.match(/fc-slot(\d+)/); // TODO: maybe use data
++			if (rowMatch) {
++				var mins = parseInt(rowMatch[1]) * opt('slotMinutes');
++				var hours = Math.floor(mins/60);
++				date.setHours(hours);
++				date.setMinutes(mins%60 + minMinute);
++				trigger('dayClick', dayBodyCells[col], date, false, ev);
++			}else{
++				trigger('dayClick', dayBodyCells[col], date, true, ev);
++			}
++		}
++	}
++	
++	
++	
++	/* Semi-transparent Overlay Helpers
++	-----------------------------------------------------*/
++	
++
++	function renderDayOverlay(startDate, endDate, refreshCoordinateGrid) { // endDate is exclusive
++		if (refreshCoordinateGrid) {
++			coordinateGrid.build();
++		}
++		var visStart = cloneDate(t.visStart);
++		var startCol, endCol;
++		if (rtl) {
++			startCol = dayDiff(endDate, visStart)*dis+dit+1;
++			endCol = dayDiff(startDate, visStart)*dis+dit+1;
++		}else{
++			startCol = dayDiff(startDate, visStart);
++			endCol = dayDiff(endDate, visStart);
++		}
++		startCol = Math.max(0, startCol);
++		endCol = Math.min(colCnt, endCol);
++		if (startCol < endCol) {
++			dayBind(
++				renderCellOverlay(0, startCol, 0, endCol-1)
++			);
++		}
++	}
++	
++	
++	function renderCellOverlay(row0, col0, row1, col1) { // only for all-day?
++		var rect = coordinateGrid.rect(row0, col0, row1, col1, slotLayer);
++		return renderOverlay(rect, slotLayer);
++	}
++	
++
++	function renderSlotOverlay(overlayStart, overlayEnd) {
++		var dayStart = cloneDate(t.visStart);
++		var dayEnd = addDays(cloneDate(dayStart), 1);
++		for (var i=0; i<colCnt; i++) {
++			var stretchStart = new Date(Math.max(dayStart, overlayStart));
++			var stretchEnd = new Date(Math.min(dayEnd, overlayEnd));
++			if (stretchStart < stretchEnd) {
++				var col = i*dis+dit;
++				var rect = coordinateGrid.rect(0, col, 0, col, slotContent); // only use it for horizontal coords
++				var top = timePosition(dayStart, stretchStart);
++				var bottom = timePosition(dayStart, stretchEnd);
++				rect.top = top;
++				rect.height = bottom - top;
++				slotBind(
++					renderOverlay(rect, slotContent)
++				);
++			}
++			addDays(dayStart, 1);
++			addDays(dayEnd, 1);
++		}
++	}
++	
++	
++	
++	/* Coordinate Utilities
++	-----------------------------------------------------------------------------*/
++	
++	
++	coordinateGrid = new CoordinateGrid(function(rows, cols) {
++		var e, n, p;
++		dayHeadCells.each(function(i, _e) {
++			e = $(_e);
++			n = e.offset().left;
++			if (i) {
++				p[1] = n;
++			}
++			p = [n];
++			cols[i] = p;
++		});
++		p[1] = n + e.outerWidth();
++		if (opt('allDaySlot')) {
++			e = allDayRow;
++			n = e.offset().top;
++			rows[0] = [n, n+e.outerHeight()];
++		}
++		var slotTableTop = slotContent.offset().top;
++		var slotScrollerTop = slotScroller.offset().top;
++		var slotScrollerBottom = slotScrollerTop + slotScroller.outerHeight();
++		function constrain(n) {
++			return Math.max(slotScrollerTop, Math.min(slotScrollerBottom, n));
++		}
++		for (var i=0; i<slotCnt*snapRatio; i++) { // adapt slot count to increased/decreased selection slot count
++			rows.push([
++				constrain(slotTableTop + snapHeight*i),
++				constrain(slotTableTop + snapHeight*(i+1))
++			]);
++		}
++	});
++	
++	
++	hoverListener = new HoverListener(coordinateGrid);
++	
++	
++	colContentPositions = new HorizontalPositionCache(function(col) {
++		return dayBodyCellInners.eq(col);
++	});
++	
++	
++	function colContentLeft(col) {
++		return colContentPositions.left(col);
++	}
++	
++	
++	function colContentRight(col) {
++		return colContentPositions.right(col);
++	}
++	
++	
++	
++	
++	function dateCell(date) { // "cell" terminology is now confusing
++		return {
++			row: Math.floor(dayDiff(date, t.visStart) / 7),
++			col: dayOfWeekCol(date.getDay())
++		};
++	}
++	
++	
++	function cellDate(cell) {
++		var d = colDate(cell.col);
++		var slotIndex = cell.row;
++		if (opt('allDaySlot')) {
++			slotIndex--;
++		}
++		if (slotIndex >= 0) {
++			addMinutes(d, minMinute + slotIndex * snapMinutes);
++		}
++		return d;
++	}
++	
++	
++	function colDate(col) { // returns dates with 00:00:00
++		return addDays(cloneDate(t.visStart), col*dis+dit);
++	}
++	
++	
++	function cellIsAllDay(cell) {
++		return opt('allDaySlot') && !cell.row;
++	}
++	
++	
++	function dayOfWeekCol(dayOfWeek) {
++		return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt)*dis+dit;
++	}
++	
++	
++	
++	
++	// get the Y coordinate of the given time on the given day (both Date objects)
++	function timePosition(day, time) { // both date objects. day holds 00:00 of current day
++		day = cloneDate(day, true);
++		if (time < addMinutes(cloneDate(day), minMinute)) {
++			return 0;
++		}
++		if (time >= addMinutes(cloneDate(day), maxMinute)) {
++			return slotTable.height();
++		}
++		var slotMinutes = opt('slotMinutes'),
++			minutes = time.getHours()*60 + time.getMinutes() - minMinute,
++			slotI = Math.floor(minutes / slotMinutes),
++			slotTop = slotTopCache[slotI];
++		if (slotTop === undefined) {
++			slotTop = slotTopCache[slotI] = slotTable.find('tr:eq(' + slotI + ') td div')[0].offsetTop; //.position().top; // need this optimization???
++		}
++		return Math.max(0, Math.round(
++			slotTop - 1 + slotHeight * ((minutes % slotMinutes) / slotMinutes)
++		));
++	}
++	
++	
++	function allDayBounds() {
++		return {
++			left: axisWidth,
++			right: viewWidth - gutterWidth
++		}
++	}
++	
++	
++	function getAllDayRow(index) {
++		return allDayRow;
++	}
++	
++	
++	function defaultEventEnd(event) {
++		var start = cloneDate(event.start);
++		if (event.allDay) {
++			return start;
++		}
++		return addMinutes(start, opt('defaultEventMinutes'));
++	}
++	
++	
++	
++	/* Selection
++	---------------------------------------------------------------------------------*/
++	
++	
++	function defaultSelectionEnd(startDate, allDay) {
++		if (allDay) {
++			return cloneDate(startDate);
++		}
++		return addMinutes(cloneDate(startDate), opt('slotMinutes'));
++	}
++	
++	
++	function renderSelection(startDate, endDate, allDay) { // only for all-day
++		if (allDay) {
++			if (opt('allDaySlot')) {
++				renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true);
++			}
++		}else{
++			renderSlotSelection(startDate, endDate);
++		}
++	}
++	
++	
++	function renderSlotSelection(startDate, endDate) {
++		var helperOption = opt('selectHelper');
++		coordinateGrid.build();
++		if (helperOption) {
++			var col = dayDiff(startDate, t.visStart) * dis + dit;
++			if (col >= 0 && col < colCnt) { // only works when times are on same day
++				var rect = coordinateGrid.rect(0, col, 0, col, slotContent); // only for horizontal coords
++				var top = timePosition(startDate, startDate);
++				var bottom = timePosition(startDate, endDate);
++				if (bottom > top) { // protect against selections that are entirely before or after visible range
++					rect.top = top;
++					rect.height = bottom - top;
++					rect.left += 2;
++					rect.width -= 5;
++					if ($.isFunction(helperOption)) {
++						var helperRes = helperOption(startDate, endDate);
++						if (helperRes) {
++							rect.position = 'absolute';
++							rect.zIndex = 8;
++							selectionHelper = $(helperRes)
++								.css(rect)
++								.appendTo(slotContent);
++						}
++					}else{
++						rect.isStart = true; // conside rect a "seg" now
++						rect.isEnd = true;   //
++						selectionHelper = $(slotSegHtml(
++							{
++								title: '',
++								start: startDate,
++								end: endDate,
++								className: ['fc-select-helper'],
++								editable: false
++							},
++							rect
++						));
++						selectionHelper.css('opacity', opt('dragOpacity'));
++					}
++					if (selectionHelper) {
++						slotBind(selectionHelper);
++						slotContent.append(selectionHelper);
++						setOuterWidth(selectionHelper, rect.width, true); // needs to be after appended
++						setOuterHeight(selectionHelper, rect.height, true);
++					}
++				}
++			}
++		}else{
++			renderSlotOverlay(startDate, endDate);
++		}
++	}
++	
++	
++	function clearSelection() {
++		clearOverlays();
++		if (selectionHelper) {
++			selectionHelper.remove();
++			selectionHelper = null;
++		}
++	}
++	
++	
++	function slotSelectionMousedown(ev) {
++		if (ev.which == 1 && opt('selectable')) { // ev.which==1 means left mouse button
++			unselect(ev);
++			var dates;
++			hoverListener.start(function(cell, origCell) {
++				clearSelection();
++				if (cell && cell.col == origCell.col && !cellIsAllDay(cell)) {
++					var d1 = cellDate(origCell);
++					var d2 = cellDate(cell);
++					dates = [
++						d1,
++						addMinutes(cloneDate(d1), snapMinutes), // calculate minutes depending on selection slot minutes 
++						d2,
++						addMinutes(cloneDate(d2), snapMinutes)
++					].sort(cmp);
++					renderSlotSelection(dates[0], dates[3]);
++				}else{
++					dates = null;
++				}
++			}, ev);
++			$(document).one('mouseup', function(ev) {
++				hoverListener.stop();
++				if (dates) {
++					if (+dates[0] == +dates[1]) {
++						reportDayClick(dates[0], false, ev);
++					}
++					reportSelection(dates[0], dates[3], false, ev);
++				}
++			});
++		}
++	}
++	
++	
++	function reportDayClick(date, allDay, ev) {
++		trigger('dayClick', dayBodyCells[dayOfWeekCol(date.getDay())], date, allDay, ev);
++	}
++	
++	
++	
++	/* External Dragging
++	--------------------------------------------------------------------------------*/
++	
++	
++	function dragStart(_dragElement, ev, ui) {
++		hoverListener.start(function(cell) {
++			clearOverlays();
++			if (cell) {
++				if (cellIsAllDay(cell)) {
++					renderCellOverlay(cell.row, cell.col, cell.row, cell.col);
++				}else{
++					var d1 = cellDate(cell);
++					var d2 = addMinutes(cloneDate(d1), opt('defaultEventMinutes'));
++					renderSlotOverlay(d1, d2);
++				}
++			}
++		}, ev);
++	}
++	
++	
++	function dragStop(_dragElement, ev, ui) {
++		var cell = hoverListener.stop();
++		clearOverlays();
++		if (cell) {
++			trigger('drop', _dragElement, cellDate(cell), cellIsAllDay(cell), ev, ui);
++		}
++	}
++
++
++}
++
++;;
++
++function AgendaEventRenderer() {
++	var t = this;
++	
++	
++	// exports
++	t.renderEvents = renderEvents;
++	t.compileDaySegs = compileDaySegs; // for DayEventRenderer
++	t.clearEvents = clearEvents;
++	t.slotSegHtml = slotSegHtml;
++	t.bindDaySeg = bindDaySeg;
++	
++	
++	// imports
++	DayEventRenderer.call(t);
++	var opt = t.opt;
++	var trigger = t.trigger;
++	//var setOverflowHidden = t.setOverflowHidden;
++	var isEventDraggable = t.isEventDraggable;
++	var isEventResizable = t.isEventResizable;
++	var eventEnd = t.eventEnd;
++	var reportEvents = t.reportEvents;
++	var reportEventClear = t.reportEventClear;
++	var eventElementHandlers = t.eventElementHandlers;
++	var setHeight = t.setHeight;
++	var getDaySegmentContainer = t.getDaySegmentContainer;
++	var getSlotSegmentContainer = t.getSlotSegmentContainer;
++	var getHoverListener = t.getHoverListener;
++	var getMaxMinute = t.getMaxMinute;
++	var getMinMinute = t.getMinMinute;
++	var timePosition = t.timePosition;
++	var colContentLeft = t.colContentLeft;
++	var colContentRight = t.colContentRight;
++	var renderDaySegs = t.renderDaySegs;
++	var resizableDayEvent = t.resizableDayEvent; // TODO: streamline binding architecture
++	var getColCnt = t.getColCnt;
++	var getColWidth = t.getColWidth;
++	var getSnapHeight = t.getSnapHeight;
++	var getSnapMinutes = t.getSnapMinutes;
++	var getBodyContent = t.getBodyContent;
++	var reportEventElement = t.reportEventElement;
++	var showEvents = t.showEvents;
++	var hideEvents = t.hideEvents;
++	var eventDrop = t.eventDrop;
++	var eventResize = t.eventResize;
++	var renderDayOverlay = t.renderDayOverlay;
++	var clearOverlays = t.clearOverlays;
++	var calendar = t.calendar;
++	var formatDate = calendar.formatDate;
++	var formatDates = calendar.formatDates;
++	
++	
++	
++	/* Rendering
++	----------------------------------------------------------------------------*/
++	
++
++	function renderEvents(events, modifiedEventId) {
++		reportEvents(events);
++		var i, len=events.length,
++			dayEvents=[],
++			slotEvents=[];
++		for (i=0; i<len; i++) {
++			if (events[i].allDay) {
++				dayEvents.push(events[i]);
++			}else{
++				slotEvents.push(events[i]);
++			}
++		}
++		if (opt('allDaySlot')) {
++			renderDaySegs(compileDaySegs(dayEvents), modifiedEventId);
++			setHeight(); // no params means set to viewHeight
++		}
++		renderSlotSegs(compileSlotSegs(slotEvents), modifiedEventId);
++		trigger('eventAfterAllRender');
++	}
++	
++	
++	function clearEvents() {
++		reportEventClear();
++		getDaySegmentContainer().empty();
++		getSlotSegmentContainer().empty();
++	}
++	
++	
++	function compileDaySegs(events) {
++		var levels = stackSegs(sliceSegs(events, $.map(events, exclEndDay), t.visStart, t.visEnd)),
++			i, levelCnt=levels.length, level,
++			j, seg,
++			segs=[];
++		for (i=0; i<levelCnt; i++) {
++			level = levels[i];
++			for (j=0; j<level.length; j++) {
++				seg = level[j];
++				seg.row = 0;
++				seg.level = i; // not needed anymore
++				segs.push(seg);
++			}
++		}
++		return segs;
++	}
++	
++	
++	function compileSlotSegs(events) {
++		var colCnt = getColCnt(),
++			minMinute = getMinMinute(),
++			maxMinute = getMaxMinute(),
++			d = addMinutes(cloneDate(t.visStart), minMinute),
++			visEventEnds = $.map(events, slotEventEnd),
++			i, col,
++			j, level,
++			k, seg,
++			segs=[];
++		for (i=0; i<colCnt; i++) {
++			col = stackSegs(sliceSegs(events, visEventEnds, d, addMinutes(cloneDate(d), maxMinute-minMinute)));
++			countForwardSegs(col);
++			for (j=0; j<col.length; j++) {
++				level = col[j];
++				for (k=0; k<level.length; k++) {
++					seg = level[k];
++					seg.col = i;
++					seg.level = j;
++					segs.push(seg);
++				}
++			}
++			addDays(d, 1, true);
++		}
++		return segs;
++	}
++	
++	
++	function slotEventEnd(event) {
++		if (event.end) {
++			return cloneDate(event.end);
++		}else{
++			return addMinutes(cloneDate(event.start), opt('defaultEventMinutes'));
++		}
++	}
++	
++	
++	// renders events in the 'time slots' at the bottom
++	
++	function renderSlotSegs(segs, modifiedEventId) {
++	
++		var i, segCnt=segs.length, seg,
++			event,
++			classes,
++			top, bottom,
++			colI, levelI, forward,
++			leftmost,
++			availWidth,
++			outerWidth,
++			left,
++			html='',
++			eventElements,
++			eventElement,
++			triggerRes,
++			vsideCache={},
++			hsideCache={},
++			key, val,
++			titleElement,
++			height,
++			slotSegmentContainer = getSlotSegmentContainer(),
++			rtl, dis, dit,
++			colCnt = getColCnt();
++			
++		if (rtl = opt('isRTL')) {
++			dis = -1;
++			dit = colCnt - 1;
++		}else{
++			dis = 1;
++			dit = 0;
++		}
++			
++		// calculate position/dimensions, create html
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			event = seg.event;
++			top = timePosition(seg.start, seg.start);
++			bottom = timePosition(seg.start, seg.end);
++			colI = seg.col;
++			levelI = seg.level;
++			forward = seg.forward || 0;
++			leftmost = colContentLeft(colI*dis + dit);
++			availWidth = colContentRight(colI*dis + dit) - leftmost;
++			availWidth = Math.min(availWidth-6, availWidth*.95); // TODO: move this to CSS
++			if (levelI) {
++				// indented and thin
++				outerWidth = availWidth / (levelI + forward + 1);
++			}else{
++				if (forward) {
++					// moderately wide, aligned left still
++					outerWidth = ((availWidth / (forward + 1)) - (12/2)) * 2; // 12 is the predicted width of resizer =
++				}else{
++					// can be entire width, aligned left
++					outerWidth = availWidth;
++				}
++			}
++			left = leftmost +                                  // leftmost possible
++				(availWidth / (levelI + forward + 1) * levelI) // indentation
++				* dis + (rtl ? availWidth - outerWidth : 0);   // rtl
++			seg.top = top;
++			seg.left = left;
++			seg.outerWidth = outerWidth;
++			seg.outerHeight = bottom - top;
++			html += slotSegHtml(event, seg);
++		}
++		slotSegmentContainer[0].innerHTML = html; // faster than html()
++		eventElements = slotSegmentContainer.children();
++		
++		// retrieve elements, run through eventRender callback, bind event handlers
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			event = seg.event;
++			eventElement = $(eventElements[i]); // faster than eq()
++			triggerRes = trigger('eventRender', event, event, eventElement);
++			if (triggerRes === false) {
++				eventElement.remove();
++			}else{
++				if (triggerRes && triggerRes !== true) {
++					eventElement.remove();
++					eventElement = $(triggerRes)
++						.css({
++							position: 'absolute',
++							top: seg.top,
++							left: seg.left
++						})
++						.appendTo(slotSegmentContainer);
++				}
++				seg.element = eventElement;
++				if (event._id === modifiedEventId) {
++					bindSlotSeg(event, eventElement, seg);
++				}else{
++					eventElement[0]._fci = i; // for lazySegBind
++				}
++				reportEventElement(event, eventElement);
++			}
++		}
++		
++		lazySegBind(slotSegmentContainer, segs, bindSlotSeg);
++		
++		// record event sides and title positions
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			if (eventElement = seg.element) {
++				val = vsideCache[key = seg.key = cssKey(eventElement[0])];
++				seg.vsides = val === undefined ? (vsideCache[key] = vsides(eventElement, true)) : val;
++				val = hsideCache[key];
++				seg.hsides = val === undefined ? (hsideCache[key] = hsides(eventElement, true)) : val;
++				titleElement = eventElement.find('.fc-event-title');
++				if (titleElement.length) {
++					seg.contentTop = titleElement[0].offsetTop;
++				}
++			}
++		}
++		
++		// set all positions/dimensions at once
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			if (eventElement = seg.element) {
++				eventElement[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px';
++				height = Math.max(0, seg.outerHeight - seg.vsides);
++				eventElement[0].style.height = height + 'px';
++				event = seg.event;
++				if (seg.contentTop !== undefined && height - seg.contentTop < 10) {
++					// not enough room for title, put it in the time (TODO: maybe make both display:inline instead)
++					eventElement.find('div.fc-event-time')
++						.text(formatDate(event.start, opt('timeFormat')) + ' - ' + event.title);
++					eventElement.find('div.fc-event-title')
++						.remove();
++				}
++				trigger('eventAfterRender', event, event, eventElement);
++			}
++		}
++					
++	}
++	
++	
++	function slotSegHtml(event, seg) {
++		var html = "<";
++		var url = event.url;
++		var skinCss = getSkinCss(event, opt);
++		var classes = ['fc-event', 'fc-event-vert'];
++		if (isEventDraggable(event)) {
++			classes.push('fc-event-draggable');
++		}
++		if (seg.isStart) {
++			classes.push('fc-event-start');
++		}
++		if (seg.isEnd) {
++			classes.push('fc-event-end');
++		}
++		classes = classes.concat(event.className);
++		if (event.source) {
++			classes = classes.concat(event.source.className || []);
++		}
++		if (url) {
++			html += "a href='" + htmlEscape(event.url) + "'";
++		}else{
++			html += "div";
++		}
++		html +=
++			" class='" + classes.join(' ') + "'" +
++			" style='position:absolute;z-index:8;top:" + seg.top + "px;left:" + seg.left + "px;" + skinCss + "'" +
++			">" +
++			"<div class='fc-event-inner'>" +
++			"<div class='fc-event-time'>" +
++			htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
++			"</div>" +
++			"<div class='fc-event-title'>" +
++			htmlEscape(event.title) +
++			"</div>" +
++			"</div>" +
++			"<div class='fc-event-bg'></div>";
++		if (seg.isEnd && isEventResizable(event)) {
++			html +=
++				"<div class='ui-resizable-handle ui-resizable-s'>=</div>";
++		}
++		html +=
++			"</" + (url ? "a" : "div") + ">";
++		return html;
++	}
++	
++	
++	function bindDaySeg(event, eventElement, seg) {
++		if (isEventDraggable(event)) {
++			draggableDayEvent(event, eventElement, seg.isStart);
++		}
++		if (seg.isEnd && isEventResizable(event)) {
++			resizableDayEvent(event, eventElement, seg);
++		}
++		eventElementHandlers(event, eventElement);
++			// needs to be after, because resizableDayEvent might stopImmediatePropagation on click
++	}
++	
++	
++	function bindSlotSeg(event, eventElement, seg) {
++		var timeElement = eventElement.find('div.fc-event-time');
++		if (isEventDraggable(event)) {
++			draggableSlotEvent(event, eventElement, timeElement);
++		}
++		if (seg.isEnd && isEventResizable(event)) {
++			resizableSlotEvent(event, eventElement, timeElement);
++		}
++		eventElementHandlers(event, eventElement);
++	}
++	
++	
++	
++	/* Dragging
++	-----------------------------------------------------------------------------------*/
++	
++	
++	// when event starts out FULL-DAY
++	
++	function draggableDayEvent(event, eventElement, isStart) {
++		var origWidth;
++		var revert;
++		var allDay=true;
++		var dayDelta;
++		var dis = opt('isRTL') ? -1 : 1;
++		var hoverListener = getHoverListener();
++		var colWidth = getColWidth();
++		var snapHeight = getSnapHeight();
++		var snapMinutes = getSnapMinutes();
++		var minMinute = getMinMinute();
++		eventElement.draggable({
++			zIndex: 9,
++			opacity: opt('dragOpacity', 'month'), // use whatever the month view was using
++			revertDuration: opt('dragRevertDuration'),
++			start: function(ev, ui) {
++				trigger('eventDragStart', eventElement, event, ev, ui);
++				hideEvents(event, eventElement);
++				origWidth = eventElement.width();
++				hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
++					clearOverlays();
++					if (cell) {
++						//setOverflowHidden(true);
++						revert = false;
++						dayDelta = colDelta * dis;
++						if (!cell.row) {
++							// on full-days
++							renderDayOverlay(
++								addDays(cloneDate(event.start), dayDelta),
++								addDays(exclEndDay(event), dayDelta)
++							);
++							resetElement();
++						}else{
++							// mouse is over bottom slots
++							if (isStart) {
++								if (allDay) {
++									// convert event to temporary slot-event
++									eventElement.width(colWidth - 10); // don't use entire width
++									setOuterHeight(
++										eventElement,
++										snapHeight * Math.round(
++											(event.end ? ((event.end - event.start) / MINUTE_MS) : opt('defaultEventMinutes')) /
++												snapMinutes
++										)
++									);
++									eventElement.draggable('option', 'grid', [colWidth, 1]);
++									allDay = false;
++								}
++							}else{
++								revert = true;
++							}
++						}
++						revert = revert || (allDay && !dayDelta);
++					}else{
++						resetElement();
++						//setOverflowHidden(false);
++						revert = true;
++					}
++					eventElement.draggable('option', 'revert', revert);
++				}, ev, 'drag');
++			},
++			stop: function(ev, ui) {
++				hoverListener.stop();
++				clearOverlays();
++				trigger('eventDragStop', eventElement, event, ev, ui);
++				if (revert) {
++					// hasn't moved or is out of bounds (draggable has already reverted)
++					resetElement();
++					eventElement.css('filter', ''); // clear IE opacity side-effects
++					showEvents(event, eventElement);
++				}else{
++					// changed!
++					var minuteDelta = 0;
++					if (!allDay) {
++						minuteDelta = Math.round((eventElement.offset().top - getBodyContent().offset().top) / snapHeight)
++							* snapMinutes
++							+ minMinute
++							- (event.start.getHours() * 60 + event.start.getMinutes());
++					}
++					eventDrop(this, event, dayDelta, minuteDelta, allDay, ev, ui);
++				}
++				//setOverflowHidden(false);
++			}
++		});
++		function resetElement() {
++			if (!allDay) {
++				eventElement
++					.width(origWidth)
++					.height('')
++					.draggable('option', 'grid', null);
++				allDay = true;
++			}
++		}
++	}
++	
++	
++	// when event starts out IN TIMESLOTS
++	
++	function draggableSlotEvent(event, eventElement, timeElement) {
++		var origPosition;
++		var allDay=false;
++		var dayDelta;
++		var minuteDelta;
++		var prevMinuteDelta;
++		var dis = opt('isRTL') ? -1 : 1;
++		var hoverListener = getHoverListener();
++		var colCnt = getColCnt();
++		var colWidth = getColWidth();
++		var snapHeight = getSnapHeight();
++		var snapMinutes = getSnapMinutes();
++		eventElement.draggable({
++			zIndex: 9,
++			scroll: false,
++			grid: [colWidth, snapHeight],
++			axis: colCnt==1 ? 'y' : false,
++			opacity: opt('dragOpacity'),
++			revertDuration: opt('dragRevertDuration'),
++			start: function(ev, ui) {
++				trigger('eventDragStart', eventElement, event, ev, ui);
++				hideEvents(event, eventElement);
++				origPosition = eventElement.position();
++				minuteDelta = prevMinuteDelta = 0;
++				hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
++					eventElement.draggable('option', 'revert', !cell);
++					clearOverlays();
++					if (cell) {
++						dayDelta = colDelta * dis;
++						if (opt('allDaySlot') && !cell.row) {
++							// over full days
++							if (!allDay) {
++								// convert to temporary all-day event
++								allDay = true;
++								timeElement.hide();
++								eventElement.draggable('option', 'grid', null);
++							}
++							renderDayOverlay(
++								addDays(cloneDate(event.start), dayDelta),
++								addDays(exclEndDay(event), dayDelta)
++							);
++						}else{
++							// on slots
++							resetElement();
++						}
++					}
++				}, ev, 'drag');
++			},
++			drag: function(ev, ui) {
++				minuteDelta = Math.round((ui.position.top - origPosition.top) / snapHeight) * snapMinutes;
++				if (minuteDelta != prevMinuteDelta) {
++					if (!allDay) {
++						updateTimeText(minuteDelta);
++					}
++					prevMinuteDelta = minuteDelta;
++				}
++			},
++			stop: function(ev, ui) {
++				var cell = hoverListener.stop();
++				clearOverlays();
++				trigger('eventDragStop', eventElement, event, ev, ui);
++				if (cell && (dayDelta || minuteDelta || allDay)) {
++					// changed!
++					eventDrop(this, event, dayDelta, allDay ? 0 : minuteDelta, allDay, ev, ui);
++				}else{
++					// either no change or out-of-bounds (draggable has already reverted)
++					resetElement();
++					eventElement.css('filter', ''); // clear IE opacity side-effects
++					eventElement.css(origPosition); // sometimes fast drags make event revert to wrong position
++					updateTimeText(0);
++					showEvents(event, eventElement);
++				}
++			}
++		});
++		function updateTimeText(minuteDelta) {
++			var newStart = addMinutes(cloneDate(event.start), minuteDelta);
++			var newEnd;
++			if (event.end) {
++				newEnd = addMinutes(cloneDate(event.end), minuteDelta);
++			}
++			timeElement.text(formatDates(newStart, newEnd, opt('timeFormat')));
++		}
++		function resetElement() {
++			// convert back to original slot-event
++			if (allDay) {
++				timeElement.css('display', ''); // show() was causing display=inline
++				eventElement.draggable('option', 'grid', [colWidth, snapHeight]);
++				allDay = false;
++			}
++		}
++	}
++	
++	
++	
++	/* Resizing
++	--------------------------------------------------------------------------------------*/
++	
++	
++	function resizableSlotEvent(event, eventElement, timeElement) {
++		var snapDelta, prevSnapDelta;
++		var snapHeight = getSnapHeight();
++		var snapMinutes = getSnapMinutes();
++		eventElement.resizable({
++			handles: {
++				s: '.ui-resizable-handle'
++			},
++			grid: snapHeight,
++			start: function(ev, ui) {
++				snapDelta = prevSnapDelta = 0;
++				hideEvents(event, eventElement);
++				eventElement.css('z-index', 9);
++				trigger('eventResizeStart', this, event, ev, ui);
++			},
++			resize: function(ev, ui) {
++				// don't rely on ui.size.height, doesn't take grid into account
++				snapDelta = Math.round((Math.max(snapHeight, eventElement.height()) - ui.originalSize.height) / snapHeight);
++				if (snapDelta != prevSnapDelta) {
++					timeElement.text(
++						formatDates(
++							event.start,
++							(!snapDelta && !event.end) ? null : // no change, so don't display time range
++								addMinutes(eventEnd(event), snapMinutes*snapDelta),
++							opt('timeFormat')
++						)
++					);
++					prevSnapDelta = snapDelta;
++				}
++			},
++			stop: function(ev, ui) {
++				trigger('eventResizeStop', this, event, ev, ui);
++				if (snapDelta) {
++					eventResize(this, event, 0, snapMinutes*snapDelta, ev, ui);
++				}else{
++					eventElement.css('z-index', 8);
++					showEvents(event, eventElement);
++					// BUG: if event was really short, need to put title back in span
++				}
++			}
++		});
++	}
++	
++
++}
++
++
++function countForwardSegs(levels) {
++	var i, j, k, level, segForward, segBack;
++	for (i=levels.length-1; i>0; i--) {
++		level = levels[i];
++		for (j=0; j<level.length; j++) {
++			segForward = level[j];
++			for (k=0; k<levels[i-1].length; k++) {
++				segBack = levels[i-1][k];
++				if (segsCollide(segForward, segBack)) {
++					segBack.forward = Math.max(segBack.forward||0, (segForward.forward||0)+1);
++				}
++			}
++		}
++	}
++}
++
++
++
++;;
++
++
++function View(element, calendar, viewName) {
++	var t = this;
++	
++	
++	// exports
++	t.element = element;
++	t.calendar = calendar;
++	t.name = viewName;
++	t.opt = opt;
++	t.trigger = trigger;
++	//t.setOverflowHidden = setOverflowHidden;
++	t.isEventDraggable = isEventDraggable;
++	t.isEventResizable = isEventResizable;
++	t.reportEvents = reportEvents;
++	t.eventEnd = eventEnd;
++	t.reportEventElement = reportEventElement;
++	t.reportEventClear = reportEventClear;
++	t.eventElementHandlers = eventElementHandlers;
++	t.showEvents = showEvents;
++	t.hideEvents = hideEvents;
++	t.eventDrop = eventDrop;
++	t.eventResize = eventResize;
++	// t.title
++	// t.start, t.end
++	// t.visStart, t.visEnd
++	
++	
++	// imports
++	var defaultEventEnd = t.defaultEventEnd;
++	var normalizeEvent = calendar.normalizeEvent; // in EventManager
++	var reportEventChange = calendar.reportEventChange;
++	
++	
++	// locals
++	var eventsByID = {};
++	var eventElements = [];
++	var eventElementsByID = {};
++	var options = calendar.options;
++	
++	
++	
++	function opt(name, viewNameOverride) {
++		var v = options[name];
++		if (typeof v == 'object') {
++			return smartProperty(v, viewNameOverride || viewName);
++		}
++		return v;
++	}
++
++	
++	function trigger(name, thisObj) {
++		return calendar.trigger.apply(
++			calendar,
++			[name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t])
++		);
++	}
++	
++	
++	/*
++	function setOverflowHidden(bool) {
++		element.css('overflow', bool ? 'hidden' : '');
++	}
++	*/
++	
++	
++	function isEventDraggable(event) {
++		return isEventEditable(event) && !opt('disableDragging');
++	}
++	
++	
++	function isEventResizable(event) { // but also need to make sure the seg.isEnd == true
++		return isEventEditable(event) && !opt('disableResizing');
++	}
++	
++	
++	function isEventEditable(event) {
++		return firstDefined(event.editable, (event.source || {}).editable, opt('editable'));
++	}
++	
++	
++	
++	/* Event Data
++	------------------------------------------------------------------------------*/
++	
++	
++	// report when view receives new events
++	function reportEvents(events) { // events are already normalized at this point
++		eventsByID = {};
++		var i, len=events.length, event;
++		for (i=0; i<len; i++) {
++			event = events[i];
++			if (eventsByID[event._id]) {
++				eventsByID[event._id].push(event);
++			}else{
++				eventsByID[event._id] = [event];
++			}
++		}
++	}
++	
++	
++	// returns a Date object for an event's end
++	function eventEnd(event) {
++		return event.end ? cloneDate(event.end) : defaultEventEnd(event);
++	}
++	
++	
++	
++	/* Event Elements
++	------------------------------------------------------------------------------*/
++	
++	
++	// report when view creates an element for an event
++	function reportEventElement(event, element) {
++		eventElements.push(element);
++		if (eventElementsByID[event._id]) {
++			eventElementsByID[event._id].push(element);
++		}else{
++			eventElementsByID[event._id] = [element];
++		}
++	}
++	
++	
++	function reportEventClear() {
++		eventElements = [];
++		eventElementsByID = {};
++	}
++	
++	
++	// attaches eventClick, eventMouseover, eventMouseout
++	function eventElementHandlers(event, eventElement) {
++		eventElement
++			.click(function(ev) {
++				if (!eventElement.hasClass('ui-draggable-dragging') &&
++					!eventElement.hasClass('ui-resizable-resizing')) {
++						return trigger('eventClick', this, event, ev);
++					}
++			})
++			.hover(
++				function(ev) {
++					trigger('eventMouseover', this, event, ev);
++				},
++				function(ev) {
++					trigger('eventMouseout', this, event, ev);
++				}
++			);
++		// TODO: don't fire eventMouseover/eventMouseout *while* dragging is occuring (on subject element)
++		// TODO: same for resizing
++	}
++	
++	
++	function showEvents(event, exceptElement) {
++		eachEventElement(event, exceptElement, 'show');
++	}
++	
++	
++	function hideEvents(event, exceptElement) {
++		eachEventElement(event, exceptElement, 'hide');
++	}
++	
++	
++	function eachEventElement(event, exceptElement, funcName) {
++		var elements = eventElementsByID[event._id],
++			i, len = elements.length;
++		for (i=0; i<len; i++) {
++			if (!exceptElement || elements[i][0] != exceptElement[0]) {
++				elements[i][funcName]();
++			}
++		}
++	}
++	
++	
++	
++	/* Event Modification Reporting
++	---------------------------------------------------------------------------------*/
++	
++	
++	function eventDrop(e, event, dayDelta, minuteDelta, allDay, ev, ui) {
++		var oldAllDay = event.allDay;
++		var eventId = event._id;
++		moveEvents(eventsByID[eventId], dayDelta, minuteDelta, allDay);
++		trigger(
++			'eventDrop',
++			e,
++			event,
++			dayDelta,
++			minuteDelta,
++			allDay,
++			function() {
++				// TODO: investigate cases where this inverse technique might not work
++				moveEvents(eventsByID[eventId], -dayDelta, -minuteDelta, oldAllDay);
++				reportEventChange(eventId);
++			},
++			ev,
++			ui
++		);
++		reportEventChange(eventId);
++	}
++	
++	
++	function eventResize(e, event, dayDelta, minuteDelta, ev, ui) {
++		var eventId = event._id;
++		elongateEvents(eventsByID[eventId], dayDelta, minuteDelta);
++		trigger(
++			'eventResize',
++			e,
++			event,
++			dayDelta,
++			minuteDelta,
++			function() {
++				// TODO: investigate cases where this inverse technique might not work
++				elongateEvents(eventsByID[eventId], -dayDelta, -minuteDelta);
++				reportEventChange(eventId);
++			},
++			ev,
++			ui
++		);
++		reportEventChange(eventId);
++	}
++	
++	
++	
++	/* Event Modification Math
++	---------------------------------------------------------------------------------*/
++	
++	
++	function moveEvents(events, dayDelta, minuteDelta, allDay) {
++		minuteDelta = minuteDelta || 0;
++		for (var e, len=events.length, i=0; i<len; i++) {
++			e = events[i];
++			if (allDay !== undefined) {
++				e.allDay = allDay;
++			}
++			addMinutes(addDays(e.start, dayDelta, true), minuteDelta);
++			if (e.end) {
++				e.end = addMinutes(addDays(e.end, dayDelta, true), minuteDelta);
++			}
++			normalizeEvent(e, options);
++		}
++	}
++	
++	
++	function elongateEvents(events, dayDelta, minuteDelta) {
++		minuteDelta = minuteDelta || 0;
++		for (var e, len=events.length, i=0; i<len; i++) {
++			e = events[i];
++			e.end = addMinutes(addDays(eventEnd(e), dayDelta, true), minuteDelta);
++			normalizeEvent(e, options);
++		}
++	}
++	
++
++}
++
++;;
++
++function DayEventRenderer() {
++	var t = this;
++
++	
++	// exports
++	t.renderDaySegs = renderDaySegs;
++	t.resizableDayEvent = resizableDayEvent;
++	
++	
++	// imports
++	var opt = t.opt;
++	var trigger = t.trigger;
++	var isEventDraggable = t.isEventDraggable;
++	var isEventResizable = t.isEventResizable;
++	var eventEnd = t.eventEnd;
++	var reportEventElement = t.reportEventElement;
++	var showEvents = t.showEvents;
++	var hideEvents = t.hideEvents;
++	var eventResize = t.eventResize;
++	var getRowCnt = t.getRowCnt;
++	var getColCnt = t.getColCnt;
++	var getColWidth = t.getColWidth;
++	var allDayRow = t.allDayRow;
++	var allDayBounds = t.allDayBounds;
++	var colContentLeft = t.colContentLeft;
++	var colContentRight = t.colContentRight;
++	var dayOfWeekCol = t.dayOfWeekCol;
++	var dateCell = t.dateCell;
++	var compileDaySegs = t.compileDaySegs;
++	var getDaySegmentContainer = t.getDaySegmentContainer;
++	var bindDaySeg = t.bindDaySeg; //TODO: streamline this
++	var formatDates = t.calendar.formatDates;
++	var renderDayOverlay = t.renderDayOverlay;
++	var clearOverlays = t.clearOverlays;
++	var clearSelection = t.clearSelection;
++	
++	
++	
++	/* Rendering
++	-----------------------------------------------------------------------------*/
++	
++	
++	function renderDaySegs(segs, modifiedEventId) {
++		var segmentContainer = getDaySegmentContainer();
++		var rowDivs;
++		var rowCnt = getRowCnt();
++		var colCnt = getColCnt();
++		var i = 0;
++		var rowI;
++		var levelI;
++		var colHeights;
++		var j;
++		var segCnt = segs.length;
++		var seg;
++		var top;
++		var k;
++		segmentContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
++		daySegElementResolve(segs, segmentContainer.children());
++		daySegElementReport(segs);
++		daySegHandlers(segs, segmentContainer, modifiedEventId);
++		daySegCalcHSides(segs);
++		daySegSetWidths(segs);
++		daySegCalcHeights(segs);
++		rowDivs = getRowDivs();
++		// set row heights, calculate event tops (in relation to row top)
++		for (rowI=0; rowI<rowCnt; rowI++) {
++			levelI = 0;
++			colHeights = [];
++			for (j=0; j<colCnt; j++) {
++				colHeights[j] = 0;
++			}
++			while (i<segCnt && (seg = segs[i]).row == rowI) {
++				// loop through segs in a row
++				top = arrayMax(colHeights.slice(seg.startCol, seg.endCol));
++				seg.top = top;
++				top += seg.outerHeight;
++				for (k=seg.startCol; k<seg.endCol; k++) {
++					colHeights[k] = top;
++				}
++				i++;
++			}
++			rowDivs[rowI].height(arrayMax(colHeights));
++		}
++		daySegSetTops(segs, getRowTops(rowDivs));
++	}
++	
++	
++	function renderTempDaySegs(segs, adjustRow, adjustTop) {
++		var tempContainer = $("<div/>");
++		var elements;
++		var segmentContainer = getDaySegmentContainer();
++		var i;
++		var segCnt = segs.length;
++		var element;
++		tempContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
++		elements = tempContainer.children();
++		segmentContainer.append(elements);
++		daySegElementResolve(segs, elements);
++		daySegCalcHSides(segs);
++		daySegSetWidths(segs);
++		daySegCalcHeights(segs);
++		daySegSetTops(segs, getRowTops(getRowDivs()));
++		elements = [];
++		for (i=0; i<segCnt; i++) {
++			element = segs[i].element;
++			if (element) {
++				if (segs[i].row === adjustRow) {
++					element.css('top', adjustTop);
++				}
++				elements.push(element[0]);
++			}
++		}
++		return $(elements);
++	}
++	
++	
++	function daySegHTML(segs) { // also sets seg.left and seg.outerWidth
++		var rtl = opt('isRTL');
++		var i;
++		var segCnt=segs.length;
++		var seg;
++		var event;
++		var url;
++		var classes;
++		var bounds = allDayBounds();
++		var minLeft = bounds.left;
++		var maxLeft = bounds.right;
++		var leftCol;
++		var rightCol;
++		var left;
++		var right;
++		var skinCss;
++		var html = '';
++		// calculate desired position/dimensions, create html
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			event = seg.event;
++			classes = ['fc-event', 'fc-event-hori'];
++			if (isEventDraggable(event)) {
++				classes.push('fc-event-draggable');
++			}
++			if (seg.isStart) {
++				classes.push('fc-event-start');
++			}
++			if (seg.isEnd) {
++				classes.push('fc-event-end');
++			}
++			if (rtl) {
++				leftCol = dayOfWeekCol(seg.end.getDay()-1);
++				rightCol = dayOfWeekCol(seg.start.getDay());
++				left = seg.isEnd ? colContentLeft(leftCol) : minLeft;
++				right = seg.isStart ? colContentRight(rightCol) : maxLeft;
++			}else{
++				leftCol = dayOfWeekCol(seg.start.getDay());
++				rightCol = dayOfWeekCol(seg.end.getDay()-1);
++				left = seg.isStart ? colContentLeft(leftCol) : minLeft;
++				right = seg.isEnd ? colContentRight(rightCol) : maxLeft;
++			}
++			classes = classes.concat(event.className);
++			if (event.source) {
++				classes = classes.concat(event.source.className || []);
++			}
++			url = event.url;
++			skinCss = getSkinCss(event, opt);
++			if (url) {
++				html += "<a href='" + htmlEscape(url) + "'";
++			}else{
++				html += "<div";
++			}
++			html +=
++				" class='" + classes.join(' ') + "'" +
++				" style='position:absolute;z-index:8;left:"+left+"px;" + skinCss + "'" +
++				">" +
++				"<div class='fc-event-inner'>";
++			if (!event.allDay && seg.isStart) {
++				html +=
++					"<span class='fc-event-time'>" +
++					htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
++					"</span>";
++			}
++			html +=
++				"<span class='fc-event-title'>" + htmlEscape(event.title) + "</span>" +
++				"</div>";
++			if (seg.isEnd && isEventResizable(event)) {
++				html +=
++					"<div class='ui-resizable-handle ui-resizable-" + (rtl ? 'w' : 'e') + "'>" +
++					"   " + // makes hit area a lot better for IE6/7
++					"</div>";
++			}
++			html +=
++				"</" + (url ? "a" : "div" ) + ">";
++			seg.left = left;
++			seg.outerWidth = right - left;
++			seg.startCol = leftCol;
++			seg.endCol = rightCol + 1; // needs to be exclusive
++		}
++		return html;
++	}
++	
++	
++	function daySegElementResolve(segs, elements) { // sets seg.element
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var event;
++		var element;
++		var triggerRes;
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			event = seg.event;
++			element = $(elements[i]); // faster than .eq()
++			triggerRes = trigger('eventRender', event, event, element);
++			if (triggerRes === false) {
++				element.remove();
++			}else{
++				if (triggerRes && triggerRes !== true) {
++					triggerRes = $(triggerRes)
++						.css({
++							position: 'absolute',
++							left: seg.left
++						});
++					element.replaceWith(triggerRes);
++					element = triggerRes;
++				}
++				seg.element = element;
++			}
++		}
++	}
++	
++	
++	function daySegElementReport(segs) {
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var element;
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			element = seg.element;
++			if (element) {
++				reportEventElement(seg.event, element);
++			}
++		}
++	}
++	
++	
++	function daySegHandlers(segs, segmentContainer, modifiedEventId) {
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var element;
++		var event;
++		// retrieve elements, run through eventRender callback, bind handlers
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			element = seg.element;
++			if (element) {
++				event = seg.event;
++				if (event._id === modifiedEventId) {
++					bindDaySeg(event, element, seg);
++				}else{
++					element[0]._fci = i; // for lazySegBind
++				}
++			}
++		}
++		lazySegBind(segmentContainer, segs, bindDaySeg);
++	}
++	
++	
++	function daySegCalcHSides(segs) { // also sets seg.key
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var element;
++		var key, val;
++		var hsideCache = {};
++		// record event horizontal sides
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			element = seg.element;
++			if (element) {
++				key = seg.key = cssKey(element[0]);
++				val = hsideCache[key];
++				if (val === undefined) {
++					val = hsideCache[key] = hsides(element, true);
++				}
++				seg.hsides = val;
++			}
++		}
++	}
++	
++	
++	function daySegSetWidths(segs) {
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var element;
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			element = seg.element;
++			if (element) {
++				element[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px';
++			}
++		}
++	}
++	
++	
++	function daySegCalcHeights(segs) {
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var element;
++		var key, val;
++		var vmarginCache = {};
++		// record event heights
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			element = seg.element;
++			if (element) {
++				key = seg.key; // created in daySegCalcHSides
++				val = vmarginCache[key];
++				if (val === undefined) {
++					val = vmarginCache[key] = vmargins(element);
++				}
++				seg.outerHeight = element[0].offsetHeight + val;
++			}
++		}
++	}
++	
++	
++	function getRowDivs() {
++		var i;
++		var rowCnt = getRowCnt();
++		var rowDivs = [];
++		for (i=0; i<rowCnt; i++) {
++			rowDivs[i] = allDayRow(i)
++				.find('div.fc-day-content > div'); // optimal selector?
++		}
++		return rowDivs;
++	}
++	
++	
++	function getRowTops(rowDivs) {
++		var i;
++		var rowCnt = rowDivs.length;
++		var tops = [];
++		for (i=0; i<rowCnt; i++) {
++			tops[i] = rowDivs[i][0].offsetTop; // !!?? but this means the element needs position:relative if in a table cell!!!!
++		}
++		return tops;
++	}
++	
++	
++	function daySegSetTops(segs, rowTops) { // also triggers eventAfterRender
++		var i;
++		var segCnt = segs.length;
++		var seg;
++		var element;
++		var event;
++		for (i=0; i<segCnt; i++) {
++			seg = segs[i];
++			element = seg.element;
++			if (element) {
++				element[0].style.top = rowTops[seg.row] + (seg.top||0) + 'px';
++				event = seg.event;
++				trigger('eventAfterRender', event, event, element);
++			}
++		}
++	}
++	
++	
++	
++	/* Resizing
++	-----------------------------------------------------------------------------------*/
++	
++	
++	function resizableDayEvent(event, element, seg) {
++		var rtl = opt('isRTL');
++		var direction = rtl ? 'w' : 'e';
++		var handle = element.find('.ui-resizable-' + direction); // TODO: stop using this class because we aren't using jqui for this
++		var isResizing = false;
++		
++		// TODO: look into using jquery-ui mouse widget for this stuff
++		disableTextSelection(element); // prevent native <a> selection for IE
++		element
++			.mousedown(function(ev) { // prevent native <a> selection for others
++				ev.preventDefault();
++			})
++			.click(function(ev) {
++				if (isResizing) {
++					ev.preventDefault(); // prevent link from being visited (only method that worked in IE6)
++					ev.stopImmediatePropagation(); // prevent fullcalendar eventClick handler from being called
++					                               // (eventElementHandlers needs to be bound after resizableDayEvent)
++				}
++			});
++		
++		handle.mousedown(function(ev) {
++			if (ev.which != 1) {
++				return; // needs to be left mouse button
++			}
++			isResizing = true;
++			var hoverListener = t.getHoverListener();
++			var rowCnt = getRowCnt();
++			var colCnt = getColCnt();
++			var dis = rtl ? -1 : 1;
++			var dit = rtl ? colCnt-1 : 0;
++			var elementTop = element.css('top');
++			var dayDelta;
++			var helpers;
++			var eventCopy = $.extend({}, event);
++			var minCell = dateCell(event.start);
++			clearSelection();
++			$('body')
++				.css('cursor', direction + '-resize')
++				.one('mouseup', mouseup);
++			trigger('eventResizeStart', this, event, ev);
++			hoverListener.start(function(cell, origCell) {
++				if (cell) {
++					var r = Math.max(minCell.row, cell.row);
++					var c = cell.col;
++					if (rowCnt == 1) {
++						r = 0; // hack for all-day area in agenda views
++					}
++					if (r == minCell.row) {
++						if (rtl) {
++							c = Math.min(minCell.col, c);
++						}else{
++							c = Math.max(minCell.col, c);
++						}
++					}
++					dayDelta = (r*7 + c*dis+dit) - (origCell.row*7 + origCell.col*dis+dit);
++					var newEnd = addDays(eventEnd(event), dayDelta, true);
++					if (dayDelta) {
++						eventCopy.end = newEnd;
++						var oldHelpers = helpers;
++						helpers = renderTempDaySegs(compileDaySegs([eventCopy]), seg.row, elementTop);
++						helpers.find('*').css('cursor', direction + '-resize');
++						if (oldHelpers) {
++							oldHelpers.remove();
++						}
++						hideEvents(event);
++					}else{
++						if (helpers) {
++							showEvents(event);
++							helpers.remove();
++							helpers = null;
++						}
++					}
++					clearOverlays();
++					renderDayOverlay(event.start, addDays(cloneDate(newEnd), 1)); // coordinate grid already rebuild at hoverListener.start
++				}
++			}, ev);
++			
++			function mouseup(ev) {
++				trigger('eventResizeStop', this, event, ev);
++				$('body').css('cursor', '');
++				hoverListener.stop();
++				clearOverlays();
++				if (dayDelta) {
++					eventResize(this, event, dayDelta, 0, ev);
++					// event redraw will clear helpers
++				}
++				// otherwise, the drag handler already restored the old events
++				
++				setTimeout(function() { // make this happen after the element's click event
++					isResizing = false;
++				},0);
++			}
++			
++		});
++	}
++	
++
++}
++
++;;
++
++//BUG: unselect needs to be triggered when events are dragged+dropped
++
++function SelectionManager() {
++	var t = this;
++	
++	
++	// exports
++	t.select = select;
++	t.unselect = unselect;
++	t.reportSelection = reportSelection;
++	t.daySelectionMousedown = daySelectionMousedown;
++	
++	
++	// imports
++	var opt = t.opt;
++	var trigger = t.trigger;
++	var defaultSelectionEnd = t.defaultSelectionEnd;
++	var renderSelection = t.renderSelection;
++	var clearSelection = t.clearSelection;
++	
++	
++	// locals
++	var selected = false;
++
++
++
++	// unselectAuto
++	if (opt('selectable') && opt('unselectAuto')) {
++		$(document).mousedown(function(ev) {
++			var ignore = opt('unselectCancel');
++			if (ignore) {
++				if ($(ev.target).parents(ignore).length) { // could be optimized to stop after first match
++					return;
++				}
++			}
++			unselect(ev);
++		});
++	}
++	
++
++	function select(startDate, endDate, allDay) {
++		unselect();
++		if (!endDate) {
++			endDate = defaultSelectionEnd(startDate, allDay);
++		}
++		renderSelection(startDate, endDate, allDay);
++		reportSelection(startDate, endDate, allDay);
++	}
++	
++	
++	function unselect(ev) {
++		if (selected) {
++			selected = false;
++			clearSelection();
++			trigger('unselect', null, ev);
++		}
++	}
++	
++	
++	function reportSelection(startDate, endDate, allDay, ev) {
++		selected = true;
++		trigger('select', null, startDate, endDate, allDay, ev);
++	}
++	
++	
++	function daySelectionMousedown(ev) { // not really a generic manager method, oh well
++		var cellDate = t.cellDate;
++		var cellIsAllDay = t.cellIsAllDay;
++		var hoverListener = t.getHoverListener();
++		var reportDayClick = t.reportDayClick; // this is hacky and sort of weird
++		if (ev.which == 1 && opt('selectable')) { // which==1 means left mouse button
++			unselect(ev);
++			var _mousedownElement = this;
++			var dates;
++			hoverListener.start(function(cell, origCell) { // TODO: maybe put cellDate/cellIsAllDay info in cell
++				clearSelection();
++				if (cell && cellIsAllDay(cell)) {
++					dates = [ cellDate(origCell), cellDate(cell) ].sort(cmp);
++					renderSelection(dates[0], dates[1], true);
++				}else{
++					dates = null;
++				}
++			}, ev);
++			$(document).one('mouseup', function(ev) {
++				hoverListener.stop();
++				if (dates) {
++					if (+dates[0] == +dates[1]) {
++						reportDayClick(dates[0], true, ev);
++					}
++					reportSelection(dates[0], dates[1], true, ev);
++				}
++			});
++		}
++	}
++
++
++}
++
++;;
++ 
++function OverlayManager() {
++	var t = this;
++	
++	
++	// exports
++	t.renderOverlay = renderOverlay;
++	t.clearOverlays = clearOverlays;
++	
++	
++	// locals
++	var usedOverlays = [];
++	var unusedOverlays = [];
++	
++	
++	function renderOverlay(rect, parent) {
++		var e = unusedOverlays.shift();
++		if (!e) {
++			e = $("<div class='fc-cell-overlay' style='position:absolute;z-index:3'/>");
++		}
++		if (e[0].parentNode != parent[0]) {
++			e.appendTo(parent);
++		}
++		usedOverlays.push(e.css(rect).show());
++		return e;
++	}
++	
++
++	function clearOverlays() {
++		var e;
++		while (e = usedOverlays.shift()) {
++			unusedOverlays.push(e.hide().unbind());
++		}
++	}
++
++
++}
++
++;;
++
++function CoordinateGrid(buildFunc) {
++
++	var t = this;
++	var rows;
++	var cols;
++	
++	
++	t.build = function() {
++		rows = [];
++		cols = [];
++		buildFunc(rows, cols);
++	};
++	
++	
++	t.cell = function(x, y) {
++		var rowCnt = rows.length;
++		var colCnt = cols.length;
++		var i, r=-1, c=-1;
++		for (i=0; i<rowCnt; i++) {
++			if (y >= rows[i][0] && y < rows[i][1]) {
++				r = i;
++				break;
++			}
++		}
++		for (i=0; i<colCnt; i++) {
++			if (x >= cols[i][0] && x < cols[i][1]) {
++				c = i;
++				break;
++			}
++		}
++		return (r>=0 && c>=0) ? { row:r, col:c } : null;
++	};
++	
++	
++	t.rect = function(row0, col0, row1, col1, originElement) { // row1,col1 is inclusive
++		var origin = originElement.offset();
++		return {
++			top: rows[row0][0] - origin.top,
++			left: cols[col0][0] - origin.left,
++			width: cols[col1][1] - cols[col0][0],
++			height: rows[row1][1] - rows[row0][0]
++		};
++	};
++
++}
++
++;;
++
++function HoverListener(coordinateGrid) {
++
++
++	var t = this;
++	var bindType;
++	var change;
++	var firstCell;
++	var cell;
++	
++	
++	t.start = function(_change, ev, _bindType) {
++		change = _change;
++		firstCell = cell = null;
++		coordinateGrid.build();
++		mouse(ev);
++		bindType = _bindType || 'mousemove';
++		$(document).bind(bindType, mouse);
++	};
++	
++	
++	function mouse(ev) {
++		_fixUIEvent(ev); // see below
++		var newCell = coordinateGrid.cell(ev.pageX, ev.pageY);
++		if (!newCell != !cell || newCell && (newCell.row != cell.row || newCell.col != cell.col)) {
++			if (newCell) {
++				if (!firstCell) {
++					firstCell = newCell;
++				}
++				change(newCell, firstCell, newCell.row-firstCell.row, newCell.col-firstCell.col);
++			}else{
++				change(newCell, firstCell);
++			}
++			cell = newCell;
++		}
++	}
++	
++	
++	t.stop = function() {
++		$(document).unbind(bindType, mouse);
++		return cell;
++	};
++	
++	
++}
++
++
++
++// this fix was only necessary for jQuery UI 1.8.16 (and jQuery 1.7 or 1.7.1)
++// upgrading to jQuery UI 1.8.17 (and using either jQuery 1.7 or 1.7.1) fixed the problem
++// but keep this in here for 1.8.16 users
++// and maybe remove it down the line
++
++function _fixUIEvent(event) { // for issue 1168
++	if (event.pageX === undefined) {
++		event.pageX = event.originalEvent.pageX;
++		event.pageY = event.originalEvent.pageY;
++	}
++}
++;;
++
++function HorizontalPositionCache(getElement) {
++
++	var t = this,
++		elements = {},
++		lefts = {},
++		rights = {};
++		
++	function e(i) {
++		return elements[i] = elements[i] || getElement(i);
++	}
++	
++	t.left = function(i) {
++		return lefts[i] = lefts[i] === undefined ? e(i).position().left : lefts[i];
++	};
++	
++	t.right = function(i) {
++		return rights[i] = rights[i] === undefined ? t.left(i) + e(i).width() : rights[i];
++	};
++	
++	t.clear = function() {
++		elements = {};
++		lefts = {};
++		rights = {};
++	};
++	
++}
++
++;;
++
++})(jQuery);
diff --cc apps/calendar/3rdparty/fullcalendar/js/fullcalendar.min.js
index 0000000,0000000..c3e0834
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/js/fullcalendar.min.js
@@@ -1,0 -1,0 +1,7 @@@
++/*!
++ * FullCalendar v1.6.1
++ * Docs & License: http://arshaw.com/fullcalendar/
++ * (c) 2013 Adam Shaw
++ */
++(function(t,e){function n(e){t.extend(!0,ye,e)}function r(n,r,l){function u(t){G?(S(),C(),R(),b(t)):f()}function f(){K=r.theme?"ui":"fc",n.addClass("fc"),r.isRTL?n.addClass("fc-rtl"):n.addClass("fc-ltr"),r.theme&&n.addClass("ui-widget"),G=t("<div class='fc-content' style='position:relative'/>").prependTo(n),$=new a(Z,r),Q=$.render(),Q&&n.prepend(Q),y(r.defaultView),t(window).resize(x),m()||v()}function v(){setTimeout(function(){!te.start&&m()&&b()},0)}function h(){t(window).unbind("resi [...]
++for(O[0].innerHTML=N,w=O.children(),a=0;F>a;a++)o=n[a],i=o.event,D=t(w[a]),M=b("eventRender",i,i,D),M===!1?D.remove():(M&&M!==!0&&(D.remove(),D=t(M).css({position:"absolute",top:o.top,left:o.left}).appendTo(O)),o.element=D,i._id===r?v(i,D,o):D[0]._fci=a,G(i,D));for(H(O,n,v),a=0;F>a;a++)o=n[a],(D=o.element)&&(S=A[C=o.key=X(D[0])],o.vsides=S===e?A[C]=L(D,!0):S,S=_[C],o.hsides=S===e?_[C]=R(D,!0):S,E=D.find(".fc-event-title"),E.length&&(o.contentTop=E[0].offsetTop));for(a=0;F>a;a++)o=n[a],( [...]
diff --cc apps/calendar/3rdparty/fullcalendar/js/gcal.js
index 0000000,0000000..e3008a9
new file mode 100644
--- /dev/null
+++ b/apps/calendar/3rdparty/fullcalendar/js/gcal.js
@@@ -1,0 -1,0 +1,107 @@@
++/*!
++ * FullCalendar v1.6.1 Google Calendar Plugin
++ * Docs & License: http://arshaw.com/fullcalendar/
++ * (c) 2013 Adam Shaw
++ */
++ 
++(function($) {
++
++
++var fc = $.fullCalendar;
++var formatDate = fc.formatDate;
++var parseISO8601 = fc.parseISO8601;
++var addDays = fc.addDays;
++var applyAll = fc.applyAll;
++
++
++fc.sourceNormalizers.push(function(sourceOptions) {
++	if (sourceOptions.dataType == 'gcal' ||
++		sourceOptions.dataType === undefined &&
++		(sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) {
++			sourceOptions.dataType = 'gcal';
++			if (sourceOptions.editable === undefined) {
++				sourceOptions.editable = false;
++			}
++		}
++});
++
++
++fc.sourceFetchers.push(function(sourceOptions, start, end) {
++	if (sourceOptions.dataType == 'gcal') {
++		return transformOptions(sourceOptions, start, end);
++	}
++});
++
++
++function transformOptions(sourceOptions, start, end) {
++
++	var success = sourceOptions.success;
++	var data = $.extend({}, sourceOptions.data || {}, {
++		'start-min': formatDate(start, 'u'),
++		'start-max': formatDate(end, 'u'),
++		'singleevents': true,
++		'max-results': 9999
++	});
++	
++	var ctz = sourceOptions.currentTimezone;
++	if (ctz) {
++		data.ctz = ctz = ctz.replace(' ', '_');
++	}
++
++	return $.extend({}, sourceOptions, {
++		url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?',
++		dataType: 'jsonp',
++		data: data,
++		startParam: false,
++		endParam: false,
++		success: function(data) {
++			var events = [];
++			if (data.feed.entry) {
++				$.each(data.feed.entry, function(i, entry) {
++					var startStr = entry['gd$when'][0]['startTime'];
++					var start = parseISO8601(startStr, true);
++					var end = parseISO8601(entry['gd$when'][0]['endTime'], true);
++					var allDay = startStr.indexOf('T') == -1;
++					var url;
++					$.each(entry.link, function(i, link) {
++						if (link.type == 'text/html') {
++							url = link.href;
++							if (ctz) {
++								url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + ctz;
++							}
++						}
++					});
++					if (allDay) {
++						addDays(end, -1); // make inclusive
++					}
++					events.push({
++						id: entry['gCal$uid']['value'],
++						title: entry['title']['$t'],
++						url: url,
++						start: start,
++						end: end,
++						allDay: allDay,
++						location: entry['gd$where'][0]['valueString'],
++						description: entry['content']['$t']
++					});
++				});
++			}
++			var args = [events].concat(Array.prototype.slice.call(arguments, 1));
++			var res = applyAll(success, this, args);
++			if ($.isArray(res)) {
++				return res;
++			}
++			return events;
++		}
++	});
++	
++}
++
++
++// legacy
++fc.gcalFeed = function(url, sourceOptions) {
++	return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' });
++};
++
++
++})(jQuery);
diff --cc apps/calendar/ajax/event/new.form.php
index 206b597,0000000..f1030f2
mode 100644,000000..100644
--- a/apps/calendar/ajax/event/new.form.php
+++ b/apps/calendar/ajax/event/new.form.php
@@@ -1,90 -1,0 +1,90 @@@
 +<?php
 +/**
 + * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
 + * This file is licensed under the Affero General Public License version 3 or
 + * later.
 + * See the COPYING-README file.
 + */
 +
 +
 +
 +if(!OCP\User::isLoggedIn()) {
 +	OCP\User::checkLoggedIn();
 +}
 +OCP\JSON::checkAppEnabled('calendar');
 +
 +if (!isset($_POST['start'])) {
 +	OCP\JSON::error();
 +	die;
 +}
 +$start = $_POST['start'];
 +$end = $_POST['end'];
 +$allday = $_POST['allday'];
 +
 +if (!$end) {
 +	$duration = OCP\Config::getUserValue( OCP\USER::getUser(), 'calendar', 'duration', '60');
 +	$end = $start + ($duration * 60);
 +}
 +$start = new DateTime('@'.$start);
 +$end = new DateTime('@'.$end);
 +$timezone = OC_Calendar_App::getTimezone();
 +$start->setTimezone(new DateTimeZone($timezone));
 +$end->setTimezone(new DateTimeZone($timezone));
 +
 +$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
 +$calendar_options = array();
 +
 +foreach($calendars as $calendar) {
 +	if($calendar['userid'] != OCP\User::getUser()) {
 +		$sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $calendar['id']);
- 		if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\PERMISSION_UPDATE)) {
++		if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\PERMISSION_CREATE)) {
 +			array_push($calendar_options, $calendar);
 +		}
 +	} else {
 +		array_push($calendar_options, $calendar);
 +	}
 +}
 +$access_class_options = OC_Calendar_App::getAccessClassOptions();
 +$repeat_options = OC_Calendar_App::getRepeatOptions();
 +$repeat_end_options = OC_Calendar_App::getEndOptions();
 +$repeat_month_options = OC_Calendar_App::getMonthOptions();
 +$repeat_year_options = OC_Calendar_App::getYearOptions();
 +$repeat_weekly_options = OC_Calendar_App::getWeeklyOptions();
 +$repeat_weekofmonth_options = OC_Calendar_App::getWeekofMonth();
 +$repeat_byyearday_options = OC_Calendar_App::getByYearDayOptions();
 +$repeat_bymonth_options = OC_Calendar_App::getByMonthOptions();
 +$repeat_byweekno_options = OC_Calendar_App::getByWeekNoOptions();
 +$repeat_bymonthday_options = OC_Calendar_App::getByMonthDayOptions();
 +
 +$tmpl = new OCP\Template('calendar', 'part.newevent');
 +$tmpl->assign('access', 'owner');
 +$tmpl->assign('accessclass', 'PUBLIC');
 +$tmpl->assign('calendar_options', $calendar_options);
 +$tmpl->assign('access_class_options', $access_class_options);
 +$tmpl->assign('repeat_options', $repeat_options);
 +$tmpl->assign('repeat_month_options', $repeat_month_options);
 +$tmpl->assign('repeat_weekly_options', $repeat_weekly_options);
 +$tmpl->assign('repeat_end_options', $repeat_end_options);
 +$tmpl->assign('repeat_year_options', $repeat_year_options);
 +$tmpl->assign('repeat_byyearday_options', $repeat_byyearday_options);
 +$tmpl->assign('repeat_bymonth_options', $repeat_bymonth_options);
 +$tmpl->assign('repeat_byweekno_options', $repeat_byweekno_options);
 +$tmpl->assign('repeat_bymonthday_options', $repeat_bymonthday_options);
 +$tmpl->assign('repeat_weekofmonth_options', $repeat_weekofmonth_options);
 +
 +$tmpl->assign('eventid', 'new');
 +$tmpl->assign('startdate', $start->format('d-m-Y'));
 +$tmpl->assign('starttime', $start->format('H:i'));
 +$tmpl->assign('enddate', $end->format('d-m-Y'));
 +$tmpl->assign('endtime', $end->format('H:i'));
 +$tmpl->assign('allday', $allday);
 +$tmpl->assign('repeat', 'doesnotrepeat');
 +$tmpl->assign('repeat_month', 'monthday');
 +$tmpl->assign('repeat_weekdays', array());
 +$tmpl->assign('repeat_interval', 1);
 +$tmpl->assign('repeat_end', 'never');
 +$tmpl->assign('repeat_count', '10');
 +$tmpl->assign('repeat_weekofmonth', 'auto');
 +$tmpl->assign('repeat_date', '');
 +$tmpl->assign('repeat_year', 'bydate');
 +$tmpl->printpage();
diff --cc apps/calendar/index.php
index b33f8bc,0000000..f721364
mode 100644,000000..100644
--- a/apps/calendar/index.php
+++ b/apps/calendar/index.php
@@@ -1,49 -1,0 +1,49 @@@
 +<?php
 +/**
 + * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
 + * This file is licensed under the Affero General Public License version 3 or
 + * later.
 + * See the COPYING-README file.
 + */
 +OCP\User::checkLoggedIn();
 +OCP\App::checkAppEnabled('calendar');
 +
 +// Create default calendar ...
 +$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), false);
 +if( count($calendars) == 0) {
 +	OC_Calendar_Calendar::addDefaultCalendars(OCP\USER::getUser());
 +	$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), true);
 +}
 +
 +//Fix currentview for fullcalendar
 +if(OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'currentview', 'month') == "oneweekview") {
 +	OCP\Config::setUserValue(OCP\USER::getUser(), "calendar", "currentview", "agendaWeek");
 +}
 +if(OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'currentview', 'month') == "onemonthview") {
 +	OCP\Config::setUserValue(OCP\USER::getUser(), "calendar", "currentview", "month");
 +}
 +if(OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'currentview', 'month') == "listview") {
 +	OCP\Config::setUserValue(OCP\USER::getUser(), "calendar", "currentview", "list");
 +}
 +
- OCP\Util::addscript('3rdparty/fullcalendar', 'fullcalendar');
- OCP\Util::addStyle('3rdparty/fullcalendar', 'fullcalendar');
++OCP\Util::addscript('calendar/3rdparty/fullcalendar', 'fullcalendar');
++OCP\Util::addStyle('calendar/3rdparty/fullcalendar', 'fullcalendar');
 +OCP\Util::addscript('3rdparty/timepicker', 'jquery.ui.timepicker');
 +OCP\Util::addStyle('3rdparty/timepicker', 'jquery.ui.timepicker');
 +if(OCP\Config::getUserValue(OCP\USER::getUser(), "calendar", "timezone") == null || OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezonedetection') == 'true') {
 +	OCP\Util::addscript('calendar', 'geo');
 +}
 +OCP\Util::addscript('calendar', 'calendar');
 +OCP\Util::addStyle('calendar', 'style');
 +OCP\Util::addscript('', 'jquery.multiselect');
 +OCP\Util::addStyle('', 'jquery.multiselect');
 +OCP\Util::addscript('calendar','jquery.multi-autocomplete');
 +OCP\Util::addscript('','tags');
 +OCP\Util::addscript('calendar','on-event');
 +OCP\App::setActiveNavigationEntry('calendar_index');
 +$tmpl = new OCP\Template('calendar', 'calendar', 'user');
 +
 +if(array_key_exists('showevent', $_GET)) {
 +	$tmpl->assign('showevent', $_GET['showevent']);
 +}
 +$tmpl->printPage();
diff --cc apps/calendar/js/calendar.js
index 9b649ee,0000000..cef2297
mode 100644,000000..100644
--- a/apps/calendar/js/calendar.js
+++ b/apps/calendar/js/calendar.js
@@@ -1,1007 -1,0 +1,1010 @@@
 +/**
 + * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
 + * Copyright (c) 2011 Bart Visscher <bartv at thisnet.nl>
 + * This file is licensed under the Affero General Public License version 3 or
 + * later.
 + * See the COPYING-README file.
 + */
 +
 +Calendar={
 +	Util:{
 +		sendmail: function(eventId, location, description, dtstart, dtend){
 +			Calendar.UI.loading(true);
 +			$.post(
 +			OC.filePath('calendar','ajax/event','sendmail.php'),
 +			{
 +				eventId:eventId,
 +				location:location,
 +				description:description,
 +				dtstart:dtstart,
 +				dtend:dtend
 +			},
 +			function(result){
 +				if(result.status !== 'success'){
 +					OC.dialogs.alert(result.data.message, 'Error sending mail');
 +				}
 +				Calendar.UI.loading(false);
 +			}
 +		);
 +		},
 +		dateTimeToTimestamp:function(dateString, timeString){
 +			dateTuple = dateString.split('-');
 +			timeTuple = timeString.split(':');
 +			
 +			var day, month, year, minute, hour;
 +			day = parseInt(dateTuple[0], 10);
 +			month = parseInt(dateTuple[1], 10);
 +			year = parseInt(dateTuple[2], 10);
 +			hour = parseInt(timeTuple[0], 10);
 +			minute = parseInt(timeTuple[1], 10);
 +			
 +			var date = new Date(year, month-1, day, hour, minute);
 +			
 +			return parseInt(date.getTime(), 10);
 +		},
 +		formatDate:function(year, month, day){
 +			if(day < 10){
 +				day = '0' + day;
 +			}
 +			if(month < 10){
 +				month = '0' + month;
 +			}
 +			return day + '-' + month + '-' + year;
 +		},
 +		formatTime:function(hour, minute){
 +			if(hour < 10){
 +				hour = '0' + hour;
 +			}
 +			if(minute < 10){
 +				minute = '0' + minute;
 +			}
 +			return hour + ':' + minute;
 +		}, 
 +		adjustDate:function(){
 +			var fromTime = $('#fromtime').val();
 +			var fromDate = $('#from').val();
 +			var fromTimestamp = Calendar.Util.dateTimeToTimestamp(fromDate, fromTime);
 +
 +			var toTime = $('#totime').val();
 +			var toDate = $('#to').val();
 +			var toTimestamp = Calendar.Util.dateTimeToTimestamp(toDate, toTime);
 +
 +			if(fromTimestamp >= toTimestamp){
 +				fromTimestamp += 30*60*1000;
 +				
 +				var date = new Date(fromTimestamp);
 +				movedTime = Calendar.Util.formatTime(date.getHours(), date.getMinutes());
 +				movedDate = Calendar.Util.formatDate(date.getFullYear(),
 +						date.getMonth()+1, date.getDate());
 +
 +				$('#to').val(movedDate);
 +				$('#totime').val(movedTime);
 +			}
 +		}
 +	},
 +	UI:{
 +		scrollcount: 0,
 +		loading: function(isLoading){
 +			if (isLoading){
 +				$('#loading').show();
 +			}else{
 +				$('#loading').hide();
 +			}
 +		},
 +		startEventDialog:function(){
 +			Calendar.UI.loading(false);
 +			$('.tipsy').remove();
 +			$('#fullcalendar').fullCalendar('unselect');
 +			Calendar.UI.lockTime();
 +			$( "#from" ).datepicker({
 +				dateFormat : 'dd-mm-yy',
 +				onSelect: function(){ Calendar.Util.adjustDate(); }
 +			});
 +			$( "#to" ).datepicker({
 +				dateFormat : 'dd-mm-yy'
 +			});
 +			$('#fromtime').timepicker({
 +				showPeriodLabels: false,
 +				onSelect: function(){ Calendar.Util.adjustDate(); }
 +			});
 +			$('#totime').timepicker({
 +				showPeriodLabels: false
 +			});
 +			$('#category').multiple_autocomplete({source: categories});
 +			Calendar.UI.repeat('init');
 +			$('#end').change(function(){
 +				Calendar.UI.repeat('end');
 +			});
 +			$('#repeat').change(function(){
 +				Calendar.UI.repeat('repeat');
 +			});
 +			$('#advanced_year').change(function(){
 +				Calendar.UI.repeat('year');
 +			});
 +			$('#advanced_month').change(function(){
 +				Calendar.UI.repeat('month');
 +			});
 +			$( "#event" ).tabs({ selected: 0});
 +			$('#event').dialog({
 +				width : 500,
 +				height: 600,
 +				close : function(event, ui) {
 +					$(this).dialog('destroy').remove();
 +				}
 +			});
 +			Calendar.UI.Share.init();
 +			$('#sendemailbutton').click(function() {
 +				Calendar.Util.sendmail($(this).attr('data-eventid'), $(this).attr('data-location'), $(this).attr('data-description'), $(this).attr('data-dtstart'), $(this).attr('data-dtend'));
 +			})
 +		},
 +		newEvent:function(start, end, allday){
 +			start = Math.round(start.getTime()/1000);
 +			if (end){
 +				end = Math.round(end.getTime()/1000);
 +			}
 +			if($('#event').dialog('isOpen') == true){
 +				// TODO: save event
 +				$('#event').dialog('destroy').remove();
 +			}else{
 +				Calendar.UI.loading(true);
 +				$('#dialog_holder').load(OC.filePath('calendar', 'ajax/event', 'new.form.php'), {start:start, end:end, allday:allday?1:0}, Calendar.UI.startEventDialog);
 +			}
 +		},
 +		editEvent:function(calEvent, jsEvent, view){
 +			if (calEvent.editable == false || calEvent.source.editable == false) {
 +				return;
 +			}
 +			var id = calEvent.id;
 +			if($('#event').dialog('isOpen') == true){
 +				// TODO: save event
 +				$('#event').dialog('destroy').remove();
 +			}else{
 +				Calendar.UI.loading(true);
 +				$('#dialog_holder').load(OC.filePath('calendar', 'ajax/event', 'edit.form.php'), {id: id}, Calendar.UI.startEventDialog);
 +			}
 +		},
 +		submitDeleteEventForm:function(url){
 +			var id = $('input[name="id"]').val();
 +			$('#errorbox').empty();
 +			Calendar.UI.loading(true);
 +			$.post(url, {id:id}, function(data){
 +					Calendar.UI.loading(false);
 +					if(data.status == 'success'){
 +						$('#fullcalendar').fullCalendar('removeEvents', $('#event_form input[name=id]').val());
 +						$('#event').dialog('destroy').remove();
 +					} else {
 +						$('#errorbox').html(t('calendar', 'Deletion failed'));
 +					}
 +
 +			}, "json");
 +		},
 +		validateEventForm:function(url){
 +			var post = $( "#event_form" ).serialize();
 +			$("#errorbox").empty();
 +			Calendar.UI.loading(true);
 +			$.post(url, post,
 +				function(data){
 +					Calendar.UI.loading(false);
 +					if(data.status == "error"){
 +						var output = missing_field + ": <br />";
 +						if(data.title == "true"){
 +							output = output + missing_field_title + "<br />";
 +						}
 +						if(data.cal == "true"){
 +							output = output + missing_field_calendar + "<br />";
 +						}
 +						if(data.from == "true"){
 +							output = output + missing_field_fromdate + "<br />";
 +						}
 +						if(data.fromtime == "true"){
 +							output = output + missing_field_fromtime + "<br />";
 +						}
 +						if(data.to == "true"){
 +							output = output + missing_field_todate + "<br />";
 +						}
 +						if(data.totime == "true"){
 +							output = output + missing_field_totime + "<br />";
 +						}
 +						if(data.endbeforestart == "true"){
 +							output = output + missing_field_startsbeforeends + "!<br/>";
 +						}
 +						if(data.dberror == "true"){
 +							output = "There was a database fail!";
 +						}
 +						$("#errorbox").html(output);
 +					} else
 +					if(data.status == 'success'){
 +						$('#event').dialog('destroy').remove();
 +						$('#fullcalendar').fullCalendar('refetchEvents');
 +					}
 +				},"json");
 +		},
 +		moveEvent:function(event, dayDelta, minuteDelta, allDay, revertFunc){
 +			$('.tipsy').remove();
 +			Calendar.UI.loading(true);
 +			$.post(OC.filePath('calendar', 'ajax/event', 'move.php'), { id: event.id, dayDelta: dayDelta, minuteDelta: minuteDelta, allDay: allDay?1:0, lastmodified: event.lastmodified},
 +			function(data) {
 +				Calendar.UI.loading(false);
 +				if (data.status == 'success'){
 +					event.lastmodified = data.lastmodified;
 +					console.log("Event moved successfully");
 +				}else{
 +					revertFunc();
 +					$('#fullcalendar').fullCalendar('refetchEvents');
 +				}
 +			});
 +		},
 +		resizeEvent:function(event, dayDelta, minuteDelta, revertFunc){
 +			$('.tipsy').remove();
 +			Calendar.UI.loading(true);
 +			$.post(OC.filePath('calendar', 'ajax/event', 'resize.php'), { id: event.id, dayDelta: dayDelta, minuteDelta: minuteDelta, lastmodified: event.lastmodified},
 +			function(data) {
 +				Calendar.UI.loading(false);
 +				if (data.status == 'success'){
 +					event.lastmodified = data.lastmodified;
 +					console.log("Event resized successfully");
 +				}else{
 +					revertFunc();
 +					$('#fullcalendar').fullCalendar('refetchEvents');
 +				}
 +			});
 +		},
 +		showadvancedoptions:function(){
 +			$("#advanced_options").slideDown('slow');
 +			$("#advanced_options_button").css("display", "none");
 +		},
 +		showadvancedoptionsforrepeating:function(){
 +			if($("#advanced_options_repeating").is(":hidden")){
 +				$('#advanced_options_repeating').slideDown('slow');
 +			}else{
 +				$('#advanced_options_repeating').slideUp('slow');
 +			}
 +		},
 +		getEventPopupText:function(event){
 +			if (event.allDay){
 +				var timespan = $.fullCalendar.formatDates(event.start, event.end, 'ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}', {monthNamesShort: monthNamesShort, monthNames: monthNames, dayNames: dayNames, dayNamesShort: dayNamesShort}); //t('calendar', "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}")
 +			}else{
 +				var timespan = $.fullCalendar.formatDates(event.start, event.end, 'ddd d MMMM[ yyyy] ' + defaulttime + '{ - [ ddd d MMMM yyyy]' + defaulttime + '}', {monthNamesShort: monthNamesShort, monthNames: monthNames, dayNames: dayNames, dayNamesShort: dayNamesShort}); //t('calendar', "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}")
 +				// Tue 18 October 2011 08:00 - 16:00
 +			}
 +			var html =
 +				'<div class="summary">' + escapeHTML(event.title) + '</div>' +
 +				'<div class="timespan">' + timespan + '</div>';
 +			if (event.description){
 +				html += '<div class="description">' + escapeHTML(event.description) + '</div>';
 +			}
 +			return html;
 +		},
 +		lockTime:function(){
 +			if($('#allday_checkbox').is(':checked')) {
 +				$("#fromtime").attr('disabled', true)
 +					.addClass('disabled');
 +				$("#totime").attr('disabled', true)
 +					.addClass('disabled');
 +			} else {
 +				$("#fromtime").attr('disabled', false)
 +					.removeClass('disabled');
 +				$("#totime").attr('disabled', false)
 +					.removeClass('disabled');
 +			}
 +		},
 +		showCalDAVUrl:function(username, calname){
 +			$('#caldav_url').val(totalurl + '/' + username + '/' + calname);
 +			$('#caldav_url').show();
 +			$("#caldav_url_close").show();
 +		},
 +		initScroll:function(){
 +			if(window.addEventListener)
 +				document.addEventListener('DOMMouseScroll', Calendar.UI.scrollCalendar, false);
 +			//}else{
 +				document.onmousewheel = Calendar.UI.scrollCalendar;
 +			//}
 +		},
 +		scrollCalendar:function(event){
 +			var currentView = $('#fullcalendar').fullCalendar('getView');
 +			if(currentView.name == 'agendaWeek') {
 +				return;
 +			}
 +			$('#fullcalendar').fullCalendar('option', 'height', $(window).height() - $('#controls').height() - $('#header').height() - 15);
 +			$('.tipsy').remove();
 +			var direction;
 +			if(event.detail){
 +				if(event.detail < 0){
 +					direction = 'top';
 +				}else{
 +					direction = 'down';
 +				}
 +			}
 +			if (event.wheelDelta){
 +				if(event.wheelDelta > 0){
 +					direction = 'top';
 +				}else{
 +					direction = 'down';
 +				}
 +			}
 +			Calendar.UI.scrollcount++;
 +			if(Calendar.UI.scrollcount < 20){
 +				return;
 +			}
 +
 +			var scroll = $(document).scrollTop(),
 +				doc_height = $(document).height(),
 +				win_height = $(window).height();
 +			if(direction == 'down'/* && win_height == (doc_height - scroll)*/){
 +				$('#fullcalendar').fullCalendar('next');
 +				$(document).scrollTop(0);
 +				event.preventDefault();
 +			}else/* if (direction == 'top' && scroll == 0) */{
 +				$('#fullcalendar').fullCalendar('prev');
 +				$(document).scrollTop(win_height);
 +				event.preventDefault();
 +			}
 +			Calendar.UI.scrollcount = 0;
 +		},
 +		repeat:function(task){
 +			if(task=='init'){
 +				$('#byweekno').multiselect({
 +					header: false,
 +					noneSelectedText: $('#advanced_byweekno').attr('title'),
 +					selectedList: 2,
 +					minWidth:'auto'
 +				});
 +				$('#weeklyoptions').multiselect({
 +					header: false,
 +					noneSelectedText: $('#weeklyoptions').attr('title'),
 +					selectedList: 2,
 +					minWidth:'auto'
 +				});
 +				$('input[name="bydate"]').datepicker({
 +					dateFormat : 'dd-mm-yy'
 +				});
 +				$('#byyearday').multiselect({
 +					header: false,
 +					noneSelectedText: $('#byyearday').attr('title'),
 +					selectedList: 2,
 +					minWidth:'auto'
 +				});
 +				$('#bymonth').multiselect({
 +					header: false,
 +					noneSelectedText: $('#bymonth').attr('title'),
 +					selectedList: 2,
 +					minWidth:'auto'
 +				});
 +				$('#bymonthday').multiselect({
 +					header: false,
 +					noneSelectedText: $('#bymonthday').attr('title'),
 +					selectedList: 2,
 +					minWidth:'auto'
 +				});
 +				Calendar.UI.repeat('end');
 +				Calendar.UI.repeat('month');
 +				Calendar.UI.repeat('year');
 +				Calendar.UI.repeat('repeat');
 +			}
 +			if(task == 'end'){
 +				$('#byoccurrences').css('display', 'none');
 +				$('#bydate').css('display', 'none');
 +				if($('#end option:selected').val() == 'count'){
 +					$('#byoccurrences').css('display', 'block');
 +				}
 +				if($('#end option:selected').val() == 'date'){
 +					$('#bydate').css('display', 'block');
 +				}
 +			}
 +			if(task == 'repeat'){
 +				$('#advanced_month').css('display', 'none');
 +				$('#advanced_weekday').css('display', 'none');
 +				$('#advanced_weekofmonth').css('display', 'none');
 +				$('#advanced_byyearday').css('display', 'none');
 +				$('#advanced_bymonth').css('display', 'none');
 +				$('#advanced_byweekno').css('display', 'none');
 +				$('#advanced_year').css('display', 'none');
 +				$('#advanced_bymonthday').css('display', 'none');
 +				if($('#repeat option:selected').val() == 'monthly'){
 +					$('#advanced_month').css('display', 'block');
 +					Calendar.UI.repeat('month');
 +				}
 +				if($('#repeat option:selected').val() == 'weekly'){
 +					$('#advanced_weekday').css('display', 'block');
 +				}
 +				if($('#repeat option:selected').val() == 'yearly'){
 +					$('#advanced_year').css('display', 'block');
 +					Calendar.UI.repeat('year');
 +				}
 +				if($('#repeat option:selected').val() == 'doesnotrepeat'){
 +					$('#advanced_options_repeating').slideUp('slow');
 +				}
 +			}
 +			if(task == 'month'){
 +				$('#advanced_weekday').css('display', 'none');
 +				$('#advanced_weekofmonth').css('display', 'none');
 +				if($('#advanced_month_select option:selected').val() == 'weekday'){
 +					$('#advanced_weekday').css('display', 'block');
 +					$('#advanced_weekofmonth').css('display', 'block');
 +				}
 +			}
 +			if(task == 'year'){
 +				$('#advanced_weekday').css('display', 'none');
 +				$('#advanced_byyearday').css('display', 'none');
 +				$('#advanced_bymonth').css('display', 'none');
 +				$('#advanced_byweekno').css('display', 'none');
 +				$('#advanced_bymonthday').css('display', 'none');
 +				if($('#advanced_year_select option:selected').val() == 'byyearday'){
 +					//$('#advanced_byyearday').css('display', 'block');
 +				}
 +				if($('#advanced_year_select option:selected').val() == 'byweekno'){
 +					$('#advanced_byweekno').css('display', 'block');
 +				}
 +				if($('#advanced_year_select option:selected').val() == 'bydaymonth'){
 +					$('#advanced_bymonth').css('display', 'block');
 +					$('#advanced_bymonthday').css('display', 'block');
 +					$('#advanced_weekday').css('display', 'block');
 +				}
 +			}
 +
 +		},
 +		setViewActive: function(view){
 +			$('#view input[type="button"]').removeClass('active');
 +			var id;
 +			switch (view) {
 +				case 'agendaWeek':
 +					id = 'oneweekview_radio';
 +					break;
 +				case 'month':
 +					id = 'onemonthview_radio';
 +					break;
 +				case 'list':
 +					id = 'listview_radio';
 +					break;
 +			}
 +			$('#'+id).addClass('active');
 +		},
 +		categoriesChanged:function(newcategories){
 +			categories = $.map(newcategories, function(v) {return v.name;});
 +			console.log('Calendar categories changed to: ' + categories);
 +			$('#category').multiple_autocomplete('option', 'source', categories);
 +		},
 +		Calendar:{
 +			overview:function(){
 +				if($('#choosecalendar_dialog').dialog('isOpen') == true){
 +					$('#choosecalendar_dialog').dialog('moveToTop');
 +				}else{
 +					Calendar.UI.loading(true);
 +					$('#dialog_holder').load(OC.filePath('calendar', 'ajax/calendar', 'overview.php'), function(){
 +						$('#choosecalendar_dialog').dialog({
 +							width : 600,
 +							height: 400,
 +							close : function(event, ui) {
 +								$(this).dialog('destroy').remove();
 +							}
 +						});
 +						Calendar.UI.loading(false);
 +					});
 +				}
 +			},
 +			activation:function(checkbox, calendarid)
 +			{
 +				Calendar.UI.loading(true);
 +				$.post(OC.filePath('calendar', 'ajax/calendar', 'activation.php'), { calendarid: calendarid, active: checkbox.checked?1:0 },
 +				  function(data) {
 +					Calendar.UI.loading(false);
 +					if (data.status == 'success'){
 +						checkbox.checked = data.active == 1;
 +						if (data.active == 1){
 +							$('#fullcalendar').fullCalendar('addEventSource', data.eventSource);
 +						}else{
 +							$('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url);
 +						}
 +					}
 +				  });
 +			},
 +			newCalendar:function(object){
 +				var tr = $(document.createElement('tr'))
 +					.load(OC.filePath('calendar', 'ajax/calendar', 'new.form.php'),
 +						function(){Calendar.UI.Calendar.colorPicker(this)});
 +				$(object).closest('tr').after(tr).hide();
 +			},
 +			edit:function(object, calendarid){
 +				var tr = $(document.createElement('tr'))
 +					.load(OC.filePath('calendar', 'ajax/calendar', 'edit.form.php'), {calendarid: calendarid},
 +						function(){Calendar.UI.Calendar.colorPicker(this)});
 +				$(object).closest('tr').after(tr).hide();
 +			},
 +			deleteCalendar:function(calid){
 +				var check = confirm("Do you really want to delete this calendar?");
 +				if(check == false){
 +					return false;
 +				}else{
 +					$.post(OC.filePath('calendar', 'ajax/calendar', 'delete.php'), { calendarid: calid},
 +					  function(data) {
 +						if (data.status == 'success'){
 +							var url = 'ajax/events.php?calendar_id='+calid;
 +							$('#fullcalendar').fullCalendar('removeEventSource', url);
 +							$('#choosecalendar_dialog').dialog('destroy').remove();
 +							Calendar.UI.Calendar.overview();
 +							$('#calendar tr[data-id="'+calid+'"]').fadeOut(400,function(){
 +								$('#calendar tr[data-id="'+calid+'"]').remove();
 +							});
 +							$('#fullcalendar').fullCalendar('refetchEvents');
 +						}
 +					  });
 +				}
 +			},
 +			submit:function(button, calendarid){
 +				var displayname = $.trim($("#displayname_"+calendarid).val());
 +				var active = $("#edit_active_"+calendarid+":checked").length;
 +				var description = $("#description_"+calendarid).val();
 +				var calendarcolor = $("#calendarcolor_"+calendarid).val();
 +				if(displayname == ''){
 +					$("#displayname_"+calendarid).css('background-color', '#FF2626');
 +					$("#displayname_"+calendarid).focus(function(){
 +						$("#displayname_"+calendarid).css('background-color', '#F8F8F8');
 +					});
 +				}
 +
 +				var url;
 +				if (calendarid == 'new'){
 +					url = OC.filePath('calendar', 'ajax/calendar', 'new.php');
 +				}else{
 +					url = OC.filePath('calendar', 'ajax/calendar', 'update.php');
 +				}
 +				$.post(url, { id: calendarid, name: displayname, active: active, description: description, color: calendarcolor },
 +					function(data){
 +						if(data.status == 'success'){
 +							$(button).closest('tr').prev().html(data.page).show().next().remove();
 +							$('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url);
 +							$('#fullcalendar').fullCalendar('addEventSource', data.eventSource);
 +							if (calendarid == 'new'){
 +								$('#choosecalendar_dialog > table:first').append('<tr><td colspan="6"><a href="#" id="chooseCalendar"><input type="button" value="' + newcalendar + '"></a></td></tr>');
 +							}
 +						}else{
 +							$("#displayname_"+calendarid).css('background-color', '#FF2626');
 +							$("#displayname_"+calendarid).focus(function(){
 +								$("#displayname_"+calendarid).css('background-color', '#F8F8F8');
 +							});
 +						}
 +					}, 'json');
 +			},
 +			cancel:function(button, calendarid){
 +				$(button).closest('tr').prev().show().next().remove();
 +			},
 +			colorPicker:function(container){
 +				// based on jquery-colorpicker at jquery.webspirited.com
 +				var obj = $('.colorpicker', container);
 +				var picker = $('<div class="calendar-colorpicker"></div>');
 +				//build an array of colors
 +				var colors = {};
 +				$(obj).children('option').each(function(i, elm) {
 +					colors[i] = {};
 +					colors[i].color = $(elm).val();
 +					colors[i].label = $(elm).text();
 +				});
 +				for (var i in colors) {
 +					picker.append('<span class="calendar-colorpicker-color ' + (colors[i].color == $(obj).children(":selected").val() ? ' active' : '') + '" rel="' + colors[i].label + '" style="background-color: ' + colors[i].color + ';"></span>');
 +				}
 +				picker.delegate(".calendar-colorpicker-color", "click", function() {
 +					$(obj).val($(this).attr('rel'));
 +					$(obj).change();
 +					picker.children('.calendar-colorpicker-color.active').removeClass('active');
 +					$(this).addClass('active');
 +				});
 +				$(obj).after(picker);
 +				$(obj).css({
 +					position: 'absolute',
 +					left: -10000
 +				});
 +			}
 +		},
 +		Share:{
 +			init:function(){
 +				if(typeof OC.Share !== typeof undefined){
 +					var itemShares = [OC.Share.SHARE_TYPE_USER, OC.Share.SHARE_TYPE_GROUP];
 +					$('#sharewith').autocomplete({minLength: 2, source: function(search, response) {
 +						$.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: itemShares }, function(result) {
 +							if (result.status == 'success' && result.data.length > 0) {
 +								response(result.data);
 +							}
 +						});
 +					},
 +					focus: function(event, focused) {
 +						event.preventDefault();
 +					},
 +					select: function(event, selected) {
 +						var itemType = 'event';
 +						var itemSource = $('#sharewith').data('item-source');
 +						var shareType = selected.item.value.shareType;
 +						var shareWith = selected.item.value.shareWith;
 +						$(this).val(shareWith);
 +						// Default permissions are Read and Share
 +						var permissions = OC.PERMISSION_READ | OC.PERMISSION_SHARE;
 +						OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, function(data) {
 +							var newitem = '<li data-item-type="event"'
 +								+ 'data-share-with="'+shareWith+'" '
 +								+ 'data-permissions="'+permissions+'" '
 +								+ 'data-share-type="'+shareType+'">'+shareWith+' ('+(shareType == OC.Share.SHARE_TYPE_USER ? t('core', 'user') : t('core', 'group'))+')'
 +								+ '<span class="shareactions"><input class="update" type="checkbox" title="'+t('core', 'Editable')+'">'
 +								+ '<input class="share" type="checkbox" title="'+t('core', 'Shareable')+'" checked="checked">'
 +								+ '<input class="delete" type="checkbox" title="'+t('core', 'Deletable')+'">'
 +								+ '<img class="svg action delete" title="Unshare"src="'+ OC.imagePath('core', 'actions/delete.svg') +'"></span></li>';
 +							$('.sharedby.eventlist').append(newitem);
 +							$('#sharedWithNobody').remove();
 +							$('#sharewith').val('');
 +						});
 +						return false;
 +					}
 +					});
 +	
 +					$('.shareactions > input:checkbox').change(function() {
 +						var container = $(this).parents('li').first();
 +						var permissions = parseInt(container.data('permissions'));
 +						var itemType = container.data('item-type');
 +						var shareType = container.data('share-type');
 +						var itemSource = container.data('item');
 +						var shareWith = container.data('share-with');
 +						var permission = null;
 +						if($(this).hasClass('update')) {
 +							permission = OC.PERMISSION_UPDATE;
 +						} else if($(this).hasClass('share')) {
 +							permission = OC.PERMISSION_SHARE;
 +						} else if($(this).hasClass('delete')) {
 +							permission = OC.PERMISSION_DELETE;
 +						}
 +						// This is probably not the right way, but it works :-P
 +						if($(this).is(':checked')) {
 +							permissions += permission;
 +						} else {
 +							permissions -= permission;
 +						}
++						
++						container.data('permissions',permissions);
++						
 +						OC.Share.setPermissions(itemType, itemSource, shareType, shareWith, permissions);
 +					});
 +	
 +					$('.shareactions > .delete').click(function() {
 +						var container = $(this).parents('li').first();
 +						var itemType = container.data('item-type');
 +						var shareType = container.data('share-type');
 +						var itemSource = container.data('item');
 +						var shareWith = container.data('share-with');
 +						OC.Share.unshare(itemType, itemSource, shareType, shareWith, function() {
 +							container.remove();
 +						});
 +					});
 +				}
 +			}
 +		},
 +		Drop:{
 +			init:function(){
 +				if (typeof window.FileReader === 'undefined') {
 +					console.log('The drop-import feature is not supported in your browser :(');
 +					return false;
 +				}
 +				droparea = document.getElementById('fullcalendar');
 +				droparea.ondrop = function(e){
 +					e.preventDefault();
 +					Calendar.UI.Drop.drop(e);
 +				}
 +				console.log('Drop initialized successfully');
 +			},
 +			drop:function(e){
 +				var files = e.dataTransfer.files;
 +				for(var i = 0;i < files.length;i++){
 +					var file = files[i];
 +					var reader = new FileReader();
 +					reader.onload = function(event){
 +						Calendar.UI.Drop.doImport(event.target.result);
 +						$('#fullcalendar').fullCalendar('refetchEvents');
 +					}
 +					reader.readAsDataURL(file);
 +				}
 +			},
 +			doImport:function(data){
 +				$.post(OC.filePath('calendar', 'ajax/import', 'dropimport.php'), {'data':data},function(result) {
 +					if(result.status == 'success'){
 +						$('#fullcalendar').fullCalendar('addEventSource', result.eventSource);
 +						$('#notification').html(result.message);
 +						$('#notification').slideDown();
 +						window.setTimeout(function(){$('#notification').slideUp();}, 5000);
 +						return true;
 +					}else{
 +						$('#notification').html(result.message);
 +						$('#notification').slideDown();
 +						window.setTimeout(function(){$('#notification').slideUp();}, 5000);
 +					}
 +				});
 +			}
 +		}
 +	},
 +	Settings:{
 +		//
 +	},
 +
 +}
 +$.fullCalendar.views.list = ListView;
 +function ListView(element, calendar) {
 +	var t = this;
 +
 +	// imports
 +	jQuery.fullCalendar.views.month.call(t, element, calendar);
 +	var opt = t.opt;
 +	var trigger = t.trigger;
 +	var eventElementHandlers = t.eventElementHandlers;
 +	var reportEventElement = t.reportEventElement;
 +	var formatDate = calendar.formatDate;
 +	var formatDates = calendar.formatDates;
 +	var addDays = $.fullCalendar.addDays;
 +	var cloneDate = $.fullCalendar.cloneDate;
 +	function skipWeekend(date, inc, excl) {
 +		inc = inc || 1;
 +		while (!date.getDay() || (excl && date.getDay()==1 || !excl && date.getDay()==6)) {
 +			addDays(date, inc);
 +		}
 +		return date;
 +	}
 +
 +	// overrides
 +	t.name='list';
 +	t.render=render;
 +	t.renderEvents=renderEvents;
 +	t.setHeight=setHeight;
 +	t.setWidth=setWidth;
 +	t.clearEvents=clearEvents;
 +
 +	function setHeight(height, dateChanged) {
 +	}
 +
 +	function setWidth(width) {
 +	}
 +
 +	function clearEvents() {
 +		this.reportEventClear();
 +	}
 +
 +	// main
 +	function sortEvent(a, b) {
 +		return a.start - b.start;
 +	}
 +
 +	function render(date, delta) {
 +		if (!t.start){
 +			t.start = addDays(cloneDate(date, true), -7);
 +			t.end = addDays(cloneDate(date, true), 7);
 +		}
 +		if (delta) {
 +			if (delta < 0){
 +				addDays(t.start, -7);
 +				addDays(t.end, -7);
 +				if (!opt('weekends')) {
 +					skipWeekend(t.start, delta < 0 ? -1 : 1);
 +				}
 +			}else{
 +				addDays(t.start, 7);
 +				addDays(t.end, 7);
 +				if (!opt('weekends')) {
 +					skipWeekend(t.end, delta < 0 ? -1 : 1);
 +				}
 +			}
 +		}
 +		t.title = formatDates(
 +			t.start,
 +			t.end,
 +			opt('titleFormat', 'week')
 +		);
 +		t.visStart = cloneDate(t.start);
 +		t.visEnd = cloneDate(t.end);
 +	}
 +
 +	function eventsOfThisDay(events, theDate) {
 +		var start = cloneDate(theDate, true);
 +		var end = addDays(cloneDate(start), 1);
 +		var retArr = new Array();
 +		for (i in events) {
 +			var event_end = t.eventEnd(events[i]);
 +			if (events[i].start < end && event_end >= start) {
 +				retArr.push(events[i]);
 +			}
 +		}
 +		return retArr;
 +	}
 +
 +	function renderEvent(event) {
 +		if (event.allDay) { //all day event
 +			var time = opt('allDayText');
 +		}
 +		else {
 +			var time = formatDates(event.start, event.end, opt('timeFormat', 'agenda'));
 +		}
 +		var classes = ['fc-event', 'fc-list-event'];
 +		classes = classes.concat(event.className);
 +		if (event.source) {
 +			classes = classes.concat(event.source.className || []);
 +		}
 +		var html = '<tr>' +
 +			'<td> </td>' +
 +			'<td class="fc-list-time">' +
 +			time +
 +			'</td>' +
 +			'<td> </td>' +
 +			'<td class="fc-list-event">' +
 +			'<span id="list' + event.id + '"' +
 +			' class="' + classes.join(' ') + '"' +
 +			'>' +
 +			'<span class="fc-event-title">' +
 +			escapeHTML(event.title) +
 +			'</span>' +
 +			'</span>' +
 +			'</td>' +
 +			'</tr>';
 +		return html;
 +	}
 +
 +	function renderDay(date, events) {
 +		var dayRows = $('<tr>' +
 +			'<td colspan="4" class="fc-list-date">' +
 +			'<span>' +
 +			formatDate(date, opt('titleFormat', 'day')) +
 +			'</span>' +
 +			'</td>' +
 +			'</tr>');
 +		for (i in events) {
 +			var event = events[i];
 +			var eventElement = $(renderEvent(event));
 +			triggerRes = trigger('eventRender', event, event, eventElement);
 +			if (triggerRes === false) {
 +				eventElement.remove();
 +			}else{
 +				if (triggerRes && triggerRes !== true) {
 +					eventElement.remove();
 +					eventElement = $(triggerRes);
 +				}
 +				$.merge(dayRows, eventElement);
 +				eventElementHandlers(event, eventElement);
 +				reportEventElement(event, eventElement);
 +			}
 +		}
 +		return dayRows;
 +	}
 +
 +	function renderEvents(events, modifiedEventId) {
 +		events = events.sort(sortEvent);
 +
 +		var table = $('<table class="fc-list-table"></table>');
 +		var total = events.length;
 +		if (total > 0) {
 +			var date = cloneDate(t.visStart);
 +			while (date <= t.visEnd) {
 +				var dayEvents = eventsOfThisDay(events, date);
 +				if (dayEvents.length > 0) {
 +					table.append(renderDay(date, dayEvents));
 +				}
 +				date=addDays(date, 1);
 +			}
 +		}
 +
 +		this.element.html(table);
 +	}
 +}
 +$(document).ready(function(){
 +	Calendar.UI.initScroll();
 +	$('#fullcalendar').fullCalendar({
 +		header: false,
 +		firstDay: firstDay,
 +		editable: true,
 +		defaultView: defaultView,
 +		timeFormat: {
 +			agenda: agendatime,
 +			'': defaulttime
 +			},
 +		columnFormat: {
 +			month: t('calendar', 'ddd'),    // Mon
 +			week: t('calendar', 'ddd M/d'), // Mon 9/7
 +			day: t('calendar', 'dddd M/d')  // Monday 9/7
 +			},
 +		titleFormat: {
 +			month: t('calendar', 'MMMM yyyy'),
 +					// September 2009
 +			week: t('calendar', "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"),
 +					// Sep 7 - 13 2009
 +			day: t('calendar', 'dddd, MMM d, yyyy'),
 +					// Tuesday, Sep 8, 2009
 +			},
 +		axisFormat: defaulttime,
 +		monthNames: monthNames,
 +		monthNamesShort: monthNamesShort,
 +		dayNames: dayNames,
 +		dayNamesShort: dayNamesShort,
 +		allDayText: allDayText,
 +		viewDisplay: function(view) {
 +			$('#datecontrol_date').val($('<p>').html(view.title).text());
 +			if (view.name != defaultView) {
 +				$.post(OC.filePath('calendar', 'ajax', 'changeview.php'), {v:view.name});
 +				defaultView = view.name;
 +			}
 +			Calendar.UI.setViewActive(view.name);
 +			if (view.name == 'agendaWeek') {
 +				$('#fullcalendar').fullCalendar('option', 'aspectRatio', 0.1);
 +			}
 +			else {
 +				$('#fullcalendar').fullCalendar('option', 'aspectRatio', 1.35);
 +			}
 +		},
 +		columnFormat: {
 +		    week: 'ddd d. MMM'
 +		},
 +		selectable: true,
 +		selectHelper: true,
 +		select: Calendar.UI.newEvent,
 +		eventClick: Calendar.UI.editEvent,
 +		eventDrop: Calendar.UI.moveEvent,
 +		eventResize: Calendar.UI.resizeEvent,
 +		eventRender: function(event, element) {
 +			element.find('.fc-event-title').text($("<div/>").html(escapeHTML(event.title)).text())
 +			element.tipsy({
 +				className: 'tipsy-event',
 +				opacity: 0.9,
 +				gravity:$.fn.tipsy.autoBounds(150, 's'),
 +				fade:true,
 +				delayIn: 400,
 +				html:true,
 +				title:function() {
 +					return Calendar.UI.getEventPopupText(event);
 +				}
 +			});
 +		},
 +		loading: Calendar.UI.loading,
 +		eventSources: eventSources
 +	});
 +	$('#datecontrol_date').datepicker({
 +		changeMonth: true,
 +		changeYear: true,
 +		showButtonPanel: true,
 +		beforeShow: function(input, inst) {
 +			var calendar_holder = $('#fullcalendar');
 +			var date = calendar_holder.fullCalendar('getDate');
 +			inst.input.datepicker('setDate', date);
 +			inst.input.val(calendar_holder.fullCalendar('getView').title);
 +			return inst;
 +		},
 +		onSelect: function(value, inst) {
 +			var date = inst.input.datepicker('getDate');
 +			$('#fullcalendar').fullCalendar('gotoDate', date);
 +		}
 +	});
 +	fillWindow($('#content'));
 +
 +	$(OC.Tags).on('change', function(event, data) {
 +		if(data.type === 'event') {
 +			Calendar.UI.categoriesChanged(data.tags);
 +		}
 +	});
 +
 +	$('#oneweekview_radio').click(function(){
 +		$('#fullcalendar').fullCalendar('changeView', 'agendaWeek');
 +	});
 +	$('#onemonthview_radio').click(function(){
 +		$('#fullcalendar').fullCalendar('changeView', 'month');
 +	});
 +	$('#listview_radio').click(function(){
 +		$('#fullcalendar').fullCalendar('changeView', 'list');
 +	});
 +	$('#today_input').click(function(){
 +		$('#fullcalendar').fullCalendar('today');
 +	});
 +	$('#datecontrol_left').click(function(){
 +		$('#fullcalendar').fullCalendar('prev');
 +	});
 +	$('#datecontrol_today').click(function(){
 +		$('#fullcalendar').fullCalendar('today');
 +	});
 +	$('#datecontrol_right').click(function(){
 +		$('#fullcalendar').fullCalendar('next');
 +	});
 +	Calendar.UI.Share.init();
 +	Calendar.UI.Drop.init();
 +	$('#choosecalendar .generalsettings').on('click keydown', function(event) {
 +		event.preventDefault();
 +		OC.appSettings({appid:'calendar', loadJS:true, cache:false, scriptName:'settingswrapper.php'});
 +	});
 +	$('#fullcalendar').fullCalendar('option', 'height', $(window).height() - $('#controls').height() - $('#header').height() - 15);
 +});
diff --cc apps/calendar/l10n/es.php
index b444037,0000000..a9c5794
mode 100644,000000..100644
--- a/apps/calendar/l10n/es.php
+++ b/apps/calendar/l10n/es.php
@@@ -1,217 -1,0 +1,217 @@@
 +<?php $TRANSLATIONS = array(
 +"Not all calendars are completely cached" => "No todos los calendarios se han almacenado completamente",
 +"Everything seems to be completely cached" => "Todo parece estar completamente almacenado",
 +"No calendars found." => "No se encuentra calendarios.",
 +"No events found." => "No se encuentran eventos.",
 +"Wrong calendar" => "Calendario erróneo",
 +"You do not have the permissions to edit this event." => "No tiene los permisos para editar este evento.",
 +"The file contained either no events or all events are already saved in your calendar." => "El archivo no contiene eventos o ya existen en tu calendario.",
 +"events has been saved in the new calendar" => "Los eventos han sido guardados en el nuevo calendario",
 +"Import failed" => "Importación falló",
 +"events has been saved in your calendar" => "los eventos se guardaron en tu calendario",
 +"New Timezone:" => "Nueva zona horaria:",
 +"Timezone changed" => "Zona horaria cambiada",
 +"Invalid request" => "Petición no válida",
 +"Calendar" => "Calendario",
 +"Deletion failed" => "Falló el borrado",
 +"ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}" => "ddd d MMMM[ yyyy]{ -[ddd d] MMMM yyyy}",
 +"ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}" => "ddd d MMMM[ yyyy] HH:mm{ -[ ddd d MMMM yyyy] HH:mm}",
 +"user" => "usuario",
 +"group" => "grupo",
 +"Editable" => "Editable",
 +"Shareable" => "Compartible",
 +"Deletable" => "Borrable",
 +"ddd" => "ddd",
 +"ddd M/d" => "ddd M/d",
 +"dddd M/d" => "dddd M/d",
 +"MMMM yyyy" => "MMMM yyyy",
 +"MMM d[ yyyy]{ '–'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '–'[ MMM] d yyyy}",
 +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
 +"Sunday" => "Domingo",
 +"Monday" => "Lunes",
 +"Tuesday" => "Martes",
 +"Wednesday" => "Miércoles",
 +"Thursday" => "Jueves",
 +"Friday" => "Viernes",
 +"Saturday" => "Sábado",
 +"Sun." => "Dom.",
 +"Mon." => "Lun.",
 +"Tue." => "Mar.",
 +"Wed." => "Mier.",
 +"Thu." => "Jue.",
 +"Fri." => "Vie.",
 +"Sat." => "Sab.",
 +"January" => "Enero",
 +"February" => "Febrero",
 +"March" => "Marzo",
 +"April" => "Abril",
 +"May" => "Mayo",
 +"June" => "Junio",
 +"July" => "Julio",
 +"August" => "Agosto",
 +"September" => "Septiembre",
 +"October" => "Octubre",
 +"November" => "Noviembre",
 +"December" => "Diciembre",
 +"Jan." => "Ene.",
 +"Feb." => "Feb.",
 +"Mar." => "Mar.",
 +"Apr." => "Abr.",
 +"May." => "May.",
 +"Jun." => "Jun.",
 +"Jul." => "Jul.",
 +"Aug." => "Ago.",
 +"Sep." => "Sep.",
 +"Oct." => "Oct.",
 +"Nov." => "Nov.",
 +"Dec." => "Dic.",
 +"All day" => "Todo el día",
 +"New Calendar" => "Nuevo calendario",
 +"Missing or invalid fields" => "Campos inválidos o faltantes",
 +"Title" => "Título",
 +"From Date" => "Desde la fecha",
 +"From Time" => "Desde la hora",
 +"To Date" => "Hasta la fecha",
 +"To Time" => "Hasta la hora",
 +"The event ends before it starts" => "El evento termina antes de comenzar",
 +"There was a database fail" => "Se produjo un error en la base de datos",
 +"Birthday" => "Fecha de nacimiento",
 +"Business" => "Negocios",
 +"Call" => "Llamada",
 +"Clients" => "Clientes",
 +"Deliverer" => "Repartidor",
 +"Holidays" => "Vacaciones",
 +"Ideas" => "Ideas",
 +"Journey" => "Viaje",
 +"Jubilee" => "Aniversario",
 +"Meeting" => "Reunión",
 +"Other" => "Otro",
 +"Personal" => "Personal",
 +"Projects" => "Proyectos",
 +"Questions" => "Preguntas",
 +"Work" => "Trabajo",
 +"by" => "por",
 +"unnamed" => "Sin nombre",
 +"You do not have the permissions to update this calendar." => "No tiene los permisos para actualizar este calendario.",
 +"You do not have the permissions to delete this calendar." => "No tiene permiso para eliminar este calendario.",
 +"You do not have the permissions to add to this calendar." => "No tiene los permisos para añadir a este calendario.",
 +"You do not have the permissions to add events to this calendar." => "No tiene los permisos para añadir eventos a este calendario.",
 +"You do not have the permissions to delete this event." => "No tiene los permisos para eliminar este evento.",
 +"Busy" => "Ocupado",
 +"Public" => "Publico",
 +"Private" => "Privado",
 +"Confidential" => "Confidencial",
 +"Does not repeat" => "No se repite",
 +"Daily" => "Diariamente",
 +"Weekly" => "Semanalmente",
 +"Every Weekday" => "Todos los días laborables",
 +"Bi-Weekly" => "Cada 2 semanas",
 +"Monthly" => "Mensualmente",
 +"Yearly" => "Anualmente",
 +"never" => "nunca",
 +"by occurrences" => "por ocurrencias",
 +"by date" => "por fecha",
 +"by monthday" => "por día del mes",
 +"by weekday" => "por día de la semana",
 +"events week of month" => "eventos de la semana del mes",
 +"first" => "primero",
 +"second" => "segundo",
 +"third" => "tercer",
 +"fourth" => "cuarto",
 +"fifth" => "quinto",
 +"last" => "último",
 +"by events date" => "por fecha de eventos",
 +"by yearday(s)" => "por día(s) del año",
 +"by weeknumber(s)" => "por número(s) de semana",
 +"by day and month" => "por día y mes",
 +"Contact birthdays" => "Cumpleaños de los contactos",
 +"Date" => "Fecha",
 +"Cal." => "Cal.",
 +"Week" => "Semana",
 +"Month" => "Mes",
 +"List" => "Lista",
 +"Today" => "Hoy",
 +"Settings" => "Ajustes",
 +"Share Calendar" => "Compartir calendario",
 +"CalDav Link" => "Enlace CalDav",
 +"Download" => "Descargar",
 +"Edit" => "Editar",
 +"Delete" => "Eliminar",
 +"New calendar" => "Nuevo calendario",
 +"Edit calendar" => "Editar calendario",
 +"Displayname" => "Nombre para mostrar",
 +"Active" => "Activo",
 +"Calendar color" => "Color del calendario",
 +"Save" => "Guardar",
 +"Submit" => "Guardar",
 +"Cancel" => "Cancelar",
 +"Edit an event" => "Editar un evento",
 +"Export" => "Exportar",
- "Eventinfo" => "Informaciónevento",
- "Repeating" => "Repitiendo",
++"Eventinfo" => "Información del evento",
++"Repeating" => "Repetición",
 +"Alarm" => "Alarma",
 +"Attendees" => "Asistentes",
 +"Share" => "Compartir",
 +"Title of the Event" => "Título del evento",
 +"Category" => "Categoría",
 +"Separate categories with commas" => "Separar categorías con comas",
 +"Edit categories" => "Editar categorías",
 +"Access Class" => "Clase de acceso",
- "All Day Event" => "Evento de día completo",
++"All Day Event" => "Todo el día",
 +"From" => "Desde",
 +"To" => "Hasta",
 +"Advanced options" => "Opciones avanzadas",
 +"Location" => "Ubicación",
 +"Location of the Event" => "Ubicación del evento",
 +"Description" => "Descripción",
 +"Description of the Event" => "Descripción del evento",
 +"Repeat" => "Repetir",
 +"Advanced" => "Avanzado",
 +"Select weekdays" => "Seleccionar días de la semana",
 +"Select days" => "Seleccionar días",
 +"and the events day of year." => "y el día del año de los eventos.",
 +"and the events day of month." => "y el día del mes de los eventos.",
 +"Select months" => "Seleccionar meses",
 +"Select weeks" => "Seleccionar semanas",
 +"and the events week of year." => "y la semana del año de los eventos.",
 +"Interval" => "Intervalo",
 +"End" => "Fin",
 +"occurrences" => "ocurrencias",
 +"create a new calendar" => "Crear un nuevo calendario",
 +"Import a calendar file" => "Importar un archivo de calendario",
 +"Please choose a calendar" => "Por favor, seleccione un calendario",
 +"Name of new calendar" => "Nombre del nuevo calendario",
 +"Take an available name!" => "¡Elija un nombre disponible!",
 +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendario con este nombre ya existe. Si aun así continua, estos calendarios se combinarán.",
 +"Remove all events from the selected calendar" => "Eliminar todos los eventos del calendario seleccionado",
 +"Import" => "Importar",
 +"Close Dialog" => "Cerrar diálogo",
 +"Create a new event" => "Crear un nuevo evento",
 +"Share with:" => "Compartir con:",
 +"Shared with" => "Compartido con",
 +"Unshare" => "Dejar de compartir",
 +"Nobody" => "Nadie",
 +"Send Email" => "Enviar correo",
 +"Shared via calendar" => "Compartido vía calendario",
 +"NOTE: Actions on events shared via calendar will affect the entire calendar sharing." => "NOTA: las acciones sobre eventos compartidos a través del calendario afectarán a la compartición de todo el calendario.",
 +"View an event" => "Ver un evento",
 +"No categories selected" => "Ninguna categoría seleccionada",
 +"of" => "de",
 +"at" => "a las",
 +"Your calendars" => "Tus calendarios",
 +"General" => "General",
 +"Timezone" => "Zona horaria",
 +"Update timezone automatically" => "Actualizar zona horaria automáticamente",
 +"Time format" => "Formato de hora",
 +"24h" => "24h",
 +"12h" => "12h",
 +"Start week on" => "Comenzar semana en",
 +"Cache" => "Caché",
 +"Clear cache for repeating events" => "Limpiar caché de eventos recurrentes",
 +"URLs" => "URLs",
 +"Calendar CalDAV syncing addresses" => "Direcciones de sincronización de calendario CalDAV:",
 +"more info" => "Más información",
 +"Primary address (Kontact et al)" => "Dirección principal (Kontact y otros)",
 +"iOS/OS X" => "iOS/OS X",
 +"Read only iCalendar link(s)" => "Enlace(s) iCalendar de sólo lectura"
 +);
diff --cc apps/calendar/l10n/es/calendar.po
index fd62793,0000000..b55cf05
mode 100644,000000..100644
--- a/apps/calendar/l10n/es/calendar.po
+++ b/apps/calendar/l10n/es/calendar.po
@@@ -1,904 -1,0 +1,905 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Agustin Ferrario <agustin.ferrario at hotmail.com.ar>, 2012
 +# Art O. Pal <artopal at fastmail.fm>, 2013
 +# telco2011 <davidlopez.david at gmail.com>, 2012
 +# ggam <ggam at brainleakage.com>, 2013
 +# Javier Llorente <javier at opensuse.org>, 2012
++# juanman <juanma at kde.org.ar>, 2013
 +# juanman <juanma at kde.org.ar>, 2011-2012
 +# oSiNaReF <>, 2012
 +# pggx999 <pggx999 at gmail.com>, 2012
 +# rafabayona <rafabayona at gmail.com>, 2012
 +# Raul Fernandez Garcia <raulfg3 at gmail.com>, 2012
 +# Rubén del Campo <yo at rubendelcampo.es>, 2013
 +# Rubén Trujillo <rubentrf at gmail.com>, 2012
 +# saskarip <saskarip at gmail.com>, 2013
 +# xsergiolpx <sergioballesterossolanas at gmail.com>, 2011, 2012
 +# scambra <sergio at programatica.es>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 04:55-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
- "Last-Translator: Rubén del Campo <yo at rubendelcampo.es>\n"
++"POT-Creation-Date: 2013-11-15 22:05-0500\n"
++"PO-Revision-Date: 2013-11-12 07:20+0000\n"
++"Last-Translator: juanman <juanma at kde.org.ar>\n"
 +"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: es\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: ajax/cache/status.php:19
 +msgid "Not all calendars are completely cached"
 +msgstr "No todos los calendarios se han almacenado completamente"
 +
 +#: ajax/cache/status.php:21
 +msgid "Everything seems to be completely cached"
 +msgstr "Todo parece estar completamente almacenado"
 +
 +#: ajax/categories/rescan.php:29
 +msgid "No calendars found."
 +msgstr "No se encuentra calendarios."
 +
 +#: ajax/categories/rescan.php:37
 +msgid "No events found."
 +msgstr "No se encuentran eventos."
 +
 +#: ajax/event/edit.form.php:21
 +msgid "Wrong calendar"
 +msgstr "Calendario erróneo"
 +
 +#: ajax/event/edit.form.php:224 lib/object.php:197 lib/object.php:233
 +msgid "You do not have the permissions to edit this event."
 +msgstr "No tiene los permisos para editar este evento."
 +
 +#: ajax/import/dropimport.php:29 ajax/import/import.php:66
 +msgid ""
 +"The file contained either no events or all events are already saved in your "
 +"calendar."
 +msgstr "El archivo no contiene eventos o ya existen en tu calendario."
 +
 +#: ajax/import/dropimport.php:31 ajax/import/import.php:69
 +msgid "events has been saved in the new calendar"
 +msgstr "Los eventos han sido guardados en el nuevo calendario"
 +
 +#: ajax/import/import.php:58
 +msgid "Import failed"
 +msgstr "Importación falló"
 +
 +#: ajax/import/import.php:71
 +msgid "events has been saved in your calendar"
 +msgstr "los eventos se guardaron en tu calendario"
 +
 +#: ajax/settings/guesstimezone.php:26
 +msgid "New Timezone:"
 +msgstr "Nueva zona horaria:"
 +
 +#: ajax/settings/settimezone.php:23
 +msgid "Timezone changed"
 +msgstr "Zona horaria cambiada"
 +
 +#: ajax/settings/settimezone.php:25
 +msgid "Invalid request"
 +msgstr "Petición no válida"
 +
 +#: appinfo/app.php:38 js/l10n.php:87 templates/part.eventform.php:30
 +#: templates/part.showevent.php:37
 +msgid "Calendar"
 +msgstr "Calendario"
 +
 +#: js/calendar.js:176
 +msgid "Deletion failed"
 +msgstr "Falló el borrado"
 +
 +#: js/calendar.js:265
 +msgid "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}"
 +msgstr "ddd d MMMM[ yyyy]{ -[ddd d] MMMM yyyy}"
 +
 +#: js/calendar.js:267
 +msgid "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}"
 +msgstr "ddd d MMMM[ yyyy] HH:mm{ -[ ddd d MMMM yyyy] HH:mm}"
 +
 +#: js/calendar.js:624
 +msgid "user"
 +msgstr "usuario"
 +
 +#: js/calendar.js:624
 +msgid "group"
 +msgstr "grupo"
 +
 +#: js/calendar.js:625 templates/part.share.php:45 templates/part.share.php:76
 +msgid "Editable"
 +msgstr "Editable"
 +
 +#: js/calendar.js:626 templates/part.share.php:47 templates/part.share.php:78
 +msgid "Shareable"
 +msgstr "Compartible"
 +
 +#: js/calendar.js:627 templates/part.share.php:49 templates/part.share.php:80
 +msgid "Deletable"
 +msgstr "Borrable"
 +
- #: js/calendar.js:897
++#: js/calendar.js:900
 +msgid "ddd"
 +msgstr "ddd"
 +
- #: js/calendar.js:898
++#: js/calendar.js:901
 +msgid "ddd M/d"
 +msgstr "ddd M/d"
 +
- #: js/calendar.js:899
++#: js/calendar.js:902
 +msgid "dddd M/d"
 +msgstr "dddd M/d"
 +
- #: js/calendar.js:902
++#: js/calendar.js:905
 +msgid "MMMM yyyy"
 +msgstr "MMMM yyyy"
 +
- #: js/calendar.js:904
++#: js/calendar.js:907
 +msgid "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
 +msgstr "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
 +
- #: js/calendar.js:906
++#: js/calendar.js:909
 +msgid "dddd, MMM d, yyyy"
 +msgstr "dddd, MMM d, yyyy"
 +
 +#: js/l10n.php:77 lib/object.php:588 templates/settings.php:93
 +msgid "Sunday"
 +msgstr "Domingo"
 +
 +#: js/l10n.php:77 lib/object.php:582 templates/settings.php:92
 +msgid "Monday"
 +msgstr "Lunes"
 +
 +#: js/l10n.php:77 lib/object.php:583
 +msgid "Tuesday"
 +msgstr "Martes"
 +
 +#: js/l10n.php:77 lib/object.php:584
 +msgid "Wednesday"
 +msgstr "Miércoles"
 +
 +#: js/l10n.php:77 lib/object.php:585
 +msgid "Thursday"
 +msgstr "Jueves"
 +
 +#: js/l10n.php:77 lib/object.php:586
 +msgid "Friday"
 +msgstr "Viernes"
 +
 +#: js/l10n.php:77 lib/object.php:587 templates/settings.php:94
 +msgid "Saturday"
 +msgstr "Sábado"
 +
 +#: js/l10n.php:78
 +msgid "Sun."
 +msgstr "Dom."
 +
 +#: js/l10n.php:78
 +msgid "Mon."
 +msgstr "Lun."
 +
 +#: js/l10n.php:78
 +msgid "Tue."
 +msgstr "Mar."
 +
 +#: js/l10n.php:78
 +msgid "Wed."
 +msgstr "Mier."
 +
 +#: js/l10n.php:78
 +msgid "Thu."
 +msgstr "Jue."
 +
 +#: js/l10n.php:78
 +msgid "Fri."
 +msgstr "Vie."
 +
 +#: js/l10n.php:78
 +msgid "Sat."
 +msgstr "Sab."
 +
 +#: js/l10n.php:79 lib/object.php:638
 +msgid "January"
 +msgstr "Enero"
 +
 +#: js/l10n.php:79 lib/object.php:639
 +msgid "February"
 +msgstr "Febrero"
 +
 +#: js/l10n.php:79 lib/object.php:640
 +msgid "March"
 +msgstr "Marzo"
 +
 +#: js/l10n.php:79 lib/object.php:641
 +msgid "April"
 +msgstr "Abril"
 +
 +#: js/l10n.php:79 lib/object.php:642
 +msgid "May"
 +msgstr "Mayo"
 +
 +#: js/l10n.php:79 lib/object.php:643
 +msgid "June"
 +msgstr "Junio"
 +
 +#: js/l10n.php:79 lib/object.php:644
 +msgid "July"
 +msgstr "Julio"
 +
 +#: js/l10n.php:79 lib/object.php:645
 +msgid "August"
 +msgstr "Agosto"
 +
 +#: js/l10n.php:79 lib/object.php:646
 +msgid "September"
 +msgstr "Septiembre"
 +
 +#: js/l10n.php:79 lib/object.php:647
 +msgid "October"
 +msgstr "Octubre"
 +
 +#: js/l10n.php:79 lib/object.php:648
 +msgid "November"
 +msgstr "Noviembre"
 +
 +#: js/l10n.php:79 lib/object.php:649
 +msgid "December"
 +msgstr "Diciembre"
 +
 +#: js/l10n.php:80
 +msgid "Jan."
 +msgstr "Ene."
 +
 +#: js/l10n.php:80
 +msgid "Feb."
 +msgstr "Feb."
 +
 +#: js/l10n.php:80
 +msgid "Mar."
 +msgstr "Mar."
 +
 +#: js/l10n.php:80
 +msgid "Apr."
 +msgstr "Abr."
 +
 +#: js/l10n.php:80
 +msgid "May."
 +msgstr "May."
 +
 +#: js/l10n.php:80
 +msgid "Jun."
 +msgstr "Jun."
 +
 +#: js/l10n.php:80
 +msgid "Jul."
 +msgstr "Jul."
 +
 +#: js/l10n.php:80
 +msgid "Aug."
 +msgstr "Ago."
 +
 +#: js/l10n.php:80
 +msgid "Sep."
 +msgstr "Sep."
 +
 +#: js/l10n.php:80
 +msgid "Oct."
 +msgstr "Oct."
 +
 +#: js/l10n.php:80
 +msgid "Nov."
 +msgstr "Nov."
 +
 +#: js/l10n.php:80
 +msgid "Dec."
 +msgstr "Dic."
 +
 +#: js/l10n.php:83
 +msgid "All day"
 +msgstr "Todo el día"
 +
 +#: js/l10n.php:84 lib/import.php:214 templates/settings.php:23
 +msgid "New Calendar"
 +msgstr "Nuevo calendario"
 +
 +#: js/l10n.php:85
 +msgid "Missing or invalid fields"
 +msgstr "Campos inválidos o faltantes"
 +
 +#: js/l10n.php:86 templates/part.eventform.php:16
 +#: templates/part.showevent.php:11
 +msgid "Title"
 +msgstr "Título"
 +
 +#: js/l10n.php:88
 +msgid "From Date"
 +msgstr "Desde la fecha"
 +
 +#: js/l10n.php:89
 +msgid "From Time"
 +msgstr "Desde la hora"
 +
 +#: js/l10n.php:90
 +msgid "To Date"
 +msgstr "Hasta la fecha"
 +
 +#: js/l10n.php:91
 +msgid "To Time"
 +msgstr "Hasta la hora"
 +
 +#: js/l10n.php:92
 +msgid "The event ends before it starts"
 +msgstr "El evento termina antes de comenzar"
 +
 +#: js/l10n.php:93
 +msgid "There was a database fail"
 +msgstr "Se produjo un error en la base de datos"
 +
 +#: lib/app.php:121
 +msgid "Birthday"
 +msgstr "Fecha de nacimiento"
 +
 +#: lib/app.php:122
 +msgid "Business"
 +msgstr "Negocios"
 +
 +#: lib/app.php:123
 +msgid "Call"
 +msgstr "Llamada"
 +
 +#: lib/app.php:124
 +msgid "Clients"
 +msgstr "Clientes"
 +
 +#: lib/app.php:125
 +msgid "Deliverer"
 +msgstr "Repartidor"
 +
 +#: lib/app.php:126
 +msgid "Holidays"
 +msgstr "Vacaciones"
 +
 +#: lib/app.php:127
 +msgid "Ideas"
 +msgstr "Ideas"
 +
 +#: lib/app.php:128
 +msgid "Journey"
 +msgstr "Viaje"
 +
 +#: lib/app.php:129
 +msgid "Jubilee"
 +msgstr "Aniversario"
 +
 +#: lib/app.php:130
 +msgid "Meeting"
 +msgstr "Reunión"
 +
 +#: lib/app.php:131
 +msgid "Other"
 +msgstr "Otro"
 +
 +#: lib/app.php:132
 +msgid "Personal"
 +msgstr "Personal"
 +
 +#: lib/app.php:133
 +msgid "Projects"
 +msgstr "Proyectos"
 +
 +#: lib/app.php:134
 +msgid "Questions"
 +msgstr "Preguntas"
 +
 +#: lib/app.php:135
 +msgid "Work"
 +msgstr "Trabajo"
 +
 +#: lib/app.php:411
 +msgid "by"
 +msgstr "por"
 +
 +#: lib/app.php:474
 +msgid "unnamed"
 +msgstr "Sin nombre"
 +
 +#: lib/calendar.php:178 lib/calendar.php:211
 +msgid "You do not have the permissions to update this calendar."
 +msgstr "No tiene los permisos para actualizar este calendario."
 +
 +#: lib/calendar.php:246
 +msgid "You do not have the permissions to delete this calendar."
 +msgstr "No tiene permiso para eliminar este calendario."
 +
 +#: lib/calendar.php:280
 +msgid "You do not have the permissions to add to this calendar."
 +msgstr "No tiene los permisos para añadir a este calendario."
 +
 +#: lib/object.php:122 lib/object.php:162 lib/object.php:317
 +msgid "You do not have the permissions to add events to this calendar."
 +msgstr "No tiene los permisos para añadir eventos a este calendario."
 +
 +#: lib/object.php:267 lib/object.php:297
 +msgid "You do not have the permissions to delete this event."
 +msgstr "No tiene los permisos para eliminar este evento."
 +
 +#: lib/object.php:491
 +msgid "Busy"
 +msgstr "Ocupado"
 +
 +#: lib/object.php:531
 +msgid "Public"
 +msgstr "Publico"
 +
 +#: lib/object.php:532
 +msgid "Private"
 +msgstr "Privado"
 +
 +#: lib/object.php:533
 +msgid "Confidential"
 +msgstr "Confidencial"
 +
 +#: lib/object.php:543
 +msgid "Does not repeat"
 +msgstr "No se repite"
 +
 +#: lib/object.php:544
 +msgid "Daily"
 +msgstr "Diariamente"
 +
 +#: lib/object.php:545
 +msgid "Weekly"
 +msgstr "Semanalmente"
 +
 +#: lib/object.php:546
 +msgid "Every Weekday"
 +msgstr "Todos los días laborables"
 +
 +#: lib/object.php:547
 +msgid "Bi-Weekly"
 +msgstr "Cada 2 semanas"
 +
 +#: lib/object.php:548
 +msgid "Monthly"
 +msgstr "Mensualmente"
 +
 +#: lib/object.php:549
 +msgid "Yearly"
 +msgstr "Anualmente"
 +
 +#: lib/object.php:559
 +msgid "never"
 +msgstr "nunca"
 +
 +#: lib/object.php:560
 +msgid "by occurrences"
 +msgstr "por ocurrencias"
 +
 +#: lib/object.php:561
 +msgid "by date"
 +msgstr "por fecha"
 +
 +#: lib/object.php:571
 +msgid "by monthday"
 +msgstr "por día del mes"
 +
 +#: lib/object.php:572
 +msgid "by weekday"
 +msgstr "por día de la semana"
 +
 +#: lib/object.php:598
 +msgid "events week of month"
 +msgstr "eventos de la semana del mes"
 +
 +#: lib/object.php:599
 +msgid "first"
 +msgstr "primero"
 +
 +#: lib/object.php:600
 +msgid "second"
 +msgstr "segundo"
 +
 +#: lib/object.php:601
 +msgid "third"
 +msgstr "tercer"
 +
 +#: lib/object.php:602
 +msgid "fourth"
 +msgstr "cuarto"
 +
 +#: lib/object.php:603
 +msgid "fifth"
 +msgstr "quinto"
 +
 +#: lib/object.php:604
 +msgid "last"
 +msgstr "último"
 +
 +#: lib/object.php:659
 +msgid "by events date"
 +msgstr "por fecha de eventos"
 +
 +#: lib/object.php:660
 +msgid "by yearday(s)"
 +msgstr "por día(s) del año"
 +
 +#: lib/object.php:661
 +msgid "by weeknumber(s)"
 +msgstr "por número(s) de semana"
 +
 +#: lib/object.php:662
 +msgid "by day and month"
 +msgstr "por día y mes"
 +
 +#: lib/sabre/backend.php:66
 +msgid "Contact birthdays"
 +msgstr "Cumpleaños de los contactos"
 +
 +#: lib/search.php:35 lib/search.php:37 lib/search.php:40
 +msgid "Date"
 +msgstr "Fecha"
 +
 +#: lib/search.php:43
 +msgid "Cal."
 +msgstr "Cal."
 +
 +#: templates/calendar.php:6
 +msgid "Week"
 +msgstr "Semana"
 +
 +#: templates/calendar.php:7
 +msgid "Month"
 +msgstr "Mes"
 +
 +#: templates/calendar.php:8
 +msgid "List"
 +msgstr "Lista"
 +
 +#: templates/calendar.php:12 templates/calendar.php:18
 +msgid "Today"
 +msgstr "Hoy"
 +
 +#: templates/calendar.php:13
 +msgid "Settings"
 +msgstr "Ajustes"
 +
 +#: templates/part.choosecalendar.rowfields.php:13
 +msgid "Share Calendar"
 +msgstr "Compartir calendario"
 +
 +#: templates/part.choosecalendar.rowfields.php:24 templates/settings.php:28
 +msgid "CalDav Link"
 +msgstr "Enlace CalDav"
 +
 +#: templates/part.choosecalendar.rowfields.php:27
 +msgid "Download"
 +msgstr "Descargar"
 +
 +#: templates/part.choosecalendar.rowfields.php:31
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: templates/part.choosecalendar.rowfields.php:36
 +#: templates/part.editevent.php:9
 +msgid "Delete"
 +msgstr "Eliminar"
 +
 +#: templates/part.editcalendar.php:9
 +msgid "New calendar"
 +msgstr "Nuevo calendario"
 +
 +#: templates/part.editcalendar.php:9
 +msgid "Edit calendar"
 +msgstr "Editar calendario"
 +
 +#: templates/part.editcalendar.php:12
 +msgid "Displayname"
 +msgstr "Nombre para mostrar"
 +
 +#: templates/part.editcalendar.php:23
 +msgid "Active"
 +msgstr "Activo"
 +
 +#: templates/part.editcalendar.php:29
 +msgid "Calendar color"
 +msgstr "Color del calendario"
 +
 +#: templates/part.editcalendar.php:42
 +msgid "Save"
 +msgstr "Guardar"
 +
 +#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
 +#: templates/part.newevent.php:6
 +msgid "Submit"
 +msgstr "Guardar"
 +
 +#: templates/part.editcalendar.php:43
 +msgid "Cancel"
 +msgstr "Cancelar"
 +
 +#: templates/part.editevent.php:1
 +msgid "Edit an event"
 +msgstr "Editar un evento"
 +
 +#: templates/part.editevent.php:10
 +msgid "Export"
 +msgstr "Exportar"
 +
 +#: templates/part.eventform.php:5 templates/part.showevent.php:3
 +msgid "Eventinfo"
- msgstr "Informaciónevento"
++msgstr "Información del evento"
 +
 +#: templates/part.eventform.php:6 templates/part.showevent.php:4
 +msgid "Repeating"
- msgstr "Repitiendo"
++msgstr "Repetición"
 +
 +#: templates/part.eventform.php:7 templates/part.showevent.php:5
 +msgid "Alarm"
 +msgstr "Alarma"
 +
 +#: templates/part.eventform.php:8 templates/part.showevent.php:6
 +msgid "Attendees"
 +msgstr "Asistentes"
 +
 +#: templates/part.eventform.php:10
 +msgid "Share"
 +msgstr "Compartir"
 +
 +#: templates/part.eventform.php:18
 +msgid "Title of the Event"
 +msgstr "Título del evento"
 +
 +#: templates/part.eventform.php:24 templates/part.showevent.php:19
 +msgid "Category"
 +msgstr "Categoría"
 +
 +#: templates/part.eventform.php:26
 +msgid "Separate categories with commas"
 +msgstr "Separar categorías con comas"
 +
 +#: templates/part.eventform.php:27
 +msgid "Edit categories"
 +msgstr "Editar categorías"
 +
 +#: templates/part.eventform.php:47 templates/part.showevent.php:50
 +msgid "Access Class"
 +msgstr "Clase de acceso"
 +
 +#: templates/part.eventform.php:64 templates/part.showevent.php:66
 +msgid "All Day Event"
- msgstr "Evento de día completo"
++msgstr "Todo el día"
 +
 +#: templates/part.eventform.php:68 templates/part.showevent.php:70
 +msgid "From"
 +msgstr "Desde"
 +
 +#: templates/part.eventform.php:76 templates/part.showevent.php:78
 +msgid "To"
 +msgstr "Hasta"
 +
 +#: templates/part.eventform.php:84 templates/part.showevent.php:86
 +msgid "Advanced options"
 +msgstr "Opciones avanzadas"
 +
 +#: templates/part.eventform.php:89 templates/part.showevent.php:91
 +msgid "Location"
 +msgstr "Ubicación"
 +
 +#: templates/part.eventform.php:91
 +msgid "Location of the Event"
 +msgstr "Ubicación del evento"
 +
 +#: templates/part.eventform.php:97 templates/part.showevent.php:99
 +msgid "Description"
 +msgstr "Descripción"
 +
 +#: templates/part.eventform.php:99
 +msgid "Description of the Event"
 +msgstr "Descripción del evento"
 +
 +#: templates/part.eventform.php:108 templates/part.showevent.php:109
 +msgid "Repeat"
 +msgstr "Repetir"
 +
 +#: templates/part.eventform.php:115 templates/part.showevent.php:116
 +msgid "Advanced"
 +msgstr "Avanzado"
 +
 +#: templates/part.eventform.php:159 templates/part.showevent.php:160
 +msgid "Select weekdays"
 +msgstr "Seleccionar días de la semana"
 +
 +#: templates/part.eventform.php:172 templates/part.eventform.php:185
 +#: templates/part.showevent.php:173 templates/part.showevent.php:186
 +msgid "Select days"
 +msgstr "Seleccionar días"
 +
 +#: templates/part.eventform.php:177 templates/part.showevent.php:178
 +msgid "and the events day of year."
 +msgstr "y el día del año de los eventos."
 +
 +#: templates/part.eventform.php:190 templates/part.showevent.php:191
 +msgid "and the events day of month."
 +msgstr "y el día del mes de los eventos."
 +
 +#: templates/part.eventform.php:198 templates/part.showevent.php:199
 +msgid "Select months"
 +msgstr "Seleccionar meses"
 +
 +#: templates/part.eventform.php:211 templates/part.showevent.php:212
 +msgid "Select weeks"
 +msgstr "Seleccionar semanas"
 +
 +#: templates/part.eventform.php:216 templates/part.showevent.php:217
 +msgid "and the events week of year."
 +msgstr "y la semana del año de los eventos."
 +
 +#: templates/part.eventform.php:222 templates/part.showevent.php:223
 +msgid "Interval"
 +msgstr "Intervalo"
 +
 +#: templates/part.eventform.php:228 templates/part.showevent.php:229
 +msgid "End"
 +msgstr "Fin"
 +
 +#: templates/part.eventform.php:241 templates/part.showevent.php:242
 +msgid "occurrences"
 +msgstr "ocurrencias"
 +
 +#: templates/part.import.php:14
 +msgid "create a new calendar"
 +msgstr "Crear un nuevo calendario"
 +
 +#: templates/part.import.php:17
 +msgid "Import a calendar file"
 +msgstr "Importar un archivo de calendario"
 +
 +#: templates/part.import.php:24
 +msgid "Please choose a calendar"
 +msgstr "Por favor, seleccione un calendario"
 +
 +#: templates/part.import.php:36
 +msgid "Name of new calendar"
 +msgstr "Nombre del nuevo calendario"
 +
 +#: templates/part.import.php:44
 +msgid "Take an available name!"
 +msgstr "¡Elija un nombre disponible!"
 +
 +#: templates/part.import.php:45
 +msgid ""
 +"A Calendar with this name already exists. If you continue anyhow, these "
 +"calendars will be merged."
 +msgstr "Un calendario con este nombre ya existe. Si aun así continua, estos calendarios se combinarán."
 +
 +#: templates/part.import.php:48
 +msgid "Remove all events from the selected calendar"
 +msgstr "Eliminar todos los eventos del calendario seleccionado"
 +
 +#: templates/part.import.php:50
 +msgid "Import"
 +msgstr "Importar"
 +
 +#: templates/part.import.php:59
 +msgid "Close Dialog"
 +msgstr "Cerrar diálogo"
 +
 +#: templates/part.newevent.php:1
 +msgid "Create a new event"
 +msgstr "Crear un nuevo evento"
 +
 +#: templates/part.share.php:31
 +msgid "Share with:"
 +msgstr "Compartir con:"
 +
 +#: templates/part.share.php:34
 +msgid "Shared with"
 +msgstr "Compartido con"
 +
 +#: templates/part.share.php:51 templates/part.share.php:82
 +msgid "Unshare"
 +msgstr "Dejar de compartir"
 +
 +#: templates/part.share.php:57
 +msgid "Nobody"
 +msgstr "Nadie"
 +
 +#: templates/part.share.php:61
 +msgid "Send Email"
 +msgstr "Enviar correo"
 +
 +#: templates/part.share.php:65
 +msgid "Shared via calendar"
 +msgstr "Compartido vía calendario"
 +
 +#: templates/part.share.php:88
 +msgid ""
 +"NOTE: Actions on events shared via calendar will affect the entire calendar "
 +"sharing."
 +msgstr "NOTA: las acciones sobre eventos compartidos a través del calendario afectarán a la compartición de todo el calendario."
 +
 +#: templates/part.showevent.php:1
 +msgid "View an event"
 +msgstr "Ver un evento"
 +
 +#: templates/part.showevent.php:23
 +msgid "No categories selected"
 +msgstr "Ninguna categoría seleccionada"
 +
 +#: templates/part.showevent.php:41
 +msgid "of"
 +msgstr "de"
 +
 +#: templates/part.showevent.php:73 templates/part.showevent.php:81
 +msgid "at"
 +msgstr "a las"
 +
 +#: templates/settings.php:2
 +msgid "Your calendars"
 +msgstr "Tus calendarios"
 +
 +#: templates/settings.php:34
 +msgid "General"
 +msgstr "General"
 +
 +#: templates/settings.php:39
 +msgid "Timezone"
 +msgstr "Zona horaria"
 +
 +#: templates/settings.php:70
 +msgid "Update timezone automatically"
 +msgstr "Actualizar zona horaria automáticamente"
 +
 +#: templates/settings.php:75
 +msgid "Time format"
 +msgstr "Formato de hora"
 +
 +#: templates/settings.php:80
 +msgid "24h"
 +msgstr "24h"
 +
 +#: templates/settings.php:81
 +msgid "12h"
 +msgstr "12h"
 +
 +#: templates/settings.php:87
 +msgid "Start week on"
 +msgstr "Comenzar semana en"
 +
 +#: templates/settings.php:100
 +msgid "Cache"
 +msgstr "Caché"
 +
 +#: templates/settings.php:104
 +msgid "Clear cache for repeating events"
 +msgstr "Limpiar caché de eventos recurrentes"
 +
 +#: templates/settings.php:109
 +msgid "URLs"
 +msgstr "URLs"
 +
 +#: templates/settings.php:111
 +msgid "Calendar CalDAV syncing addresses"
 +msgstr "Direcciones de sincronización de calendario CalDAV:"
 +
 +#: templates/settings.php:111
 +msgid "more info"
 +msgstr "Más información"
 +
 +#: templates/settings.php:113
 +msgid "Primary address (Kontact et al)"
 +msgstr "Dirección principal (Kontact y otros)"
 +
 +#: templates/settings.php:115
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:117
 +msgid "Read only iCalendar link(s)"
 +msgstr "Enlace(s) iCalendar de sólo lectura"
diff --cc apps/calendar/l10n/sl.php
index b8d44a8,0000000..4f93ff1
mode 100644,000000..100644
--- a/apps/calendar/l10n/sl.php
+++ b/apps/calendar/l10n/sl.php
@@@ -1,214 -1,0 +1,217 @@@
 +<?php $TRANSLATIONS = array(
 +"Not all calendars are completely cached" => "Vsi koledarji niso popolnoma predpomnjeni",
 +"Everything seems to be completely cached" => "Videti je, da so vsi predmeti predpomnjeni",
 +"No calendars found." => "Ni najdenih koledarjev.",
 +"No events found." => "Ni najdenih dogodkov.",
 +"Wrong calendar" => "Napačen koledar",
 +"You do not have the permissions to edit this event." => "Ni ustreznih dovoljenj za urejanje tega dogodka.",
 +"The file contained either no events or all events are already saved in your calendar." => "Datoteka ni vsebovala dogodkov, ali pa so vsi že shranjeni v koledarju.",
 +"events has been saved in the new calendar" => "dogodki so shranjeni v nov koledar",
 +"Import failed" => "Uvoz je spodletel",
 +"events has been saved in your calendar" => "dogodki so shranjeni v koledar",
 +"New Timezone:" => "Nov časovni pas:",
 +"Timezone changed" => "Časovni pas je spremenjen",
 +"Invalid request" => "Neveljavna zahteva",
 +"Calendar" => "Koledar",
 +"Deletion failed" => "Brisanje je spodletelo.",
 +"ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}" => "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}",
 +"ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}" => "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}",
 +"user" => "uporabnik",
 +"group" => "skupina",
 +"Editable" => "Uredljivo",
 +"Shareable" => "Dovoljena souporaba",
 +"Deletable" => "Dovoljen izbris",
 +"ddd" => "ddd",
 +"ddd M/d" => "ddd, d. M.",
 +"dddd M/d" => "dddd, d. M.",
 +"MMMM yyyy" => "MMMM yyyy",
++"MMM d[ yyyy]{ '–'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '–'[ MMM] d yyyy}",
 +"dddd, MMM d, yyyy" => "dddd, d. MMM, yyyy",
 +"Sunday" => "nedelja",
 +"Monday" => "ponedeljek",
 +"Tuesday" => "torek",
 +"Wednesday" => "sreda",
 +"Thursday" => "četrtek",
 +"Friday" => "petek",
 +"Saturday" => "sobota",
 +"Sun." => "ned",
 +"Mon." => "pon",
 +"Tue." => "tor",
 +"Wed." => "sre",
 +"Thu." => "čet",
 +"Fri." => "pet",
 +"Sat." => "sob",
 +"January" => "januar",
 +"February" => "februar",
 +"March" => "marec",
 +"April" => "april",
 +"May" => "maj",
 +"June" => "junij",
 +"July" => "julij",
 +"August" => "avgust",
 +"September" => "september",
 +"October" => "oktober",
 +"November" => "november",
 +"December" => "december",
 +"Jan." => "jan",
 +"Feb." => "feb",
 +"Mar." => "mar",
 +"Apr." => "apr",
 +"May." => "maj",
 +"Jun." => "jun",
 +"Jul." => "jul",
 +"Aug." => "avg",
 +"Sep." => "sep",
 +"Oct." => "okt",
 +"Nov." => "nov",
 +"Dec." => "dec",
 +"All day" => "Cel dan",
 +"New Calendar" => "Nov koledar",
 +"Missing or invalid fields" => "Manjkajoča ali neveljavna polja",
 +"Title" => "Naslov",
 +"From Date" => "Od datuma",
 +"From Time" => "Od časa",
 +"To Date" => "Do datuma",
 +"To Time" => "Do časa",
 +"The event ends before it starts" => "Dogodek se konča preden se začne",
 +"There was a database fail" => "Napaka v podatkovni zbirki",
 +"Birthday" => "Rojstni dan",
 +"Business" => "Poslovno",
 +"Call" => "Pokliči",
 +"Clients" => "Stranke",
 +"Deliverer" => "Dobavitelj",
 +"Holidays" => "Dopust",
 +"Ideas" => "Ideje",
 +"Journey" => "Potovanje",
 +"Jubilee" => "Obletnica",
 +"Meeting" => "Srečanje",
 +"Other" => "Drugo",
 +"Personal" => "Osebno",
 +"Projects" => "Projekti",
 +"Questions" => "Vprašanja",
 +"Work" => "Delo",
 +"by" => "od",
 +"unnamed" => "neimenovano",
 +"You do not have the permissions to update this calendar." => "Ni ustreznih dovoljenj za posodobitev tega koledarja.",
 +"You do not have the permissions to delete this calendar." => "Ni ustreznih dovoljenj za izbris tega koledarja.",
 +"You do not have the permissions to add to this calendar." => "Ni ustreznih dovoljenj za dodajanje tega koledarja.",
 +"You do not have the permissions to add events to this calendar." => "Ni ustreznih dovoljenj za dodajanje dogodkov v ta koledar.",
 +"You do not have the permissions to delete this event." => "Ni ustreznih dovoljenj za izbris tega dogodka.",
 +"Busy" => "Zasedeno",
 +"Public" => "Javno",
 +"Private" => "Zasebno",
 +"Confidential" => "Zaupno",
 +"Does not repeat" => "Se ne ponavlja",
 +"Daily" => "Dnevno",
 +"Weekly" => "Tedensko",
 +"Every Weekday" => "Vsak dan v tednu",
 +"Bi-Weekly" => "Dvakrat mesečno",
 +"Monthly" => "Mesečno",
 +"Yearly" => "Letno",
 +"never" => "nikoli",
 +"by occurrences" => "po pojavljanju",
 +"by date" => "po datumu",
 +"by monthday" => "po dnevu v mesecu",
 +"by weekday" => "po dnevu v tednu",
 +"events week of month" => "dogodki tedna v mesecu",
 +"first" => "prvi",
 +"second" => "drugi",
 +"third" => "tretji",
 +"fourth" => "četrti",
 +"fifth" => "peti",
 +"last" => "zadnji",
 +"by events date" => "po datumu dogodka",
 +"by yearday(s)" => "po številu let",
 +"by weeknumber(s)" => "po tednu v letu",
 +"by day and month" => "po dnevu in mesecu",
++"Contact birthdays" => "Rojstni dan stika",
 +"Date" => "Datum",
 +"Cal." => "Kol.",
 +"Week" => "Teden",
 +"Month" => "Mesec",
 +"List" => "Seznam",
 +"Today" => "Danes",
 +"Settings" => "Nastavitve",
 +"Share Calendar" => "Daj koledar v souporabo",
 +"CalDav Link" => "Povezava CalDav",
 +"Download" => "Prejmi",
 +"Edit" => "Uredi",
 +"Delete" => "Izbriši",
 +"New calendar" => "Nov koledar",
 +"Edit calendar" => "Uredi koledar",
 +"Displayname" => "Ime za prikaz",
 +"Active" => "Dejavno",
 +"Calendar color" => "Barva koledarja",
 +"Save" => "Shrani",
 +"Submit" => "Pošlji",
 +"Cancel" => "Prekliči",
 +"Edit an event" => "Uredi dogodek",
 +"Export" => "Izvozi",
 +"Eventinfo" => "Podrobnosti dogodka",
 +"Repeating" => "Ponavljanje",
 +"Alarm" => "Alarm",
 +"Attendees" => "Udeleženci",
 +"Share" => "Souporaba",
 +"Title of the Event" => "Naslov dogodka",
 +"Category" => "Kategorija",
 +"Separate categories with commas" => "Kategorije morajo biti ločene z vejico",
 +"Edit categories" => "Uredi kategorije",
 +"Access Class" => "Razred dostopa",
 +"All Day Event" => "Celodnevni dogodek",
 +"From" => "Od",
 +"To" => "Do",
 +"Advanced options" => "Napredne možnosti",
 +"Location" => "Mesto",
 +"Location of the Event" => "Mesto dogodka",
 +"Description" => "Opis",
 +"Description of the Event" => "Opis dogodka",
 +"Repeat" => "Ponovi",
 +"Advanced" => "Napredno",
 +"Select weekdays" => "Izbor delovnih dni tedna",
 +"Select days" => "Izberite dneve",
 +"and the events day of year." => "in dnevu dogodka v letu.",
 +"and the events day of month." => "in dnevu dogodka v mesecu.",
 +"Select months" => "Izberite mesece",
 +"Select weeks" => "Izberite tedne",
 +"and the events week of year." => "in tednu dogodka v letu.",
 +"Interval" => "Časovni razmik",
 +"End" => "Konec",
 +"occurrences" => "pojavitve",
 +"create a new calendar" => "Ustvari nov koledar",
 +"Import a calendar file" => "Uvozi datoteko koledarja",
 +"Please choose a calendar" => "Izberite koledar",
 +"Name of new calendar" => "Ime novega koledarja",
 +"Take an available name!" => "Izberite ime, ki še ni v uporabi!",
 +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Koledar s tem imenom že obstaja. Z nadaljevanjem bosta vsebini koledarjev združeni.",
 +"Remove all events from the selected calendar" => "Odstrani vse dogodke iz izbranega koledarja",
 +"Import" => "Uvozi",
 +"Close Dialog" => "Zapri pogovorno okno",
 +"Create a new event" => "Ustvari nov dogodek",
 +"Share with:" => "Daj v souporabo z:",
 +"Shared with" => "V souporabi z",
 +"Unshare" => "Prekliči souporabo",
 +"Nobody" => "Nihče",
++"Send Email" => "Pošlji elektronsko sporočilo",
 +"Shared via calendar" => "V souporabi preko koledarja",
 +"NOTE: Actions on events shared via calendar will affect the entire calendar sharing." => "OPOMBA: dejanja na dogodkih, ki so v souporabi preko koledarja, bodo vplivala na celotno souporabo koledarja.",
 +"View an event" => "Poglej dogodek",
 +"No categories selected" => "Ni izbrane kategorije",
 +"of" => "od",
 +"at" => "pri",
 +"Your calendars" => "Koledarji",
 +"General" => "Splošno",
 +"Timezone" => "Časovni pas",
 +"Update timezone automatically" => "Samodejno posodobi časovne podatke",
 +"Time format" => "Oblika zapisa časa",
 +"24h" => "24 ur",
 +"12h" => "12 ur",
 +"Start week on" => "Začni teden na",
 +"Cache" => "Predpomnilnik",
 +"Clear cache for repeating events" => "Počisti predpomnilnik ponavljajočih se dogodkov",
 +"URLs" => "Naslovi URL",
 +"Calendar CalDAV syncing addresses" => "Naslov CalDAV za usklajevanje koledarjev",
 +"more info" => "več podrobnosti",
 +"Primary address (Kontact et al)" => "Osnovni naslov (za stik)",
 +"iOS/OS X" => "iOS/OS X",
 +"Read only iCalendar link(s)" => "Povezave iCalendar le za branje"
 +);
diff --cc apps/calendar/l10n/sl/calendar.po
index a3c27a2,0000000..74460db
mode 100644,000000..100644
--- a/apps/calendar/l10n/sl/calendar.po
+++ b/apps/calendar/l10n/sl/calendar.po
@@@ -1,896 -1,0 +1,896 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mateju <>, 2013
 +# mateju <>, 2012
 +# blazlapanja <blaz.lapanja at gmail.com>, 2012
 +# mateju <>, 2013
 +# Peter Peroša <peter.perosa at gmail.com>, 2012
 +# Peter Peroša <peter.perosa at gmail.com>, 2012-2013
 +# urossolar <urossolar at hotmail.com>, 2011, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 04:55-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
- "Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
++"POT-Creation-Date: 2013-11-15 22:05-0500\n"
++"PO-Revision-Date: 2013-11-15 20:54+0000\n"
++"Last-Translator: mateju <>\n"
 +"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sl\n"
 +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
 +
 +#: ajax/cache/status.php:19
 +msgid "Not all calendars are completely cached"
 +msgstr "Vsi koledarji niso popolnoma predpomnjeni"
 +
 +#: ajax/cache/status.php:21
 +msgid "Everything seems to be completely cached"
 +msgstr "Videti je, da so vsi predmeti predpomnjeni"
 +
 +#: ajax/categories/rescan.php:29
 +msgid "No calendars found."
 +msgstr "Ni najdenih koledarjev."
 +
 +#: ajax/categories/rescan.php:37
 +msgid "No events found."
 +msgstr "Ni najdenih dogodkov."
 +
 +#: ajax/event/edit.form.php:21
 +msgid "Wrong calendar"
 +msgstr "Napačen koledar"
 +
 +#: ajax/event/edit.form.php:224 lib/object.php:197 lib/object.php:233
 +msgid "You do not have the permissions to edit this event."
 +msgstr "Ni ustreznih dovoljenj za urejanje tega dogodka."
 +
 +#: ajax/import/dropimport.php:29 ajax/import/import.php:66
 +msgid ""
 +"The file contained either no events or all events are already saved in your "
 +"calendar."
 +msgstr "Datoteka ni vsebovala dogodkov, ali pa so vsi že shranjeni v koledarju."
 +
 +#: ajax/import/dropimport.php:31 ajax/import/import.php:69
 +msgid "events has been saved in the new calendar"
 +msgstr "dogodki so shranjeni v nov koledar"
 +
 +#: ajax/import/import.php:58
 +msgid "Import failed"
 +msgstr "Uvoz je spodletel"
 +
 +#: ajax/import/import.php:71
 +msgid "events has been saved in your calendar"
 +msgstr "dogodki so shranjeni v koledar"
 +
 +#: ajax/settings/guesstimezone.php:26
 +msgid "New Timezone:"
 +msgstr "Nov časovni pas:"
 +
 +#: ajax/settings/settimezone.php:23
 +msgid "Timezone changed"
 +msgstr "Časovni pas je spremenjen"
 +
 +#: ajax/settings/settimezone.php:25
 +msgid "Invalid request"
 +msgstr "Neveljavna zahteva"
 +
 +#: appinfo/app.php:38 js/l10n.php:87 templates/part.eventform.php:30
 +#: templates/part.showevent.php:37
 +msgid "Calendar"
 +msgstr "Koledar"
 +
 +#: js/calendar.js:176
 +msgid "Deletion failed"
 +msgstr "Brisanje je spodletelo."
 +
 +#: js/calendar.js:265
 +msgid "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}"
 +msgstr "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}"
 +
 +#: js/calendar.js:267
 +msgid "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}"
 +msgstr "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}"
 +
 +#: js/calendar.js:624
 +msgid "user"
 +msgstr "uporabnik"
 +
 +#: js/calendar.js:624
 +msgid "group"
 +msgstr "skupina"
 +
 +#: js/calendar.js:625 templates/part.share.php:45 templates/part.share.php:76
 +msgid "Editable"
 +msgstr "Uredljivo"
 +
 +#: js/calendar.js:626 templates/part.share.php:47 templates/part.share.php:78
 +msgid "Shareable"
 +msgstr "Dovoljena souporaba"
 +
 +#: js/calendar.js:627 templates/part.share.php:49 templates/part.share.php:80
 +msgid "Deletable"
 +msgstr "Dovoljen izbris"
 +
- #: js/calendar.js:897
++#: js/calendar.js:900
 +msgid "ddd"
 +msgstr "ddd"
 +
- #: js/calendar.js:898
++#: js/calendar.js:901
 +msgid "ddd M/d"
 +msgstr "ddd, d. M."
 +
- #: js/calendar.js:899
++#: js/calendar.js:902
 +msgid "dddd M/d"
 +msgstr "dddd, d. M."
 +
- #: js/calendar.js:902
++#: js/calendar.js:905
 +msgid "MMMM yyyy"
 +msgstr "MMMM yyyy"
 +
- #: js/calendar.js:904
++#: js/calendar.js:907
 +msgid "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
- msgstr ""
++msgstr "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
 +
- #: js/calendar.js:906
++#: js/calendar.js:909
 +msgid "dddd, MMM d, yyyy"
 +msgstr "dddd, d. MMM, yyyy"
 +
 +#: js/l10n.php:77 lib/object.php:588 templates/settings.php:93
 +msgid "Sunday"
 +msgstr "nedelja"
 +
 +#: js/l10n.php:77 lib/object.php:582 templates/settings.php:92
 +msgid "Monday"
 +msgstr "ponedeljek"
 +
 +#: js/l10n.php:77 lib/object.php:583
 +msgid "Tuesday"
 +msgstr "torek"
 +
 +#: js/l10n.php:77 lib/object.php:584
 +msgid "Wednesday"
 +msgstr "sreda"
 +
 +#: js/l10n.php:77 lib/object.php:585
 +msgid "Thursday"
 +msgstr "četrtek"
 +
 +#: js/l10n.php:77 lib/object.php:586
 +msgid "Friday"
 +msgstr "petek"
 +
 +#: js/l10n.php:77 lib/object.php:587 templates/settings.php:94
 +msgid "Saturday"
 +msgstr "sobota"
 +
 +#: js/l10n.php:78
 +msgid "Sun."
 +msgstr "ned"
 +
 +#: js/l10n.php:78
 +msgid "Mon."
 +msgstr "pon"
 +
 +#: js/l10n.php:78
 +msgid "Tue."
 +msgstr "tor"
 +
 +#: js/l10n.php:78
 +msgid "Wed."
 +msgstr "sre"
 +
 +#: js/l10n.php:78
 +msgid "Thu."
 +msgstr "čet"
 +
 +#: js/l10n.php:78
 +msgid "Fri."
 +msgstr "pet"
 +
 +#: js/l10n.php:78
 +msgid "Sat."
 +msgstr "sob"
 +
 +#: js/l10n.php:79 lib/object.php:638
 +msgid "January"
 +msgstr "januar"
 +
 +#: js/l10n.php:79 lib/object.php:639
 +msgid "February"
 +msgstr "februar"
 +
 +#: js/l10n.php:79 lib/object.php:640
 +msgid "March"
 +msgstr "marec"
 +
 +#: js/l10n.php:79 lib/object.php:641
 +msgid "April"
 +msgstr "april"
 +
 +#: js/l10n.php:79 lib/object.php:642
 +msgid "May"
 +msgstr "maj"
 +
 +#: js/l10n.php:79 lib/object.php:643
 +msgid "June"
 +msgstr "junij"
 +
 +#: js/l10n.php:79 lib/object.php:644
 +msgid "July"
 +msgstr "julij"
 +
 +#: js/l10n.php:79 lib/object.php:645
 +msgid "August"
 +msgstr "avgust"
 +
 +#: js/l10n.php:79 lib/object.php:646
 +msgid "September"
 +msgstr "september"
 +
 +#: js/l10n.php:79 lib/object.php:647
 +msgid "October"
 +msgstr "oktober"
 +
 +#: js/l10n.php:79 lib/object.php:648
 +msgid "November"
 +msgstr "november"
 +
 +#: js/l10n.php:79 lib/object.php:649
 +msgid "December"
 +msgstr "december"
 +
 +#: js/l10n.php:80
 +msgid "Jan."
 +msgstr "jan"
 +
 +#: js/l10n.php:80
 +msgid "Feb."
 +msgstr "feb"
 +
 +#: js/l10n.php:80
 +msgid "Mar."
 +msgstr "mar"
 +
 +#: js/l10n.php:80
 +msgid "Apr."
 +msgstr "apr"
 +
 +#: js/l10n.php:80
 +msgid "May."
 +msgstr "maj"
 +
 +#: js/l10n.php:80
 +msgid "Jun."
 +msgstr "jun"
 +
 +#: js/l10n.php:80
 +msgid "Jul."
 +msgstr "jul"
 +
 +#: js/l10n.php:80
 +msgid "Aug."
 +msgstr "avg"
 +
 +#: js/l10n.php:80
 +msgid "Sep."
 +msgstr "sep"
 +
 +#: js/l10n.php:80
 +msgid "Oct."
 +msgstr "okt"
 +
 +#: js/l10n.php:80
 +msgid "Nov."
 +msgstr "nov"
 +
 +#: js/l10n.php:80
 +msgid "Dec."
 +msgstr "dec"
 +
 +#: js/l10n.php:83
 +msgid "All day"
 +msgstr "Cel dan"
 +
 +#: js/l10n.php:84 lib/import.php:214 templates/settings.php:23
 +msgid "New Calendar"
 +msgstr "Nov koledar"
 +
 +#: js/l10n.php:85
 +msgid "Missing or invalid fields"
 +msgstr "Manjkajoča ali neveljavna polja"
 +
 +#: js/l10n.php:86 templates/part.eventform.php:16
 +#: templates/part.showevent.php:11
 +msgid "Title"
 +msgstr "Naslov"
 +
 +#: js/l10n.php:88
 +msgid "From Date"
 +msgstr "Od datuma"
 +
 +#: js/l10n.php:89
 +msgid "From Time"
 +msgstr "Od časa"
 +
 +#: js/l10n.php:90
 +msgid "To Date"
 +msgstr "Do datuma"
 +
 +#: js/l10n.php:91
 +msgid "To Time"
 +msgstr "Do časa"
 +
 +#: js/l10n.php:92
 +msgid "The event ends before it starts"
 +msgstr "Dogodek se konča preden se začne"
 +
 +#: js/l10n.php:93
 +msgid "There was a database fail"
 +msgstr "Napaka v podatkovni zbirki"
 +
 +#: lib/app.php:121
 +msgid "Birthday"
 +msgstr "Rojstni dan"
 +
 +#: lib/app.php:122
 +msgid "Business"
 +msgstr "Poslovno"
 +
 +#: lib/app.php:123
 +msgid "Call"
 +msgstr "Pokliči"
 +
 +#: lib/app.php:124
 +msgid "Clients"
 +msgstr "Stranke"
 +
 +#: lib/app.php:125
 +msgid "Deliverer"
 +msgstr "Dobavitelj"
 +
 +#: lib/app.php:126
 +msgid "Holidays"
 +msgstr "Dopust"
 +
 +#: lib/app.php:127
 +msgid "Ideas"
 +msgstr "Ideje"
 +
 +#: lib/app.php:128
 +msgid "Journey"
 +msgstr "Potovanje"
 +
 +#: lib/app.php:129
 +msgid "Jubilee"
 +msgstr "Obletnica"
 +
 +#: lib/app.php:130
 +msgid "Meeting"
 +msgstr "Srečanje"
 +
 +#: lib/app.php:131
 +msgid "Other"
 +msgstr "Drugo"
 +
 +#: lib/app.php:132
 +msgid "Personal"
 +msgstr "Osebno"
 +
 +#: lib/app.php:133
 +msgid "Projects"
 +msgstr "Projekti"
 +
 +#: lib/app.php:134
 +msgid "Questions"
 +msgstr "Vprašanja"
 +
 +#: lib/app.php:135
 +msgid "Work"
 +msgstr "Delo"
 +
 +#: lib/app.php:411
 +msgid "by"
 +msgstr "od"
 +
 +#: lib/app.php:474
 +msgid "unnamed"
 +msgstr "neimenovano"
 +
 +#: lib/calendar.php:178 lib/calendar.php:211
 +msgid "You do not have the permissions to update this calendar."
 +msgstr "Ni ustreznih dovoljenj za posodobitev tega koledarja."
 +
 +#: lib/calendar.php:246
 +msgid "You do not have the permissions to delete this calendar."
 +msgstr "Ni ustreznih dovoljenj za izbris tega koledarja."
 +
 +#: lib/calendar.php:280
 +msgid "You do not have the permissions to add to this calendar."
 +msgstr "Ni ustreznih dovoljenj za dodajanje tega koledarja."
 +
 +#: lib/object.php:122 lib/object.php:162 lib/object.php:317
 +msgid "You do not have the permissions to add events to this calendar."
 +msgstr "Ni ustreznih dovoljenj za dodajanje dogodkov v ta koledar."
 +
 +#: lib/object.php:267 lib/object.php:297
 +msgid "You do not have the permissions to delete this event."
 +msgstr "Ni ustreznih dovoljenj za izbris tega dogodka."
 +
 +#: lib/object.php:491
 +msgid "Busy"
 +msgstr "Zasedeno"
 +
 +#: lib/object.php:531
 +msgid "Public"
 +msgstr "Javno"
 +
 +#: lib/object.php:532
 +msgid "Private"
 +msgstr "Zasebno"
 +
 +#: lib/object.php:533
 +msgid "Confidential"
 +msgstr "Zaupno"
 +
 +#: lib/object.php:543
 +msgid "Does not repeat"
 +msgstr "Se ne ponavlja"
 +
 +#: lib/object.php:544
 +msgid "Daily"
 +msgstr "Dnevno"
 +
 +#: lib/object.php:545
 +msgid "Weekly"
 +msgstr "Tedensko"
 +
 +#: lib/object.php:546
 +msgid "Every Weekday"
 +msgstr "Vsak dan v tednu"
 +
 +#: lib/object.php:547
 +msgid "Bi-Weekly"
 +msgstr "Dvakrat mesečno"
 +
 +#: lib/object.php:548
 +msgid "Monthly"
 +msgstr "Mesečno"
 +
 +#: lib/object.php:549
 +msgid "Yearly"
 +msgstr "Letno"
 +
 +#: lib/object.php:559
 +msgid "never"
 +msgstr "nikoli"
 +
 +#: lib/object.php:560
 +msgid "by occurrences"
 +msgstr "po pojavljanju"
 +
 +#: lib/object.php:561
 +msgid "by date"
 +msgstr "po datumu"
 +
 +#: lib/object.php:571
 +msgid "by monthday"
 +msgstr "po dnevu v mesecu"
 +
 +#: lib/object.php:572
 +msgid "by weekday"
 +msgstr "po dnevu v tednu"
 +
 +#: lib/object.php:598
 +msgid "events week of month"
 +msgstr "dogodki tedna v mesecu"
 +
 +#: lib/object.php:599
 +msgid "first"
 +msgstr "prvi"
 +
 +#: lib/object.php:600
 +msgid "second"
 +msgstr "drugi"
 +
 +#: lib/object.php:601
 +msgid "third"
 +msgstr "tretji"
 +
 +#: lib/object.php:602
 +msgid "fourth"
 +msgstr "četrti"
 +
 +#: lib/object.php:603
 +msgid "fifth"
 +msgstr "peti"
 +
 +#: lib/object.php:604
 +msgid "last"
 +msgstr "zadnji"
 +
 +#: lib/object.php:659
 +msgid "by events date"
 +msgstr "po datumu dogodka"
 +
 +#: lib/object.php:660
 +msgid "by yearday(s)"
 +msgstr "po številu let"
 +
 +#: lib/object.php:661
 +msgid "by weeknumber(s)"
 +msgstr "po tednu v letu"
 +
 +#: lib/object.php:662
 +msgid "by day and month"
 +msgstr "po dnevu in mesecu"
 +
 +#: lib/sabre/backend.php:66
 +msgid "Contact birthdays"
- msgstr ""
++msgstr "Rojstni dan stika"
 +
 +#: lib/search.php:35 lib/search.php:37 lib/search.php:40
 +msgid "Date"
 +msgstr "Datum"
 +
 +#: lib/search.php:43
 +msgid "Cal."
 +msgstr "Kol."
 +
 +#: templates/calendar.php:6
 +msgid "Week"
 +msgstr "Teden"
 +
 +#: templates/calendar.php:7
 +msgid "Month"
 +msgstr "Mesec"
 +
 +#: templates/calendar.php:8
 +msgid "List"
 +msgstr "Seznam"
 +
 +#: templates/calendar.php:12 templates/calendar.php:18
 +msgid "Today"
 +msgstr "Danes"
 +
 +#: templates/calendar.php:13
 +msgid "Settings"
 +msgstr "Nastavitve"
 +
 +#: templates/part.choosecalendar.rowfields.php:13
 +msgid "Share Calendar"
 +msgstr "Daj koledar v souporabo"
 +
 +#: templates/part.choosecalendar.rowfields.php:24 templates/settings.php:28
 +msgid "CalDav Link"
 +msgstr "Povezava CalDav"
 +
 +#: templates/part.choosecalendar.rowfields.php:27
 +msgid "Download"
 +msgstr "Prejmi"
 +
 +#: templates/part.choosecalendar.rowfields.php:31
 +msgid "Edit"
 +msgstr "Uredi"
 +
 +#: templates/part.choosecalendar.rowfields.php:36
 +#: templates/part.editevent.php:9
 +msgid "Delete"
 +msgstr "Izbriši"
 +
 +#: templates/part.editcalendar.php:9
 +msgid "New calendar"
 +msgstr "Nov koledar"
 +
 +#: templates/part.editcalendar.php:9
 +msgid "Edit calendar"
 +msgstr "Uredi koledar"
 +
 +#: templates/part.editcalendar.php:12
 +msgid "Displayname"
 +msgstr "Ime za prikaz"
 +
 +#: templates/part.editcalendar.php:23
 +msgid "Active"
 +msgstr "Dejavno"
 +
 +#: templates/part.editcalendar.php:29
 +msgid "Calendar color"
 +msgstr "Barva koledarja"
 +
 +#: templates/part.editcalendar.php:42
 +msgid "Save"
 +msgstr "Shrani"
 +
 +#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
 +#: templates/part.newevent.php:6
 +msgid "Submit"
 +msgstr "Pošlji"
 +
 +#: templates/part.editcalendar.php:43
 +msgid "Cancel"
 +msgstr "Prekliči"
 +
 +#: templates/part.editevent.php:1
 +msgid "Edit an event"
 +msgstr "Uredi dogodek"
 +
 +#: templates/part.editevent.php:10
 +msgid "Export"
 +msgstr "Izvozi"
 +
 +#: templates/part.eventform.php:5 templates/part.showevent.php:3
 +msgid "Eventinfo"
 +msgstr "Podrobnosti dogodka"
 +
 +#: templates/part.eventform.php:6 templates/part.showevent.php:4
 +msgid "Repeating"
 +msgstr "Ponavljanje"
 +
 +#: templates/part.eventform.php:7 templates/part.showevent.php:5
 +msgid "Alarm"
 +msgstr "Alarm"
 +
 +#: templates/part.eventform.php:8 templates/part.showevent.php:6
 +msgid "Attendees"
 +msgstr "Udeleženci"
 +
 +#: templates/part.eventform.php:10
 +msgid "Share"
 +msgstr "Souporaba"
 +
 +#: templates/part.eventform.php:18
 +msgid "Title of the Event"
 +msgstr "Naslov dogodka"
 +
 +#: templates/part.eventform.php:24 templates/part.showevent.php:19
 +msgid "Category"
 +msgstr "Kategorija"
 +
 +#: templates/part.eventform.php:26
 +msgid "Separate categories with commas"
 +msgstr "Kategorije morajo biti ločene z vejico"
 +
 +#: templates/part.eventform.php:27
 +msgid "Edit categories"
 +msgstr "Uredi kategorije"
 +
 +#: templates/part.eventform.php:47 templates/part.showevent.php:50
 +msgid "Access Class"
 +msgstr "Razred dostopa"
 +
 +#: templates/part.eventform.php:64 templates/part.showevent.php:66
 +msgid "All Day Event"
 +msgstr "Celodnevni dogodek"
 +
 +#: templates/part.eventform.php:68 templates/part.showevent.php:70
 +msgid "From"
 +msgstr "Od"
 +
 +#: templates/part.eventform.php:76 templates/part.showevent.php:78
 +msgid "To"
 +msgstr "Do"
 +
 +#: templates/part.eventform.php:84 templates/part.showevent.php:86
 +msgid "Advanced options"
 +msgstr "Napredne možnosti"
 +
 +#: templates/part.eventform.php:89 templates/part.showevent.php:91
 +msgid "Location"
 +msgstr "Mesto"
 +
 +#: templates/part.eventform.php:91
 +msgid "Location of the Event"
 +msgstr "Mesto dogodka"
 +
 +#: templates/part.eventform.php:97 templates/part.showevent.php:99
 +msgid "Description"
 +msgstr "Opis"
 +
 +#: templates/part.eventform.php:99
 +msgid "Description of the Event"
 +msgstr "Opis dogodka"
 +
 +#: templates/part.eventform.php:108 templates/part.showevent.php:109
 +msgid "Repeat"
 +msgstr "Ponovi"
 +
 +#: templates/part.eventform.php:115 templates/part.showevent.php:116
 +msgid "Advanced"
 +msgstr "Napredno"
 +
 +#: templates/part.eventform.php:159 templates/part.showevent.php:160
 +msgid "Select weekdays"
 +msgstr "Izbor delovnih dni tedna"
 +
 +#: templates/part.eventform.php:172 templates/part.eventform.php:185
 +#: templates/part.showevent.php:173 templates/part.showevent.php:186
 +msgid "Select days"
 +msgstr "Izberite dneve"
 +
 +#: templates/part.eventform.php:177 templates/part.showevent.php:178
 +msgid "and the events day of year."
 +msgstr "in dnevu dogodka v letu."
 +
 +#: templates/part.eventform.php:190 templates/part.showevent.php:191
 +msgid "and the events day of month."
 +msgstr "in dnevu dogodka v mesecu."
 +
 +#: templates/part.eventform.php:198 templates/part.showevent.php:199
 +msgid "Select months"
 +msgstr "Izberite mesece"
 +
 +#: templates/part.eventform.php:211 templates/part.showevent.php:212
 +msgid "Select weeks"
 +msgstr "Izberite tedne"
 +
 +#: templates/part.eventform.php:216 templates/part.showevent.php:217
 +msgid "and the events week of year."
 +msgstr "in tednu dogodka v letu."
 +
 +#: templates/part.eventform.php:222 templates/part.showevent.php:223
 +msgid "Interval"
 +msgstr "Časovni razmik"
 +
 +#: templates/part.eventform.php:228 templates/part.showevent.php:229
 +msgid "End"
 +msgstr "Konec"
 +
 +#: templates/part.eventform.php:241 templates/part.showevent.php:242
 +msgid "occurrences"
 +msgstr "pojavitve"
 +
 +#: templates/part.import.php:14
 +msgid "create a new calendar"
 +msgstr "Ustvari nov koledar"
 +
 +#: templates/part.import.php:17
 +msgid "Import a calendar file"
 +msgstr "Uvozi datoteko koledarja"
 +
 +#: templates/part.import.php:24
 +msgid "Please choose a calendar"
 +msgstr "Izberite koledar"
 +
 +#: templates/part.import.php:36
 +msgid "Name of new calendar"
 +msgstr "Ime novega koledarja"
 +
 +#: templates/part.import.php:44
 +msgid "Take an available name!"
 +msgstr "Izberite ime, ki še ni v uporabi!"
 +
 +#: templates/part.import.php:45
 +msgid ""
 +"A Calendar with this name already exists. If you continue anyhow, these "
 +"calendars will be merged."
 +msgstr "Koledar s tem imenom že obstaja. Z nadaljevanjem bosta vsebini koledarjev združeni."
 +
 +#: templates/part.import.php:48
 +msgid "Remove all events from the selected calendar"
 +msgstr "Odstrani vse dogodke iz izbranega koledarja"
 +
 +#: templates/part.import.php:50
 +msgid "Import"
 +msgstr "Uvozi"
 +
 +#: templates/part.import.php:59
 +msgid "Close Dialog"
 +msgstr "Zapri pogovorno okno"
 +
 +#: templates/part.newevent.php:1
 +msgid "Create a new event"
 +msgstr "Ustvari nov dogodek"
 +
 +#: templates/part.share.php:31
 +msgid "Share with:"
 +msgstr "Daj v souporabo z:"
 +
 +#: templates/part.share.php:34
 +msgid "Shared with"
 +msgstr "V souporabi z"
 +
 +#: templates/part.share.php:51 templates/part.share.php:82
 +msgid "Unshare"
 +msgstr "Prekliči souporabo"
 +
 +#: templates/part.share.php:57
 +msgid "Nobody"
 +msgstr "Nihče"
 +
 +#: templates/part.share.php:61
 +msgid "Send Email"
- msgstr ""
++msgstr "Pošlji elektronsko sporočilo"
 +
 +#: templates/part.share.php:65
 +msgid "Shared via calendar"
 +msgstr "V souporabi preko koledarja"
 +
 +#: templates/part.share.php:88
 +msgid ""
 +"NOTE: Actions on events shared via calendar will affect the entire calendar "
 +"sharing."
 +msgstr "OPOMBA: dejanja na dogodkih, ki so v souporabi preko koledarja, bodo vplivala na celotno souporabo koledarja."
 +
 +#: templates/part.showevent.php:1
 +msgid "View an event"
 +msgstr "Poglej dogodek"
 +
 +#: templates/part.showevent.php:23
 +msgid "No categories selected"
 +msgstr "Ni izbrane kategorije"
 +
 +#: templates/part.showevent.php:41
 +msgid "of"
 +msgstr "od"
 +
 +#: templates/part.showevent.php:73 templates/part.showevent.php:81
 +msgid "at"
 +msgstr "pri"
 +
 +#: templates/settings.php:2
 +msgid "Your calendars"
 +msgstr "Koledarji"
 +
 +#: templates/settings.php:34
 +msgid "General"
 +msgstr "Splošno"
 +
 +#: templates/settings.php:39
 +msgid "Timezone"
 +msgstr "Časovni pas"
 +
 +#: templates/settings.php:70
 +msgid "Update timezone automatically"
 +msgstr "Samodejno posodobi časovne podatke"
 +
 +#: templates/settings.php:75
 +msgid "Time format"
 +msgstr "Oblika zapisa časa"
 +
 +#: templates/settings.php:80
 +msgid "24h"
 +msgstr "24 ur"
 +
 +#: templates/settings.php:81
 +msgid "12h"
 +msgstr "12 ur"
 +
 +#: templates/settings.php:87
 +msgid "Start week on"
 +msgstr "Začni teden na"
 +
 +#: templates/settings.php:100
 +msgid "Cache"
 +msgstr "Predpomnilnik"
 +
 +#: templates/settings.php:104
 +msgid "Clear cache for repeating events"
 +msgstr "Počisti predpomnilnik ponavljajočih se dogodkov"
 +
 +#: templates/settings.php:109
 +msgid "URLs"
 +msgstr "Naslovi URL"
 +
 +#: templates/settings.php:111
 +msgid "Calendar CalDAV syncing addresses"
 +msgstr "Naslov CalDAV za usklajevanje koledarjev"
 +
 +#: templates/settings.php:111
 +msgid "more info"
 +msgstr "več podrobnosti"
 +
 +#: templates/settings.php:113
 +msgid "Primary address (Kontact et al)"
 +msgstr "Osnovni naslov (za stik)"
 +
 +#: templates/settings.php:115
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:117
 +msgid "Read only iCalendar link(s)"
 +msgstr "Povezave iCalendar le za branje"
diff --cc apps/calendar/l10n/templates/calendar.pot
index 2be31f0,0000000..a6094f6
mode 100644,000000..100644
--- a/apps/calendar/l10n/templates/calendar.pot
+++ b/apps/calendar/l10n/templates/calendar.pot
@@@ -1,889 -1,0 +1,889 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 +#
 +#, fuzzy
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud calendar 5.0.0\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 04:55-0500\n"
++"POT-Creation-Date: 2013-11-15 22:05-0500\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"
 +"Language: \n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +
 +#: ajax/cache/status.php:19
 +msgid "Not all calendars are completely cached"
 +msgstr ""
 +
 +#: ajax/cache/status.php:21
 +msgid "Everything seems to be completely cached"
 +msgstr ""
 +
 +#: ajax/categories/rescan.php:29
 +msgid "No calendars found."
 +msgstr ""
 +
 +#: ajax/categories/rescan.php:37
 +msgid "No events found."
 +msgstr ""
 +
 +#: ajax/event/edit.form.php:21
 +msgid "Wrong calendar"
 +msgstr ""
 +
 +#: ajax/event/edit.form.php:224 lib/object.php:197 lib/object.php:233
 +msgid "You do not have the permissions to edit this event."
 +msgstr ""
 +
 +#: ajax/import/dropimport.php:29 ajax/import/import.php:66
 +msgid ""
 +"The file contained either no events or all events are already saved in your "
 +"calendar."
 +msgstr ""
 +
 +#: ajax/import/dropimport.php:31 ajax/import/import.php:69
 +msgid "events has been saved in the new calendar"
 +msgstr ""
 +
 +#: ajax/import/import.php:58
 +msgid "Import failed"
 +msgstr ""
 +
 +#: ajax/import/import.php:71
 +msgid "events has been saved in your calendar"
 +msgstr ""
 +
 +#: ajax/settings/guesstimezone.php:26
 +msgid "New Timezone:"
 +msgstr ""
 +
 +#: ajax/settings/settimezone.php:23
 +msgid "Timezone changed"
 +msgstr ""
 +
 +#: ajax/settings/settimezone.php:25
 +msgid "Invalid request"
 +msgstr ""
 +
 +#: appinfo/app.php:38 js/l10n.php:87 templates/part.eventform.php:30
 +#: templates/part.showevent.php:37
 +msgid "Calendar"
 +msgstr ""
 +
 +#: js/calendar.js:176
 +msgid "Deletion failed"
 +msgstr ""
 +
 +#: js/calendar.js:265
 +msgid "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}"
 +msgstr ""
 +
 +#: js/calendar.js:267
 +msgid "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}"
 +msgstr ""
 +
 +#: js/calendar.js:624
 +msgid "user"
 +msgstr ""
 +
 +#: js/calendar.js:624
 +msgid "group"
 +msgstr ""
 +
 +#: js/calendar.js:625 templates/part.share.php:45 templates/part.share.php:76
 +msgid "Editable"
 +msgstr ""
 +
 +#: js/calendar.js:626 templates/part.share.php:47 templates/part.share.php:78
 +msgid "Shareable"
 +msgstr ""
 +
 +#: js/calendar.js:627 templates/part.share.php:49 templates/part.share.php:80
 +msgid "Deletable"
 +msgstr ""
 +
- #: js/calendar.js:897
++#: js/calendar.js:900
 +msgid "ddd"
 +msgstr ""
 +
- #: js/calendar.js:898
++#: js/calendar.js:901
 +msgid "ddd M/d"
 +msgstr ""
 +
- #: js/calendar.js:899
++#: js/calendar.js:902
 +msgid "dddd M/d"
 +msgstr ""
 +
- #: js/calendar.js:902
++#: js/calendar.js:905
 +msgid "MMMM yyyy"
 +msgstr ""
 +
- #: js/calendar.js:904
++#: js/calendar.js:907
 +msgid "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
 +msgstr ""
 +
- #: js/calendar.js:906
++#: js/calendar.js:909
 +msgid "dddd, MMM d, yyyy"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:588 templates/settings.php:93
 +msgid "Sunday"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:582 templates/settings.php:92
 +msgid "Monday"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:583
 +msgid "Tuesday"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:584
 +msgid "Wednesday"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:585
 +msgid "Thursday"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:586
 +msgid "Friday"
 +msgstr ""
 +
 +#: js/l10n.php:77 lib/object.php:587 templates/settings.php:94
 +msgid "Saturday"
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Sun."
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Mon."
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Tue."
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Wed."
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Thu."
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Fri."
 +msgstr ""
 +
 +#: js/l10n.php:78
 +msgid "Sat."
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:638
 +msgid "January"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:639
 +msgid "February"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:640
 +msgid "March"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:641
 +msgid "April"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:642
 +msgid "May"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:643
 +msgid "June"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:644
 +msgid "July"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:645
 +msgid "August"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:646
 +msgid "September"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:647
 +msgid "October"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:648
 +msgid "November"
 +msgstr ""
 +
 +#: js/l10n.php:79 lib/object.php:649
 +msgid "December"
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Jan."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Feb."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Mar."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Apr."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "May."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Jun."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Jul."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Aug."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Sep."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Oct."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Nov."
 +msgstr ""
 +
 +#: js/l10n.php:80
 +msgid "Dec."
 +msgstr ""
 +
 +#: js/l10n.php:83
 +msgid "All day"
 +msgstr ""
 +
 +#: js/l10n.php:84 lib/import.php:214 templates/settings.php:23
 +msgid "New Calendar"
 +msgstr ""
 +
 +#: js/l10n.php:85
 +msgid "Missing or invalid fields"
 +msgstr ""
 +
 +#: js/l10n.php:86 templates/part.eventform.php:16
 +#: templates/part.showevent.php:11
 +msgid "Title"
 +msgstr ""
 +
 +#: js/l10n.php:88
 +msgid "From Date"
 +msgstr ""
 +
 +#: js/l10n.php:89
 +msgid "From Time"
 +msgstr ""
 +
 +#: js/l10n.php:90
 +msgid "To Date"
 +msgstr ""
 +
 +#: js/l10n.php:91
 +msgid "To Time"
 +msgstr ""
 +
 +#: js/l10n.php:92
 +msgid "The event ends before it starts"
 +msgstr ""
 +
 +#: js/l10n.php:93
 +msgid "There was a database fail"
 +msgstr ""
 +
 +#: lib/app.php:121
 +msgid "Birthday"
 +msgstr ""
 +
 +#: lib/app.php:122
 +msgid "Business"
 +msgstr ""
 +
 +#: lib/app.php:123
 +msgid "Call"
 +msgstr ""
 +
 +#: lib/app.php:124
 +msgid "Clients"
 +msgstr ""
 +
 +#: lib/app.php:125
 +msgid "Deliverer"
 +msgstr ""
 +
 +#: lib/app.php:126
 +msgid "Holidays"
 +msgstr ""
 +
 +#: lib/app.php:127
 +msgid "Ideas"
 +msgstr ""
 +
 +#: lib/app.php:128
 +msgid "Journey"
 +msgstr ""
 +
 +#: lib/app.php:129
 +msgid "Jubilee"
 +msgstr ""
 +
 +#: lib/app.php:130
 +msgid "Meeting"
 +msgstr ""
 +
 +#: lib/app.php:131
 +msgid "Other"
 +msgstr ""
 +
 +#: lib/app.php:132
 +msgid "Personal"
 +msgstr ""
 +
 +#: lib/app.php:133
 +msgid "Projects"
 +msgstr ""
 +
 +#: lib/app.php:134
 +msgid "Questions"
 +msgstr ""
 +
 +#: lib/app.php:135
 +msgid "Work"
 +msgstr ""
 +
 +#: lib/app.php:411
 +msgid "by"
 +msgstr ""
 +
 +#: lib/app.php:474
 +msgid "unnamed"
 +msgstr ""
 +
 +#: lib/calendar.php:178 lib/calendar.php:211
 +msgid "You do not have the permissions to update this calendar."
 +msgstr ""
 +
 +#: lib/calendar.php:246
 +msgid "You do not have the permissions to delete this calendar."
 +msgstr ""
 +
 +#: lib/calendar.php:280
 +msgid "You do not have the permissions to add to this calendar."
 +msgstr ""
 +
 +#: lib/object.php:122 lib/object.php:162 lib/object.php:317
 +msgid "You do not have the permissions to add events to this calendar."
 +msgstr ""
 +
 +#: lib/object.php:267 lib/object.php:297
 +msgid "You do not have the permissions to delete this event."
 +msgstr ""
 +
 +#: lib/object.php:491
 +msgid "Busy"
 +msgstr ""
 +
 +#: lib/object.php:531
 +msgid "Public"
 +msgstr ""
 +
 +#: lib/object.php:532
 +msgid "Private"
 +msgstr ""
 +
 +#: lib/object.php:533
 +msgid "Confidential"
 +msgstr ""
 +
 +#: lib/object.php:543
 +msgid "Does not repeat"
 +msgstr ""
 +
 +#: lib/object.php:544
 +msgid "Daily"
 +msgstr ""
 +
 +#: lib/object.php:545
 +msgid "Weekly"
 +msgstr ""
 +
 +#: lib/object.php:546
 +msgid "Every Weekday"
 +msgstr ""
 +
 +#: lib/object.php:547
 +msgid "Bi-Weekly"
 +msgstr ""
 +
 +#: lib/object.php:548
 +msgid "Monthly"
 +msgstr ""
 +
 +#: lib/object.php:549
 +msgid "Yearly"
 +msgstr ""
 +
 +#: lib/object.php:559
 +msgid "never"
 +msgstr ""
 +
 +#: lib/object.php:560
 +msgid "by occurrences"
 +msgstr ""
 +
 +#: lib/object.php:561
 +msgid "by date"
 +msgstr ""
 +
 +#: lib/object.php:571
 +msgid "by monthday"
 +msgstr ""
 +
 +#: lib/object.php:572
 +msgid "by weekday"
 +msgstr ""
 +
 +#: lib/object.php:598
 +msgid "events week of month"
 +msgstr ""
 +
 +#: lib/object.php:599
 +msgid "first"
 +msgstr ""
 +
 +#: lib/object.php:600
 +msgid "second"
 +msgstr ""
 +
 +#: lib/object.php:601
 +msgid "third"
 +msgstr ""
 +
 +#: lib/object.php:602
 +msgid "fourth"
 +msgstr ""
 +
 +#: lib/object.php:603
 +msgid "fifth"
 +msgstr ""
 +
 +#: lib/object.php:604
 +msgid "last"
 +msgstr ""
 +
 +#: lib/object.php:659
 +msgid "by events date"
 +msgstr ""
 +
 +#: lib/object.php:660
 +msgid "by yearday(s)"
 +msgstr ""
 +
 +#: lib/object.php:661
 +msgid "by weeknumber(s)"
 +msgstr ""
 +
 +#: lib/object.php:662
 +msgid "by day and month"
 +msgstr ""
 +
 +#: lib/sabre/backend.php:66
 +msgid "Contact birthdays"
 +msgstr ""
 +
 +#: lib/search.php:35 lib/search.php:37 lib/search.php:40
 +msgid "Date"
 +msgstr ""
 +
 +#: lib/search.php:43
 +msgid "Cal."
 +msgstr ""
 +
 +#: templates/calendar.php:6
 +msgid "Week"
 +msgstr ""
 +
 +#: templates/calendar.php:7
 +msgid "Month"
 +msgstr ""
 +
 +#: templates/calendar.php:8
 +msgid "List"
 +msgstr ""
 +
 +#: templates/calendar.php:12 templates/calendar.php:18
 +msgid "Today"
 +msgstr ""
 +
 +#: templates/calendar.php:13
 +msgid "Settings"
 +msgstr ""
 +
 +#: templates/part.choosecalendar.rowfields.php:13
 +msgid "Share Calendar"
 +msgstr ""
 +
 +#: templates/part.choosecalendar.rowfields.php:24 templates/settings.php:28
 +msgid "CalDav Link"
 +msgstr ""
 +
 +#: templates/part.choosecalendar.rowfields.php:27
 +msgid "Download"
 +msgstr ""
 +
 +#: templates/part.choosecalendar.rowfields.php:31
 +msgid "Edit"
 +msgstr ""
 +
 +#: templates/part.choosecalendar.rowfields.php:36
 +#: templates/part.editevent.php:9
 +msgid "Delete"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:9
 +msgid "New calendar"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:9
 +msgid "Edit calendar"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:12
 +msgid "Displayname"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:23
 +msgid "Active"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:29
 +msgid "Calendar color"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:42
 +msgid "Save"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
 +#: templates/part.newevent.php:6
 +msgid "Submit"
 +msgstr ""
 +
 +#: templates/part.editcalendar.php:43
 +msgid "Cancel"
 +msgstr ""
 +
 +#: templates/part.editevent.php:1
 +msgid "Edit an event"
 +msgstr ""
 +
 +#: templates/part.editevent.php:10
 +msgid "Export"
 +msgstr ""
 +
 +#: templates/part.eventform.php:5 templates/part.showevent.php:3
 +msgid "Eventinfo"
 +msgstr ""
 +
 +#: templates/part.eventform.php:6 templates/part.showevent.php:4
 +msgid "Repeating"
 +msgstr ""
 +
 +#: templates/part.eventform.php:7 templates/part.showevent.php:5
 +msgid "Alarm"
 +msgstr ""
 +
 +#: templates/part.eventform.php:8 templates/part.showevent.php:6
 +msgid "Attendees"
 +msgstr ""
 +
 +#: templates/part.eventform.php:10
 +msgid "Share"
 +msgstr ""
 +
 +#: templates/part.eventform.php:18
 +msgid "Title of the Event"
 +msgstr ""
 +
 +#: templates/part.eventform.php:24 templates/part.showevent.php:19
 +msgid "Category"
 +msgstr ""
 +
 +#: templates/part.eventform.php:26
 +msgid "Separate categories with commas"
 +msgstr ""
 +
 +#: templates/part.eventform.php:27
 +msgid "Edit categories"
 +msgstr ""
 +
 +#: templates/part.eventform.php:47 templates/part.showevent.php:50
 +msgid "Access Class"
 +msgstr ""
 +
 +#: templates/part.eventform.php:64 templates/part.showevent.php:66
 +msgid "All Day Event"
 +msgstr ""
 +
 +#: templates/part.eventform.php:68 templates/part.showevent.php:70
 +msgid "From"
 +msgstr ""
 +
 +#: templates/part.eventform.php:76 templates/part.showevent.php:78
 +msgid "To"
 +msgstr ""
 +
 +#: templates/part.eventform.php:84 templates/part.showevent.php:86
 +msgid "Advanced options"
 +msgstr ""
 +
 +#: templates/part.eventform.php:89 templates/part.showevent.php:91
 +msgid "Location"
 +msgstr ""
 +
 +#: templates/part.eventform.php:91
 +msgid "Location of the Event"
 +msgstr ""
 +
 +#: templates/part.eventform.php:97 templates/part.showevent.php:99
 +msgid "Description"
 +msgstr ""
 +
 +#: templates/part.eventform.php:99
 +msgid "Description of the Event"
 +msgstr ""
 +
 +#: templates/part.eventform.php:108 templates/part.showevent.php:109
 +msgid "Repeat"
 +msgstr ""
 +
 +#: templates/part.eventform.php:115 templates/part.showevent.php:116
 +msgid "Advanced"
 +msgstr ""
 +
 +#: templates/part.eventform.php:159 templates/part.showevent.php:160
 +msgid "Select weekdays"
 +msgstr ""
 +
 +#: templates/part.eventform.php:172 templates/part.eventform.php:185
 +#: templates/part.showevent.php:173 templates/part.showevent.php:186
 +msgid "Select days"
 +msgstr ""
 +
 +#: templates/part.eventform.php:177 templates/part.showevent.php:178
 +msgid "and the events day of year."
 +msgstr ""
 +
 +#: templates/part.eventform.php:190 templates/part.showevent.php:191
 +msgid "and the events day of month."
 +msgstr ""
 +
 +#: templates/part.eventform.php:198 templates/part.showevent.php:199
 +msgid "Select months"
 +msgstr ""
 +
 +#: templates/part.eventform.php:211 templates/part.showevent.php:212
 +msgid "Select weeks"
 +msgstr ""
 +
 +#: templates/part.eventform.php:216 templates/part.showevent.php:217
 +msgid "and the events week of year."
 +msgstr ""
 +
 +#: templates/part.eventform.php:222 templates/part.showevent.php:223
 +msgid "Interval"
 +msgstr ""
 +
 +#: templates/part.eventform.php:228 templates/part.showevent.php:229
 +msgid "End"
 +msgstr ""
 +
 +#: templates/part.eventform.php:241 templates/part.showevent.php:242
 +msgid "occurrences"
 +msgstr ""
 +
 +#: templates/part.import.php:14
 +msgid "create a new calendar"
 +msgstr ""
 +
 +#: templates/part.import.php:17
 +msgid "Import a calendar file"
 +msgstr ""
 +
 +#: templates/part.import.php:24
 +msgid "Please choose a calendar"
 +msgstr ""
 +
 +#: templates/part.import.php:36
 +msgid "Name of new calendar"
 +msgstr ""
 +
 +#: templates/part.import.php:44
 +msgid "Take an available name!"
 +msgstr ""
 +
 +#: templates/part.import.php:45
 +msgid ""
 +"A Calendar with this name already exists. If you continue anyhow, these "
 +"calendars will be merged."
 +msgstr ""
 +
 +#: templates/part.import.php:48
 +msgid "Remove all events from the selected calendar"
 +msgstr ""
 +
 +#: templates/part.import.php:50
 +msgid "Import"
 +msgstr ""
 +
 +#: templates/part.import.php:59
 +msgid "Close Dialog"
 +msgstr ""
 +
 +#: templates/part.newevent.php:1
 +msgid "Create a new event"
 +msgstr ""
 +
 +#: templates/part.share.php:31
 +msgid "Share with:"
 +msgstr ""
 +
 +#: templates/part.share.php:34
 +msgid "Shared with"
 +msgstr ""
 +
 +#: templates/part.share.php:51 templates/part.share.php:82
 +msgid "Unshare"
 +msgstr ""
 +
 +#: templates/part.share.php:57
 +msgid "Nobody"
 +msgstr ""
 +
 +#: templates/part.share.php:61
 +msgid "Send Email"
 +msgstr ""
 +
 +#: templates/part.share.php:65
 +msgid "Shared via calendar"
 +msgstr ""
 +
 +#: templates/part.share.php:88
 +msgid ""
 +"NOTE: Actions on events shared via calendar will affect the entire calendar "
 +"sharing."
 +msgstr ""
 +
 +#: templates/part.showevent.php:1
 +msgid "View an event"
 +msgstr ""
 +
 +#: templates/part.showevent.php:23
 +msgid "No categories selected"
 +msgstr ""
 +
 +#: templates/part.showevent.php:41
 +msgid "of"
 +msgstr ""
 +
 +#: templates/part.showevent.php:73 templates/part.showevent.php:81
 +msgid "at"
 +msgstr ""
 +
 +#: templates/settings.php:2
 +msgid "Your calendars"
 +msgstr ""
 +
 +#: templates/settings.php:34
 +msgid "General"
 +msgstr ""
 +
 +#: templates/settings.php:39
 +msgid "Timezone"
 +msgstr ""
 +
 +#: templates/settings.php:70
 +msgid "Update timezone automatically"
 +msgstr ""
 +
 +#: templates/settings.php:75
 +msgid "Time format"
 +msgstr ""
 +
 +#: templates/settings.php:80
 +msgid "24h"
 +msgstr ""
 +
 +#: templates/settings.php:81
 +msgid "12h"
 +msgstr ""
 +
 +#: templates/settings.php:87
 +msgid "Start week on"
 +msgstr ""
 +
 +#: templates/settings.php:100
 +msgid "Cache"
 +msgstr ""
 +
 +#: templates/settings.php:104
 +msgid "Clear cache for repeating events"
 +msgstr ""
 +
 +#: templates/settings.php:109
 +msgid "URLs"
 +msgstr ""
 +
 +#: templates/settings.php:111
 +msgid "Calendar CalDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:111
 +msgid "more info"
 +msgstr ""
 +
 +#: templates/settings.php:113
 +msgid "Primary address (Kontact et al)"
 +msgstr ""
 +
 +#: templates/settings.php:115
 +msgid "iOS/OS X"
 +msgstr ""
 +
 +#: templates/settings.php:117
 +msgid "Read only iCalendar link(s)"
 +msgstr ""
diff --cc apps/calendar/l10n/uk.php
index 221371f,0000000..d719c87
mode 100644,000000..100644
--- a/apps/calendar/l10n/uk.php
+++ b/apps/calendar/l10n/uk.php
@@@ -1,215 -1,0 +1,217 @@@
 +<?php $TRANSLATIONS = array(
 +"Not all calendars are completely cached" => "Не всі календарі повністю закешовано",
 +"Everything seems to be completely cached" => "Все, начебто, закешовано повністю",
 +"No calendars found." => "Календарів не знадено.",
 +"No events found." => "Подій не знайдено.",
 +"Wrong calendar" => "Невірний календар",
 +"You do not have the permissions to edit this event." => "У вас немає прав редагувати цю подію.",
 +"The file contained either no events or all events are already saved in your calendar." => "Файл або не містить подій, або всі події вже збережені у вашому календарі.",
 +"events has been saved in the new calendar" => "подій було збережено в новому календарі",
 +"Import failed" => "Імпорт не був виконаний",
 +"events has been saved in your calendar" => "подій було збережено у вашому календарі",
 +"New Timezone:" => "Новий часовий пояс",
 +"Timezone changed" => "Часовий пояс змінено",
 +"Invalid request" => "Некоректний запит",
 +"Calendar" => "Календар",
 +"Deletion failed" => "Видалення не було виконано",
 +"ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}" => "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}",
 +"ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}" => "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}",
 +"user" => "користувач",
 +"group" => "група",
 +"Editable" => "Редагуєме",
 +"Shareable" => "Розподіляєме",
 +"Deletable" => "Видаляєме",
 +"ddd" => "ddd",
 +"ddd M/d" => "ddd M/d",
 +"dddd M/d" => "dddd M/d",
 +"MMMM yyyy" => "MMMM yyyy",
++"MMM d[ yyyy]{ '–'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '–'[ MMM] d yyyy}",
 +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
 +"Sunday" => "Неділя",
 +"Monday" => "Понеділок",
 +"Tuesday" => "Вівторок",
 +"Wednesday" => "Середа",
 +"Thursday" => "Четвер",
 +"Friday" => "П'ятниця",
 +"Saturday" => "Субота",
 +"Sun." => "Нед.",
 +"Mon." => "Пн.",
 +"Tue." => "Вт.",
 +"Wed." => "Ср.",
 +"Thu." => "Чт.",
 +"Fri." => "Пт.",
 +"Sat." => "Сб.",
 +"January" => "Січень",
 +"February" => "Лютий",
 +"March" => "Березень",
 +"April" => "Квітень",
 +"May" => "Травень",
 +"June" => "Червень",
 +"July" => "Липень",
 +"August" => "Серпень",
 +"September" => "Вересень",
 +"October" => "Жовтень",
 +"November" => "Листопад",
 +"December" => "Грудень",
 +"Jan." => "Січ.",
 +"Feb." => "Лют.",
 +"Mar." => "Бер.",
 +"Apr." => "Кві.",
 +"May." => "Тра.",
 +"Jun." => "Чер.",
 +"Jul." => "Лип.",
 +"Aug." => "Сер.",
 +"Sep." => "Вер.",
 +"Oct." => "Жов.",
 +"Nov." => "Лис.",
 +"Dec." => "Гру.",
 +"All day" => "Увесь день",
 +"New Calendar" => "Новий Календар",
 +"Missing or invalid fields" => "Відсутні або невірні поля",
 +"Title" => "Назва",
 +"From Date" => "Від Дати",
 +"From Time" => "З Часу",
 +"To Date" => "До Часу",
 +"To Time" => "По Дату",
 +"The event ends before it starts" => "Подія завершається до її початку",
 +"There was a database fail" => "Сталася помилка бази даних",
 +"Birthday" => "День народження",
 +"Business" => "Справи",
 +"Call" => "Зателефонувати",
 +"Clients" => "Клієнти",
 +"Deliverer" => "Постачальник",
 +"Holidays" => "Свята",
 +"Ideas" => "Ідеї",
 +"Journey" => "Поїздка",
 +"Jubilee" => "Ювілей",
 +"Meeting" => "Зустріч",
 +"Other" => "Інше",
 +"Personal" => "Особисте",
 +"Projects" => "Проекти",
 +"Questions" => "Запитання",
 +"Work" => "Робота",
 +"by" => "по",
 +"unnamed" => "неназваний",
 +"You do not have the permissions to update this calendar." => "У вас немає прав оновлювати цей календар.",
 +"You do not have the permissions to delete this calendar." => "У вас немає прав видаляти цей календар.",
 +"You do not have the permissions to add to this calendar." => "У вас немає прав додавати у цей календар.",
 +"You do not have the permissions to add events to this calendar." => "У вас немає прав додавати події у цей календар.",
 +"You do not have the permissions to delete this event." => "У вас немає прав видалити цю подію.",
 +"Busy" => "Зайнято",
 +"Public" => "Загально",
 +"Private" => "Приватно",
 +"Confidential" => "Конфіденційно",
 +"Does not repeat" => "Не повторювати",
 +"Daily" => "Щоденно",
 +"Weekly" => "Щотижня",
 +"Every Weekday" => "По будням",
 +"Bi-Weekly" => "Кожні дві неділі",
 +"Monthly" => "Щомісяця",
 +"Yearly" => "Щорічно",
 +"never" => "ніколи",
 +"by occurrences" => "по нагодах",
 +"by date" => "по датах",
 +"by monthday" => "по днях місяця",
 +"by weekday" => "по днях тижня",
 +"events week of month" => "подій тижня місяця",
 +"first" => "перший",
 +"second" => "другий",
 +"third" => "третій",
 +"fourth" => "четвертий",
 +"fifth" => "п'ятий",
 +"last" => "останній",
 +"by events date" => "по датах подій",
 +"by yearday(s)" => "по днях року",
 +"by weeknumber(s)" => "по номеру тижня",
 +"by day and month" => "по дню та місяцю",
++"Contact birthdays" => "Дні народження контактів",
 +"Date" => "Дата",
 +"Cal." => "Кал.",
 +"Week" => "Тиждень",
 +"Month" => "Місяць",
 +"List" => "Список",
 +"Today" => "Сьогодні",
 +"Settings" => "Налаштування",
 +"Share Calendar" => "Розподілити Календар",
 +"CalDav Link" => "CalDav З'єднання",
 +"Download" => "Завантажити",
 +"Edit" => "Редагувати",
 +"Delete" => "Видалити",
 +"New calendar" => "Новий календар",
 +"Edit calendar" => "Редагувати календар",
 +"Displayname" => "Відображуване ім'я",
 +"Active" => "Активний",
 +"Calendar color" => "Колір календаря",
 +"Save" => "Зберегти",
 +"Submit" => "Передати",
 +"Cancel" => "Відмінити",
 +"Edit an event" => "Редагувати подію",
 +"Export" => "Експорт",
 +"Eventinfo" => "Інформація про подію",
 +"Repeating" => "Повторення",
 +"Alarm" => "Тривога",
 +"Attendees" => "Учасників",
 +"Share" => "Поділитися",
 +"Title of the Event" => "Назва події",
 +"Category" => "Категорія",
 +"Separate categories with commas" => "Розділити категорії комами",
 +"Edit categories" => "Редагувати категорії",
 +"Access Class" => "Клас Доступу",
 +"All Day Event" => "Подія на весь день",
 +"From" => "З",
 +"To" => "По",
 +"Advanced options" => "Додаткові опції",
 +"Location" => "Місце",
 +"Location of the Event" => "Місце події",
 +"Description" => "Опис",
 +"Description of the Event" => "Опис події",
 +"Repeat" => "Повторювати",
 +"Advanced" => "Додатково",
 +"Select weekdays" => "Вибрати дні тижня",
 +"Select days" => "Вибрати дні",
 +"and the events day of year." => "і день подій в році.",
 +"and the events day of month." => "і день подій в місяці.",
 +"Select months" => "Вибрати місяці",
 +"Select weeks" => "Вибрати тижні",
 +"and the events week of year." => "і тиждень подій в році.",
 +"Interval" => "Інтервал",
 +"End" => "Кінець",
 +"occurrences" => "нагоди",
 +"create a new calendar" => "створити новий календар",
 +"Import a calendar file" => "Імпортувати файл календаря",
 +"Please choose a calendar" => "Будь ласка, оберіть календар",
 +"Name of new calendar" => "Назва нового календаря",
 +"Take an available name!" => "Візьміть доступне ім'я!",
 +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Календар з такою назвою вже існує. Якщо ви продовжите, ці календарі будуть поєднані.",
 +"Remove all events from the selected calendar" => "Видаліть всі події з обраного календаря",
 +"Import" => "Імпорт",
 +"Close Dialog" => "Закрити Діалог",
 +"Create a new event" => "Створити нову подію",
 +"Share with:" => "Поділитися з:",
 +"Shared with" => "Розподілено з",
 +"Unshare" => "Закрити доступ",
 +"Nobody" => "Ніхто",
 +"Send Email" => "Надіслати Email",
 +"Shared via calendar" => "Розподілено за допомогою календаря",
 +"NOTE: Actions on events shared via calendar will affect the entire calendar sharing." => "ПРИМІТКА: Дії з подіями, які викладені в загальний доступ в календарі, будуть впливати на загальну доступність календаря.",
 +"View an event" => "Подивитися подію",
 +"No categories selected" => "Жодної категорії не вибрано",
 +"of" => "з",
 +"at" => "в",
 +"Your calendars" => "Ваші календарі",
 +"General" => "Загалом",
 +"Timezone" => "Часовий пояс",
 +"Update timezone automatically" => "Оновити часовий пояс автоматично",
 +"Time format" => "Формат часу",
 +"24h" => "24Рі",
 +"12h" => "12Рі",
 +"Start week on" => "Тиждень починається з",
 +"Cache" => "Кеш",
 +"Clear cache for repeating events" => "Чистити кеш для подій, що повторюються",
 +"URLs" => "URL-ів",
 +"Calendar CalDAV syncing addresses" => "Адреси синхронізації CalDAV Календаря",
 +"more info" => "більше інформації",
 +"Primary address (Kontact et al)" => "Початкова адреса",
 +"iOS/OS X" => "iOS/OS X",
 +"Read only iCalendar link(s)" => "Читати лише iCalendar з'єднання"
 +);
diff --cc apps/calendar/l10n/uk/calendar.po
index 72ff139,0000000..f563f28
mode 100644,000000..100644
--- a/apps/calendar/l10n/uk/calendar.po
+++ b/apps/calendar/l10n/uk/calendar.po
@@@ -1,892 -1,0 +1,892 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Soul Kim <warlock.rf at gmail.com>, 2012
 +# volodya327 <volodya327 at gmail.com>, 2012
 +# zubr139 <zubr139 at ukr.net>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 04:55-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 22:05-0500\n"
++"PO-Revision-Date: 2013-11-15 15:00+0000\n"
 +"Last-Translator: zubr139 <zubr139 at ukr.net>\n"
 +"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: uk\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"
 +
 +#: ajax/cache/status.php:19
 +msgid "Not all calendars are completely cached"
 +msgstr "Не всі календарі повністю закешовано"
 +
 +#: ajax/cache/status.php:21
 +msgid "Everything seems to be completely cached"
 +msgstr "Все, начебто, закешовано повністю"
 +
 +#: ajax/categories/rescan.php:29
 +msgid "No calendars found."
 +msgstr "Календарів не знадено."
 +
 +#: ajax/categories/rescan.php:37
 +msgid "No events found."
 +msgstr "Подій не знайдено."
 +
 +#: ajax/event/edit.form.php:21
 +msgid "Wrong calendar"
 +msgstr "Невірний календар"
 +
 +#: ajax/event/edit.form.php:224 lib/object.php:197 lib/object.php:233
 +msgid "You do not have the permissions to edit this event."
 +msgstr "У вас немає прав редагувати цю подію."
 +
 +#: ajax/import/dropimport.php:29 ajax/import/import.php:66
 +msgid ""
 +"The file contained either no events or all events are already saved in your "
 +"calendar."
 +msgstr "Файл або не містить подій, або всі події вже збережені у вашому календарі."
 +
 +#: ajax/import/dropimport.php:31 ajax/import/import.php:69
 +msgid "events has been saved in the new calendar"
 +msgstr "подій було збережено в новому календарі"
 +
 +#: ajax/import/import.php:58
 +msgid "Import failed"
 +msgstr "Імпорт не був виконаний"
 +
 +#: ajax/import/import.php:71
 +msgid "events has been saved in your calendar"
 +msgstr "подій було збережено у вашому календарі"
 +
 +#: ajax/settings/guesstimezone.php:26
 +msgid "New Timezone:"
 +msgstr "Новий часовий пояс"
 +
 +#: ajax/settings/settimezone.php:23
 +msgid "Timezone changed"
 +msgstr "Часовий пояс змінено"
 +
 +#: ajax/settings/settimezone.php:25
 +msgid "Invalid request"
 +msgstr "Некоректний запит"
 +
 +#: appinfo/app.php:38 js/l10n.php:87 templates/part.eventform.php:30
 +#: templates/part.showevent.php:37
 +msgid "Calendar"
 +msgstr "Календар"
 +
 +#: js/calendar.js:176
 +msgid "Deletion failed"
 +msgstr "Видалення не було виконано"
 +
 +#: js/calendar.js:265
 +msgid "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}"
 +msgstr "ddd d MMMM[ yyyy]{ - [ddd d] MMMM yyyy}"
 +
 +#: js/calendar.js:267
 +msgid "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}"
 +msgstr "ddd d MMMM[ yyyy] HH:mm{ - [ ddd d MMMM yyyy] HH:mm}"
 +
 +#: js/calendar.js:624
 +msgid "user"
 +msgstr "користувач"
 +
 +#: js/calendar.js:624
 +msgid "group"
 +msgstr "група"
 +
 +#: js/calendar.js:625 templates/part.share.php:45 templates/part.share.php:76
 +msgid "Editable"
 +msgstr "Редагуєме"
 +
 +#: js/calendar.js:626 templates/part.share.php:47 templates/part.share.php:78
 +msgid "Shareable"
 +msgstr "Розподіляєме"
 +
 +#: js/calendar.js:627 templates/part.share.php:49 templates/part.share.php:80
 +msgid "Deletable"
 +msgstr "Видаляєме"
 +
- #: js/calendar.js:897
++#: js/calendar.js:900
 +msgid "ddd"
 +msgstr "ddd"
 +
- #: js/calendar.js:898
++#: js/calendar.js:901
 +msgid "ddd M/d"
 +msgstr "ddd M/d"
 +
- #: js/calendar.js:899
++#: js/calendar.js:902
 +msgid "dddd M/d"
 +msgstr "dddd M/d"
 +
- #: js/calendar.js:902
++#: js/calendar.js:905
 +msgid "MMMM yyyy"
 +msgstr "MMMM yyyy"
 +
- #: js/calendar.js:904
++#: js/calendar.js:907
 +msgid "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
- msgstr ""
++msgstr "MMM d[ yyyy]{ '–'[ MMM] d yyyy}"
 +
- #: js/calendar.js:906
++#: js/calendar.js:909
 +msgid "dddd, MMM d, yyyy"
 +msgstr "dddd, MMM d, yyyy"
 +
 +#: js/l10n.php:77 lib/object.php:588 templates/settings.php:93
 +msgid "Sunday"
 +msgstr "Неділя"
 +
 +#: js/l10n.php:77 lib/object.php:582 templates/settings.php:92
 +msgid "Monday"
 +msgstr "Понеділок"
 +
 +#: js/l10n.php:77 lib/object.php:583
 +msgid "Tuesday"
 +msgstr "Вівторок"
 +
 +#: js/l10n.php:77 lib/object.php:584
 +msgid "Wednesday"
 +msgstr "Середа"
 +
 +#: js/l10n.php:77 lib/object.php:585
 +msgid "Thursday"
 +msgstr "Четвер"
 +
 +#: js/l10n.php:77 lib/object.php:586
 +msgid "Friday"
 +msgstr "П'ятниця"
 +
 +#: js/l10n.php:77 lib/object.php:587 templates/settings.php:94
 +msgid "Saturday"
 +msgstr "Субота"
 +
 +#: js/l10n.php:78
 +msgid "Sun."
 +msgstr "Нед."
 +
 +#: js/l10n.php:78
 +msgid "Mon."
 +msgstr "Пн."
 +
 +#: js/l10n.php:78
 +msgid "Tue."
 +msgstr "Вт."
 +
 +#: js/l10n.php:78
 +msgid "Wed."
 +msgstr "Ср."
 +
 +#: js/l10n.php:78
 +msgid "Thu."
 +msgstr "Чт."
 +
 +#: js/l10n.php:78
 +msgid "Fri."
 +msgstr "Пт."
 +
 +#: js/l10n.php:78
 +msgid "Sat."
 +msgstr "Сб."
 +
 +#: js/l10n.php:79 lib/object.php:638
 +msgid "January"
 +msgstr "Січень"
 +
 +#: js/l10n.php:79 lib/object.php:639
 +msgid "February"
 +msgstr "Лютий"
 +
 +#: js/l10n.php:79 lib/object.php:640
 +msgid "March"
 +msgstr "Березень"
 +
 +#: js/l10n.php:79 lib/object.php:641
 +msgid "April"
 +msgstr "Квітень"
 +
 +#: js/l10n.php:79 lib/object.php:642
 +msgid "May"
 +msgstr "Травень"
 +
 +#: js/l10n.php:79 lib/object.php:643
 +msgid "June"
 +msgstr "Червень"
 +
 +#: js/l10n.php:79 lib/object.php:644
 +msgid "July"
 +msgstr "Липень"
 +
 +#: js/l10n.php:79 lib/object.php:645
 +msgid "August"
 +msgstr "Серпень"
 +
 +#: js/l10n.php:79 lib/object.php:646
 +msgid "September"
 +msgstr "Вересень"
 +
 +#: js/l10n.php:79 lib/object.php:647
 +msgid "October"
 +msgstr "Жовтень"
 +
 +#: js/l10n.php:79 lib/object.php:648
 +msgid "November"
 +msgstr "Листопад"
 +
 +#: js/l10n.php:79 lib/object.php:649
 +msgid "December"
 +msgstr "Грудень"
 +
 +#: js/l10n.php:80
 +msgid "Jan."
 +msgstr "Січ."
 +
 +#: js/l10n.php:80
 +msgid "Feb."
 +msgstr "Лют."
 +
 +#: js/l10n.php:80
 +msgid "Mar."
 +msgstr "Бер."
 +
 +#: js/l10n.php:80
 +msgid "Apr."
 +msgstr "Кві."
 +
 +#: js/l10n.php:80
 +msgid "May."
 +msgstr "Тра."
 +
 +#: js/l10n.php:80
 +msgid "Jun."
 +msgstr "Чер."
 +
 +#: js/l10n.php:80
 +msgid "Jul."
 +msgstr "Лип."
 +
 +#: js/l10n.php:80
 +msgid "Aug."
 +msgstr "Сер."
 +
 +#: js/l10n.php:80
 +msgid "Sep."
 +msgstr "Вер."
 +
 +#: js/l10n.php:80
 +msgid "Oct."
 +msgstr "Жов."
 +
 +#: js/l10n.php:80
 +msgid "Nov."
 +msgstr "Лис."
 +
 +#: js/l10n.php:80
 +msgid "Dec."
 +msgstr "Гру."
 +
 +#: js/l10n.php:83
 +msgid "All day"
 +msgstr "Увесь день"
 +
 +#: js/l10n.php:84 lib/import.php:214 templates/settings.php:23
 +msgid "New Calendar"
 +msgstr "Новий Календар"
 +
 +#: js/l10n.php:85
 +msgid "Missing or invalid fields"
 +msgstr "Відсутні або невірні поля"
 +
 +#: js/l10n.php:86 templates/part.eventform.php:16
 +#: templates/part.showevent.php:11
 +msgid "Title"
 +msgstr "Назва"
 +
 +#: js/l10n.php:88
 +msgid "From Date"
 +msgstr "Від Дати"
 +
 +#: js/l10n.php:89
 +msgid "From Time"
 +msgstr "З Часу"
 +
 +#: js/l10n.php:90
 +msgid "To Date"
 +msgstr "До Часу"
 +
 +#: js/l10n.php:91
 +msgid "To Time"
 +msgstr "По Дату"
 +
 +#: js/l10n.php:92
 +msgid "The event ends before it starts"
 +msgstr "Подія завершається до її початку"
 +
 +#: js/l10n.php:93
 +msgid "There was a database fail"
 +msgstr "Сталася помилка бази даних"
 +
 +#: lib/app.php:121
 +msgid "Birthday"
 +msgstr "День народження"
 +
 +#: lib/app.php:122
 +msgid "Business"
 +msgstr "Справи"
 +
 +#: lib/app.php:123
 +msgid "Call"
 +msgstr "Зателефонувати"
 +
 +#: lib/app.php:124
 +msgid "Clients"
 +msgstr "Клієнти"
 +
 +#: lib/app.php:125
 +msgid "Deliverer"
 +msgstr "Постачальник"
 +
 +#: lib/app.php:126
 +msgid "Holidays"
 +msgstr "Свята"
 +
 +#: lib/app.php:127
 +msgid "Ideas"
 +msgstr "Ідеї"
 +
 +#: lib/app.php:128
 +msgid "Journey"
 +msgstr "Поїздка"
 +
 +#: lib/app.php:129
 +msgid "Jubilee"
 +msgstr "Ювілей"
 +
 +#: lib/app.php:130
 +msgid "Meeting"
 +msgstr "Зустріч"
 +
 +#: lib/app.php:131
 +msgid "Other"
 +msgstr "Інше"
 +
 +#: lib/app.php:132
 +msgid "Personal"
 +msgstr "Особисте"
 +
 +#: lib/app.php:133
 +msgid "Projects"
 +msgstr "Проекти"
 +
 +#: lib/app.php:134
 +msgid "Questions"
 +msgstr "Запитання"
 +
 +#: lib/app.php:135
 +msgid "Work"
 +msgstr "Робота"
 +
 +#: lib/app.php:411
 +msgid "by"
 +msgstr "по"
 +
 +#: lib/app.php:474
 +msgid "unnamed"
 +msgstr "неназваний"
 +
 +#: lib/calendar.php:178 lib/calendar.php:211
 +msgid "You do not have the permissions to update this calendar."
 +msgstr "У вас немає прав оновлювати цей календар."
 +
 +#: lib/calendar.php:246
 +msgid "You do not have the permissions to delete this calendar."
 +msgstr "У вас немає прав видаляти цей календар."
 +
 +#: lib/calendar.php:280
 +msgid "You do not have the permissions to add to this calendar."
 +msgstr "У вас немає прав додавати у цей календар."
 +
 +#: lib/object.php:122 lib/object.php:162 lib/object.php:317
 +msgid "You do not have the permissions to add events to this calendar."
 +msgstr "У вас немає прав додавати події у цей календар."
 +
 +#: lib/object.php:267 lib/object.php:297
 +msgid "You do not have the permissions to delete this event."
 +msgstr "У вас немає прав видалити цю подію."
 +
 +#: lib/object.php:491
 +msgid "Busy"
 +msgstr "Зайнято"
 +
 +#: lib/object.php:531
 +msgid "Public"
 +msgstr "Загально"
 +
 +#: lib/object.php:532
 +msgid "Private"
 +msgstr "Приватно"
 +
 +#: lib/object.php:533
 +msgid "Confidential"
 +msgstr "Конфіденційно"
 +
 +#: lib/object.php:543
 +msgid "Does not repeat"
 +msgstr "Не повторювати"
 +
 +#: lib/object.php:544
 +msgid "Daily"
 +msgstr "Щоденно"
 +
 +#: lib/object.php:545
 +msgid "Weekly"
 +msgstr "Щотижня"
 +
 +#: lib/object.php:546
 +msgid "Every Weekday"
 +msgstr "По будням"
 +
 +#: lib/object.php:547
 +msgid "Bi-Weekly"
 +msgstr "Кожні дві неділі"
 +
 +#: lib/object.php:548
 +msgid "Monthly"
 +msgstr "Щомісяця"
 +
 +#: lib/object.php:549
 +msgid "Yearly"
 +msgstr "Щорічно"
 +
 +#: lib/object.php:559
 +msgid "never"
 +msgstr "ніколи"
 +
 +#: lib/object.php:560
 +msgid "by occurrences"
 +msgstr "по нагодах"
 +
 +#: lib/object.php:561
 +msgid "by date"
 +msgstr "по датах"
 +
 +#: lib/object.php:571
 +msgid "by monthday"
 +msgstr "по днях місяця"
 +
 +#: lib/object.php:572
 +msgid "by weekday"
 +msgstr "по днях тижня"
 +
 +#: lib/object.php:598
 +msgid "events week of month"
 +msgstr "подій тижня місяця"
 +
 +#: lib/object.php:599
 +msgid "first"
 +msgstr "перший"
 +
 +#: lib/object.php:600
 +msgid "second"
 +msgstr "другий"
 +
 +#: lib/object.php:601
 +msgid "third"
 +msgstr "третій"
 +
 +#: lib/object.php:602
 +msgid "fourth"
 +msgstr "четвертий"
 +
 +#: lib/object.php:603
 +msgid "fifth"
 +msgstr "п'ятий"
 +
 +#: lib/object.php:604
 +msgid "last"
 +msgstr "останній"
 +
 +#: lib/object.php:659
 +msgid "by events date"
 +msgstr "по датах подій"
 +
 +#: lib/object.php:660
 +msgid "by yearday(s)"
 +msgstr "по днях року"
 +
 +#: lib/object.php:661
 +msgid "by weeknumber(s)"
 +msgstr "по номеру тижня"
 +
 +#: lib/object.php:662
 +msgid "by day and month"
 +msgstr "по дню та місяцю"
 +
 +#: lib/sabre/backend.php:66
 +msgid "Contact birthdays"
- msgstr ""
++msgstr "Дні народження контактів"
 +
 +#: lib/search.php:35 lib/search.php:37 lib/search.php:40
 +msgid "Date"
 +msgstr "Дата"
 +
 +#: lib/search.php:43
 +msgid "Cal."
 +msgstr "Кал."
 +
 +#: templates/calendar.php:6
 +msgid "Week"
 +msgstr "Тиждень"
 +
 +#: templates/calendar.php:7
 +msgid "Month"
 +msgstr "Місяць"
 +
 +#: templates/calendar.php:8
 +msgid "List"
 +msgstr "Список"
 +
 +#: templates/calendar.php:12 templates/calendar.php:18
 +msgid "Today"
 +msgstr "Сьогодні"
 +
 +#: templates/calendar.php:13
 +msgid "Settings"
 +msgstr "Налаштування"
 +
 +#: templates/part.choosecalendar.rowfields.php:13
 +msgid "Share Calendar"
 +msgstr "Розподілити Календар"
 +
 +#: templates/part.choosecalendar.rowfields.php:24 templates/settings.php:28
 +msgid "CalDav Link"
 +msgstr "CalDav З'єднання"
 +
 +#: templates/part.choosecalendar.rowfields.php:27
 +msgid "Download"
 +msgstr "Завантажити"
 +
 +#: templates/part.choosecalendar.rowfields.php:31
 +msgid "Edit"
 +msgstr "Редагувати"
 +
 +#: templates/part.choosecalendar.rowfields.php:36
 +#: templates/part.editevent.php:9
 +msgid "Delete"
 +msgstr "Видалити"
 +
 +#: templates/part.editcalendar.php:9
 +msgid "New calendar"
 +msgstr "Новий календар"
 +
 +#: templates/part.editcalendar.php:9
 +msgid "Edit calendar"
 +msgstr "Редагувати календар"
 +
 +#: templates/part.editcalendar.php:12
 +msgid "Displayname"
 +msgstr "Відображуване ім'я"
 +
 +#: templates/part.editcalendar.php:23
 +msgid "Active"
 +msgstr "Активний"
 +
 +#: templates/part.editcalendar.php:29
 +msgid "Calendar color"
 +msgstr "Колір календаря"
 +
 +#: templates/part.editcalendar.php:42
 +msgid "Save"
 +msgstr "Зберегти"
 +
 +#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
 +#: templates/part.newevent.php:6
 +msgid "Submit"
 +msgstr "Передати"
 +
 +#: templates/part.editcalendar.php:43
 +msgid "Cancel"
 +msgstr "Відмінити"
 +
 +#: templates/part.editevent.php:1
 +msgid "Edit an event"
 +msgstr "Редагувати подію"
 +
 +#: templates/part.editevent.php:10
 +msgid "Export"
 +msgstr "Експорт"
 +
 +#: templates/part.eventform.php:5 templates/part.showevent.php:3
 +msgid "Eventinfo"
 +msgstr "Інформація про подію"
 +
 +#: templates/part.eventform.php:6 templates/part.showevent.php:4
 +msgid "Repeating"
 +msgstr "Повторення"
 +
 +#: templates/part.eventform.php:7 templates/part.showevent.php:5
 +msgid "Alarm"
 +msgstr "Тривога"
 +
 +#: templates/part.eventform.php:8 templates/part.showevent.php:6
 +msgid "Attendees"
 +msgstr "Учасників"
 +
 +#: templates/part.eventform.php:10
 +msgid "Share"
 +msgstr "Поділитися"
 +
 +#: templates/part.eventform.php:18
 +msgid "Title of the Event"
 +msgstr "Назва події"
 +
 +#: templates/part.eventform.php:24 templates/part.showevent.php:19
 +msgid "Category"
 +msgstr "Категорія"
 +
 +#: templates/part.eventform.php:26
 +msgid "Separate categories with commas"
 +msgstr "Розділити категорії комами"
 +
 +#: templates/part.eventform.php:27
 +msgid "Edit categories"
 +msgstr "Редагувати категорії"
 +
 +#: templates/part.eventform.php:47 templates/part.showevent.php:50
 +msgid "Access Class"
 +msgstr "Клас Доступу"
 +
 +#: templates/part.eventform.php:64 templates/part.showevent.php:66
 +msgid "All Day Event"
 +msgstr "Подія на весь день"
 +
 +#: templates/part.eventform.php:68 templates/part.showevent.php:70
 +msgid "From"
 +msgstr "З"
 +
 +#: templates/part.eventform.php:76 templates/part.showevent.php:78
 +msgid "To"
 +msgstr "По"
 +
 +#: templates/part.eventform.php:84 templates/part.showevent.php:86
 +msgid "Advanced options"
 +msgstr "Додаткові опції"
 +
 +#: templates/part.eventform.php:89 templates/part.showevent.php:91
 +msgid "Location"
 +msgstr "Місце"
 +
 +#: templates/part.eventform.php:91
 +msgid "Location of the Event"
 +msgstr "Місце події"
 +
 +#: templates/part.eventform.php:97 templates/part.showevent.php:99
 +msgid "Description"
 +msgstr "Опис"
 +
 +#: templates/part.eventform.php:99
 +msgid "Description of the Event"
 +msgstr "Опис події"
 +
 +#: templates/part.eventform.php:108 templates/part.showevent.php:109
 +msgid "Repeat"
 +msgstr "Повторювати"
 +
 +#: templates/part.eventform.php:115 templates/part.showevent.php:116
 +msgid "Advanced"
 +msgstr "Додатково"
 +
 +#: templates/part.eventform.php:159 templates/part.showevent.php:160
 +msgid "Select weekdays"
 +msgstr "Вибрати дні тижня"
 +
 +#: templates/part.eventform.php:172 templates/part.eventform.php:185
 +#: templates/part.showevent.php:173 templates/part.showevent.php:186
 +msgid "Select days"
 +msgstr "Вибрати дні"
 +
 +#: templates/part.eventform.php:177 templates/part.showevent.php:178
 +msgid "and the events day of year."
 +msgstr "і день подій в році."
 +
 +#: templates/part.eventform.php:190 templates/part.showevent.php:191
 +msgid "and the events day of month."
 +msgstr "і день подій в місяці."
 +
 +#: templates/part.eventform.php:198 templates/part.showevent.php:199
 +msgid "Select months"
 +msgstr "Вибрати місяці"
 +
 +#: templates/part.eventform.php:211 templates/part.showevent.php:212
 +msgid "Select weeks"
 +msgstr "Вибрати тижні"
 +
 +#: templates/part.eventform.php:216 templates/part.showevent.php:217
 +msgid "and the events week of year."
 +msgstr "і тиждень подій в році."
 +
 +#: templates/part.eventform.php:222 templates/part.showevent.php:223
 +msgid "Interval"
 +msgstr "Інтервал"
 +
 +#: templates/part.eventform.php:228 templates/part.showevent.php:229
 +msgid "End"
 +msgstr "Кінець"
 +
 +#: templates/part.eventform.php:241 templates/part.showevent.php:242
 +msgid "occurrences"
 +msgstr "нагоди"
 +
 +#: templates/part.import.php:14
 +msgid "create a new calendar"
 +msgstr "створити новий календар"
 +
 +#: templates/part.import.php:17
 +msgid "Import a calendar file"
 +msgstr "Імпортувати файл календаря"
 +
 +#: templates/part.import.php:24
 +msgid "Please choose a calendar"
 +msgstr "Будь ласка, оберіть календар"
 +
 +#: templates/part.import.php:36
 +msgid "Name of new calendar"
 +msgstr "Назва нового календаря"
 +
 +#: templates/part.import.php:44
 +msgid "Take an available name!"
 +msgstr "Візьміть доступне ім'я!"
 +
 +#: templates/part.import.php:45
 +msgid ""
 +"A Calendar with this name already exists. If you continue anyhow, these "
 +"calendars will be merged."
 +msgstr "Календар з такою назвою вже існує. Якщо ви продовжите, ці календарі будуть поєднані."
 +
 +#: templates/part.import.php:48
 +msgid "Remove all events from the selected calendar"
 +msgstr "Видаліть всі події з обраного календаря"
 +
 +#: templates/part.import.php:50
 +msgid "Import"
 +msgstr "Імпорт"
 +
 +#: templates/part.import.php:59
 +msgid "Close Dialog"
 +msgstr "Закрити Діалог"
 +
 +#: templates/part.newevent.php:1
 +msgid "Create a new event"
 +msgstr "Створити нову подію"
 +
 +#: templates/part.share.php:31
 +msgid "Share with:"
 +msgstr "Поділитися з:"
 +
 +#: templates/part.share.php:34
 +msgid "Shared with"
 +msgstr "Розподілено з"
 +
 +#: templates/part.share.php:51 templates/part.share.php:82
 +msgid "Unshare"
 +msgstr "Закрити доступ"
 +
 +#: templates/part.share.php:57
 +msgid "Nobody"
 +msgstr "Ніхто"
 +
 +#: templates/part.share.php:61
 +msgid "Send Email"
 +msgstr "Надіслати Email"
 +
 +#: templates/part.share.php:65
 +msgid "Shared via calendar"
 +msgstr "Розподілено за допомогою календаря"
 +
 +#: templates/part.share.php:88
 +msgid ""
 +"NOTE: Actions on events shared via calendar will affect the entire calendar "
 +"sharing."
 +msgstr "ПРИМІТКА: Дії з подіями, які викладені в загальний доступ в календарі, будуть впливати на загальну доступність календаря."
 +
 +#: templates/part.showevent.php:1
 +msgid "View an event"
 +msgstr "Подивитися подію"
 +
 +#: templates/part.showevent.php:23
 +msgid "No categories selected"
 +msgstr "Жодної категорії не вибрано"
 +
 +#: templates/part.showevent.php:41
 +msgid "of"
 +msgstr "з"
 +
 +#: templates/part.showevent.php:73 templates/part.showevent.php:81
 +msgid "at"
 +msgstr "в"
 +
 +#: templates/settings.php:2
 +msgid "Your calendars"
 +msgstr "Ваші календарі"
 +
 +#: templates/settings.php:34
 +msgid "General"
 +msgstr "Загалом"
 +
 +#: templates/settings.php:39
 +msgid "Timezone"
 +msgstr "Часовий пояс"
 +
 +#: templates/settings.php:70
 +msgid "Update timezone automatically"
 +msgstr "Оновити часовий пояс автоматично"
 +
 +#: templates/settings.php:75
 +msgid "Time format"
 +msgstr "Формат часу"
 +
 +#: templates/settings.php:80
 +msgid "24h"
 +msgstr "24Рі"
 +
 +#: templates/settings.php:81
 +msgid "12h"
 +msgstr "12Рі"
 +
 +#: templates/settings.php:87
 +msgid "Start week on"
 +msgstr "Тиждень починається з"
 +
 +#: templates/settings.php:100
 +msgid "Cache"
 +msgstr "Кеш"
 +
 +#: templates/settings.php:104
 +msgid "Clear cache for repeating events"
 +msgstr "Чистити кеш для подій, що повторюються"
 +
 +#: templates/settings.php:109
 +msgid "URLs"
 +msgstr "URL-ів"
 +
 +#: templates/settings.php:111
 +msgid "Calendar CalDAV syncing addresses"
 +msgstr "Адреси синхронізації CalDAV Календаря"
 +
 +#: templates/settings.php:111
 +msgid "more info"
 +msgstr "більше інформації"
 +
 +#: templates/settings.php:113
 +msgid "Primary address (Kontact et al)"
 +msgstr "Початкова адреса"
 +
 +#: templates/settings.php:115
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:117
 +msgid "Read only iCalendar link(s)"
 +msgstr "Читати лише iCalendar з'єднання"
diff --cc apps/contacts/l10n/ar/contacts.po
index 21bf319,0000000..ba3b083
mode 100644,000000..100644
--- a/apps/contacts/l10n/ar/contacts.po
+++ b/apps/contacts/l10n/ar/contacts.po
@@@ -1,1166 -1,0 +1,1166 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# cuperous, 2013
 +# Meesh <M_almohimeed at yahoo.com>, 2013
 +# matar <matar at linux.com>, 2013
 +# Raed667 <shemada at gmail.com>, 2013
 +# blackcoder <tarek.taha at gmail.com>, 2011, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ar\n"
 +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "جهات الاتصال"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "حفظ"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "ترفيع..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "استيراد..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "إعداد...\nتحضير..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "استيراد {عدد} من {إجمالي} جهات الإتصال"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "فلشت {failed}  مهمة اسيراد جهات الإتصال {imported}"
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr " دفتر العناوين يحمل  {اسم } موجود مسبقاً"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "{خطأ} فشلت مهمة إضافة عنوان "
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "{خطأ} فشلت مهمة تحميل دفتر العناوين"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "فهرسة جهات الاتصال"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "حدث خطأ فادح أثناء تحميل دفتر العناوين: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "خطأ."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "إضافة إلى..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "الحذف من ..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "إضافة مجموعة ..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "الرابط غير صحيح: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "يوجد خطأ في فتح مؤلف الرسائل"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "رابط البريد الإلكتروني غير صالح:  \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "عملية الدمج فشلت. لا يمكن إيجاد جهة الاتصال: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "علمية الدمج فشلت."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "عملية الدمج فشلت. خطأ في حفظ جهة الاتصال. "
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "اختر صورة"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "حدث خطأ في شبكة الاتصال أو في الخادم. يرجى إبلاغ المسؤول."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "خطأ في إضافة المجموعة"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "حدث خطأ أثناء الحذف من المجموعة"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "حدث خطأ أثناء إعداد {name} كمفضلة ."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "دمج جهات الاتصال"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "الغاء"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "إضافة مجموعة"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "تم"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "تعذر ايجاد جهة الاتصال:  {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "لا يوجد ملفات مختارة لتحميلها"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "الملف الذي تحاول تحميله يتجاوز الحد الأقصى لحجم الملف الذي يمكن تحميله على هذا الخادم."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "تعديل صورة الملف الشخصي"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "قص الصورة."
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "هل هذا صحيح؟"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "#المجموعات"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "بعض جهات الأتصال تم تحديدها للحذف لكن لم يتم حذفها بعد. يرجى الانتظار قليلاً حتى يتم حذفها بالكامل."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "إضغط حتى يتم التراجع عن حذف {أرقام} جهات الاتصال"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "ألغاء حذف {num}  من جهات الاتصال."
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "اضف"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "جهة الاتصال موجودة بالفعل في هذه المجموعة."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "جهات الاتصال موجودة بالفعل في هذه المجموعة."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "تعذر الحصول على قائمة جهات الاتصال."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "جهة الاتصال غير موجودة في هذه المجموعة. "
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "جهات الاتصال غير موجودة في هذه المجموعة. "
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "{خطأ}: فشلت مهمة تغيير اسم المجموعة"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "اسم المجموعة { مجموعة } موجود مسبقاً."
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "يمكنك سحب المجموعات إلى⏎\nو من ثم ترتيبها كما تريد."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "{خطأ}: فشلت مهمة إضافة مجموعة. "
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "الكل"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "المفضلة "
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "مشاركة بواسطة المالك  {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "غير مصنف"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "{خطأ}: فشلت مهمة تجميل المجموعات."
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "يرجى اختيار دفتر العناوين"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "استيراد إلى..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "خطأ في تحميل نموذج الاستيراد"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "استيراد جهات الإتصال."
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "استيراد"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "تمت عملية الاستيراد "
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "إغلاق"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "خطأ"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "اسم العرض لا يمكن أن يكون فارغ "
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "أظهر وصلة -رابط - CardDav لمشاركة أو نقل جهات الاتصال."
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "تحميل"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "تعديل"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "إلغاء"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "المزيد..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "تقليل..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "خطأ في الخادم! يرجى ابلاغ مدير النظام."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "{خطأ}: فشلت مهمة تحميل الصورة"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "ليس لديك الصلاحية  لمشاهدة جهة الاتصال هذه"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "تعذر إيجاد جهة الاتصال."
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "ليس لديك الصلاحية  لمشاهدة جهات الاتصال هذه"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "ليس لديك الصلاحية  لإضافة جهات اتصال لدفتر العناوين"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "ليس لديك الصلاحية  لحذف جهة الاتصال"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "حدث خطأ غير معروف. "
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "ليس لديك الصلاحية  لتحديث دفتر العناوين"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "ليس لديك الصلاحية  لحذف دفتر العناوين."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "تعذر ايجاد دفتر العناوين"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "ليس لديك الصلاحية  لمشاهدة جهة الاتصال "
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "ليس لديك الصلاحية  لتحديث جهة الاتصال هذه"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "جهة تراسل فوري غير معروفة"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "يوم ميلاد {name}'s"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "خطأ في إنشاء دفتر العناوين"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "حدث خطأ في تحديث دفتر العناوين"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "ليس لديك الصلاحية لحذف  \"%s\" دفتر العناوين"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "حدث خطأ أثناء إزالة دفتر العناوين"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "حدث خطأ أثناء إنشاء جهة اتصال."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "خطأ في حذف جهة الاتصال"
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "حدث خطأ أثناء استرداد جهة الاتصال."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "خطأ في حفظ جهة الإتصال."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "حدث خطأ أثناء إزالة جهة اتصال من دفتر العناوين."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "تعذر ايجاد جهة الاتصال"
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "المعلومات الموجودة في ال vCard غير صحيحة. الرجاء إعادة تحديث الصفحة."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "خطأ في تحديث جهات الاتصال"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "حدث خطأ أثناء حفظ جهات الاتصال في الخلفية."
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "حدث خطأ أثناء جلب صورة المستخدم"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "لم يتم رفع أي ملف , خطأ غير معروف"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "تم ترفيع الملفات بنجاح."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "حجم الملف الذي تريد ترفيعه أعلى مما upload_max_filesize يسمح به في ملف php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "حجم الملف الذي تريد ترفيعه أعلى مما MAX_FILE_SIZE يسمح به في واجهة ال HTML."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "تم ترفيع جزء من الملفات الذي تريد ترفيعها فقط"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "لم يتم ترفيع أي من الملفات"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "المجلد المؤقت غير موجود"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "لا يمكن تحميل الصورة المؤقتة"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "لا يمكن حفظ الصورة المؤقتة "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "لم يتم عرض مسار الصورة. \nلم يتم تقديم مسار للصورة. "
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "الملف غير موجود"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "خطأ في تحميل الصورة. "
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "تم إزالة الصورة من ذاكرة التخزين المؤقتة. "
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "خطأ في إنشاء صورة مؤقتة "
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "خطأ في قص الصورة"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "خطأ في تغيير حجم الصورة"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "خطأ في الحصول على ملكية الصورة."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "لم يتم تسمية المجموعة بعد."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "حدث خطأ أثناء إضافة المجموعة,"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "حدث خطأ أثناء إعادة تسمية المجموعة."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "خطأ في الكتابة على القرص الصلب"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "لا يوجد مساحة تخزينية كافية"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "خطأ في رفع جهات الإتصال للمخزن,"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "خطأ في نقل الملف إلى مجلد الاستيراد."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "لم يتم إيجاد جهات اتصال في:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "تعذر تعيين المفضل "
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "معرفه"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "شيء آخر"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "الصفحة الرئيسية"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "مكالمات عن طريق الإنترنت"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "مراسل MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "تويتر"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "جوجل توك للتراسل الفوري و الصوتي"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "فيسبوك"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "ياهو"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "سكايب"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "كيوكيو"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "قادو قادو البولندي للمراسلة الفورية"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "العمل"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "البيت"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "الهاتف المحمول"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "معلومات إضافية"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "صوت"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "رسالة"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "الفاكس"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "الفيديو"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "الرنان"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "إنترنت"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "الاصدقاء"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "العائلة"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "جهة اتصال جديدة"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "اسم المجموعة"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "مجموعة جديدة"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "دفتر العناوين"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "اسم العرض"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "أضف دفتر عناوين جديد"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "تحديد ملف..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(De-) تحديد الكل"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "* ترتيب.\n* فرز."
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "الاسم الأول - العائلة"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "العائلة -الاسم الأول"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "مجموعات"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "المفضلة"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "تم تحديد الدمج"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "اختصارات لوحة المفاتيح"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "تصفح"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "جهة الاتصال التالية في القائمة "
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "جهة الاتصال السابقة في القائمة "
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "توسيع / طي دفتر العناوين الحالي."
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "دفتر العنوان التالي"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "دفتر العنوان السابق"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "* تطبيقات.\n* أنشطة."
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "تحديث قائمة جهات الاتصال"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "أَف جهة اتصال جديدة"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "أضف دفتر عناوين جديد"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "إزالة جهة الاتصال الحالية"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>لا يوجد لديك جهات اتصال في دفتر العناوين أو أن دفتر العناوين معطل. </h3><p> يرجى إضافة جهات اتصال جديدة أو استيراد جهات الاتصال الموجودة من ملف  VCF . \n</p> "
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "أضف جهة اتصال"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "إزالة المجموعة"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "إعادة تسمية المجموعة"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "إي جهة اتصال ترغب بدمج البيانات إليها؟"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "هل تريد إزالة (الآخرون) بعد نجاح عملية الدمج؟"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "إنشاء رسالة بريد إلكتروني"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "إزالة الصورة الحالية"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "تحرير الصورة الحالية"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "رفع صورة جديدة"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "إختيار صورة من ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "اسم"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "الاسم الأول"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "الاسماء الإضافية"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "اسم العائلة"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "إختر مجموعة"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "إختيار دفتر عناوين"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "كنية.\nلقب."
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "أدخل كنية."
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "اللقب"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "أدخل لقب."
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "المؤسسة"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "أدخل اسم المنظمة"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "عيد ميلاد"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "للملاحظات إذهب هنا..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "تصدير كملف VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "الهاتف"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "البريد الإلكترونى"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "التراسل الفوري"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "عنوان"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "ملاحظة"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "موقع إلكتروني"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "امحي المعرفه"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "مفضل"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "يرجى تحديد عنوان إلكتروني صالح للإستخدام."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "إرسال إلى العنوان."
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "حذف عنوان البريد الإلكتروني"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "إدخال رقم الهاتف"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "حذف رقم الهاتف"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "الذهاب إلى الموقع الإلكتروني."
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "حذف رابط URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "مشاهدة على الخريطة."
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "حذف العنوان"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "* 1600شمالي غرب جادة بنسلفانيا.\n* البيت الأبيض"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "عنوان الشارع."
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "الرمز البريدي."
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "العاصمة واشنطن. "
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "المدينة"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr " قطاع كولومبيا"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "الولاية أو المنطقة."
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "الولايات المتحدة الأمريكية."
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "البلد"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "رسائل فورية."
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "حذف الرسائل الفورية."
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "فعال"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "شارك"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "تصدير"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "رابط - وصلة - CardDA لنقل و مشاركة جهات الاتصال"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV يقوم بمزامنة العناوين"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "مزيد من المعلومات"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "العنوان الرئيسي (جهات الإتصال)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "ط ن ت/ ن ت 10"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "كتب العناوين"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "كتاب عناوين جديد"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "مواصفات"
diff --cc apps/contacts/l10n/bg_BG/contacts.po
index 5b4faad,0000000..b2006bd
mode 100644,000000..100644
--- a/apps/contacts/l10n/bg_BG/contacts.po
+++ b/apps/contacts/l10n/bg_BG/contacts.po
@@@ -1,1164 -1,0 +1,1164 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Димитър Кръстев <dimitar.t.krastev at gmail.com>, 2013
 +# Stefan Ilivanov <ilivanov at gmail.com>, 2013
 +# Svetoslav Slavkov <contact at sslavkov.eu>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: bg_BG\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Контакти"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Запис"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Качване..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Отказ"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "ОК"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Добавяне"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Внасяне"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Затвори"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Грешка"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Изтегляне"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Промяна"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Изтриване"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Файлът е качен успешно"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Файлът който се опитвате да качите, надвишава зададените стойности в upload_max_filesize в PHP.INI"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Файлът който се опитвате да качите надвишава стойностите в MAX_FILE_SIZE в HTML формата."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Файлът е качен частично"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Фахлът не бе качен"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Липсва временна папка"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Възникна проблем при запис в диска"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Други"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Работен"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Домашен"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Текст"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Групи"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Име"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Заглавие"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Дата на раждане"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Адрес"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Бележка"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Активен"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Споделяне"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Експорт"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr ""
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr ""
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr ""
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Описание"
diff --cc apps/contacts/l10n/bn_BD/contacts.po
index 2780b80,0000000..023d74b
mode 100644,000000..100644
--- a/apps/contacts/l10n/bn_BD/contacts.po
+++ b/apps/contacts/l10n/bn_BD/contacts.po
@@@ -1,1161 -1,0 +1,1161 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: bn_BD\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "ঠিকানাপঞ্জী"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "সংরক্ষণ"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "আপলোড করা হচ্ছে.........."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "বাতির"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "তথাস্তু"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "যোগ কর"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "ঠিকানাপঞ্জীটি নির্বাচন করুন"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "আমদানি"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "বন্ধ"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "সমস্যা"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "ডাউনলোড"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "সম্পাদনা"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "মুছে"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "কোন ফাইল আপলোড করা হয় নি। সমস্যার কারণটি অজ্ঞাত।"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "কোন সমস্যা হয় নি, ফাইল আপলোড সুসম্পন্ন হয়েছে।"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "আপলোড করা ফাইলটি  HTML  ফর্মে উল্লিখিত MAX_FILE_SIZE নির্ধারিত ফাইলের সর্বোচ্চ আকার  অতিক্রম করতে চলেছে "
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "আপলোড করা ফাইলটি আংশিক আপলোড করা হয়েছে"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "কোন ফাইল আপলোড করা হয় নি"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "অস্থায়ী ফোল্ডারটি হারানো গিয়েছে"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "ফাইলটি অস্তিত্বহীনঃ"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "ডিস্কে লিখতে ব্যর্থ"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "অন্যান্য"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "কর্মস্থল"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "নিবাস"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "টেক্সট"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "গোষ্ঠীসমূহ"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "রাম"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "শিরোনাম"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "জন্মদিন"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "ইমেইল"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "ঠিকানা"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "দ্রষ্টব্য"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "সক্রিয়"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "ভাগাভাগি কর"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "রপ্তানি"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "আরও তথ্য"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "প্রাথমিক ঠিকানা (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "বিবরণ"
diff --cc apps/contacts/l10n/ca/contacts.po
index a163dc6,0000000..9aafe92
mode 100644,000000..100644
--- a/apps/contacts/l10n/ca/contacts.po
+++ b/apps/contacts/l10n/ca/contacts.po
@@@ -1,1167 -1,0 +1,1167 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# rogerc, 2013
 +# jmontane <joan at montane.cat>, 2012
 +# Josep Tomàs <jtomas.binsoft at gmail.com>, 2012-2013
 +# rogerc, 2013
 +# rogerc, 2011-2013
 +# aseques <sacoo2 at hotmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: rogerc\n"
 +"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ca\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactes"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Desa"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Pujant..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Important..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparant..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "S'han importat {count} de {total} contactes"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "S'han importat {imported} contactes. {failed} han fallat."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Ja existeix una llibreta d'adreces amb el nom {name} "
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Ha fallat en afegir la llibreta d'adreces: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Ha fallat en carregar llibretes d'adreces: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexant contactes"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Error irrecuperable en carregar llibretes d'adreces: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Error."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Afegeix a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Elimina des de..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Afegeix grup..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL no vàlida: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "S'ha produït un error en obrir un redactor de correus electrónics."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Correu electrònic no vàlid: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "La combinació ha fallat. No es pot trobar el contacte: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "La combinació ha fallat."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "La combinació ha fallat. Error en desar el contacte."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Selecciona una foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Error de xarxa o del servidor. Informeu a l'administrador."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Error en afegir grup"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Error en eliminar del grup"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Error en establir {name} com a preferit."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Combina contactes"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancel·la"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Afegeix grup"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "D'acord"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "El contacte no s'ha trobat: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "No s'han seleccionat fitxers per a la pujada."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "El fitxer que intenteu pujar excedeix la mida màxima de pujada en aquest servidor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Edita la fotografia de perfil"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Talla la fotografia"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "És correcte?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Error en processar la data: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grups"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Error en processar l'aniversari {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Heu marcat eliminar alguns contactes, però encara no s'han eliminat. Espereu mentre s'esborren."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Feu clic a desfés eliminació de {num} contactes"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Cancel·la l'eliminació de {num} contactes"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Afegeix"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "El contacte ja és en aquest grup."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Els contactes ja són en aquest grup"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "No s'ha pogut obtenir la llista de contactes."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "El contacte no és en aquest grup."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Els contactes no són en aquest grup."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Ha fallat en canviar el nom del grup: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Un grup anomenat {group} ja existeix"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Podeu arrossegar grups per\norganitzar-los com volgueu."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Ha fallat en afegir el grup: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Tots"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Preferits"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Compartits per {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Sense grup"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Ha fallat en carregar grups: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Escolliu la llibreta d'adreces"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importa a..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Error en carregar la plantilla d'importació"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importa contactes"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importa"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "S'ha importat"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Tanca"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Error"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "El nom a mostrar no pot ser buit"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostra l'enllaç CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostra l'enllaç VCF només de lectura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Baixa"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Edita"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Esborra"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Més..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menys..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Error en el servidor! Informeu a l'administrador del sistema"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Ha fallat en carregar la foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "No teniu permisos per veure aquest contacte"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "El contacte no s'ha trobat"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "No teniu permisos per veure aquests contactes"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "No teniu permisos per afegir contactes a la llibreta d'adreces"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "El dorsal per aquesta llibreta d'adreces no permet afegir contactes"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "No teniu permisos per eliminar aquest contacte"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "El dorsal d'aquesta llibreta d'adreces no permet esborrar contactes"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Error desconegut"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "El dorsal d'aquesta llibreta d'adreces no permet actualitzacions"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "No teniu permisos per actualitzar la llibreta d'adreces."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "No teniu permisos per esborar la llibreta d'adreces."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "No s'han trobat llibretes d'adreces."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "No teniu permisos per veure aquest contacte"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "No teniu permisos per actualitzar aquest contacte"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "El dorsal d'aquest contacte no permet actualitzar-lo"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Aquest dorsal no permet afegir contactes"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "La propietat no s'ha trobat"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Falta un paràmetre de MI per a:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM desconegut:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Aniversari de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Error en crear la llibreta d'adreces"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Error en actualitzar la llibreta d'adreces"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "No teniu permisos per esborar la llibreta d'adreces \"%s\"."
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Error en eliminar la llibreta d'adreces"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Error en crear contacte."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Error en eliminar contacte."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Error en obtenir el contacte."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Error en desar el contacte."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Error en eliminar el contacte des d'una altra llibreta d'adreces."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "El contacte no s'ha trobat."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "No hi ha dades de contacte en la sol·licitud."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Error en combinar en el contacte."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Error en desar el contacte en el dorsal."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "La propietat nom no està definida."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "La suma de verificació no està definida."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "La informació de la vCard és incorrecta. Carregueu la pàgina de nou."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Error en actualitzar el contacte"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Error en desar el contacte en el dorsal"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Error en obtenir la fotografia d'usuari."
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "No s'ha carregat cap fitxer. Error desconegut"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "No hi ha errors, el fitxer s'ha carregat correctament"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "El fitxer carregat supera la directiva upload_max_filesize de php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada al formulari HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "El fitxer només s'ha carregat parcialment"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "No s'ha carregat cap fitxer"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Falta un fitxer temporal"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "No s'ha pogut carregar la imatge temporal: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "No s'ha pogut desar la imatge temporal: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "No heu tramès el camí de la foto."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "El fitxer no existeix:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Error en carregar la imatge."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "La imatge s'ha eliminat de la memòria de cau"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Error en crear la imatge temporal"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Error en retallar la imatge"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Error en modificar la mida de la imatge"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Error en obtenir la propietat PHOTO."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "No heu facilitat el nom de cap grup."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Error en afegir grup."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "No heu facilitat cap nom de grup per canviar-li el nom."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "No heu facilitat el nom de grup per canviar-li el nom."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Error en canviar el nom del grup."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "La ID del grup s'ha perdut en el requeriment."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Al requeriment li falta el nom del grup."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "La ID del contacte s'ha perdut en el requeriment."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Ha fallat en escriure al disc"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "No hi ha prou espai disponible"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Intent de pujar un fitxer de la llista negra:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Error en carregar contactes a l'emmagatzemament."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Error en moure el fitxer a la carpeta d'importació."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "No teniu permisos per importar dins d'aquesta llibreta d'adreces."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Falta el nom del fitxer en la petició."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Falta la clau de progrés en la petició."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Intent d'accés a un fitxer de la llista negra:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "No s'han trobat contactes a:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "No heu facilitat cap clau."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "No heu facilitat cap valor."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "No s'ha pogut establir la preferència:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contacte"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Un altre"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Pàgina d'inici"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Trucada d'Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Feina"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Casa"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mòbil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Veu"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Missatge"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vídeo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Paginador"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amics"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Contate nou"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nom del grup"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Grup nou"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Llibretes d'adreces"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Nom a mostrar"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Afegeix una llibreta d'adreces"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Selecciona un fitxer..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Des-)selecciona'ls tots"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Ordena"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Nom- Congnom"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Cognom-, Nom"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grups"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Preferits"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Combina els seleccionats"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Dreceres de teclat"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navegació"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Següent contacte de la llista"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contacte anterior de la llista"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Expandeix/col·lapsa la llibreta d'adreces"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Llibreta d'adreces següent"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Llibreta d'adreces anterior"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Accions"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Carrega de nou la llista de contactes"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Afegeix un contacte nou"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Afegeix una llibreta d'adreces nova"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Esborra el contacte"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>No teniu contactes a la vostra llibreta d'adreces o la vostra llibreta d'adreces està inhabilitada.</h3><p>Afegiu un nou contacte o importeu-ne d'existents des d'un fitxer VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Afegeix un contacte"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Elimina grup"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Canvia el nom del grup"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "A quin contacte li voleu combinar les dades?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Elimino els altre(s) després d'una combinació satisfactòria?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Redacta un correu electrónic"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Elimina la foto actual"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Edita la foto actual"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Carrega una foto nova"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Selecciona una foto de ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nom"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Nom"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Noms addicionals"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Cognom"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Selecciona els grups"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Selecciona la llibreta d'adreces"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Sobrenom"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Escriviu el sobrenom"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Títol"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Escriviu el títol"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organització"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Escriviu l'organització"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Aniversari"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Escriviu notes aquí..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exporta com a VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Afegeix camp..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telèfon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Correu electrònic"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Missatgeria instantània"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adreça"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Adreça web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Suprimeix el contacte"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferit"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Especifiqueu una adreça de correu electrònic correcta"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "algú@exemple.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Envia per correu electrònic a l'adreça"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Elimina l'adreça de correu electrònic"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Escriviu el número de telèfon"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Elimina el número de telèfon"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Vés a la web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Elimina URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Visualitza al mapa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Elimina l'adreça"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "Carrer del pi, 32 2n 1a"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Adreça"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "08080"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Codi postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Barcelona"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Ciutat"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "Comarca del Bercelonès"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Estat o província"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "Catalunya"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "País"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Elimina IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Actiu"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Comparteix"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exporta"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Enllaç CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Adreces de sincronització CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "més informació"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Adreça primària (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "IOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Llibretes d'adreces"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nova llibreta d'adreces"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descripció"
diff --cc apps/contacts/l10n/cs_CZ/contacts.po
index 30271cd,0000000..366eefd
mode 100644,000000..100644
--- a/apps/contacts/l10n/cs_CZ/contacts.po
+++ b/apps/contacts/l10n/cs_CZ/contacts.po
@@@ -1,1169 -1,0 +1,1169 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Twiguard, 2013
 +# Honza K. <honza889 at gmail.com>, 2013
 +# Jan Krejci <krejca85 at gmail.com>, 2011-2012
 +# Martin <fireball at atlas.cz>, 2013
 +# Martin <fireball at atlas.cz>, 2011-2012
 +# Michal Hrušecký <Michal at hrusecky.net>, 2012-2013
 +# pstast <petr at stastny.eu>, 2013
 +# Tomáš Chvátal <tomas.chvatal at gmail.com>, 2012-2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: cs_CZ\n"
 +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakty"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Uložit"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Odesílám..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importuji..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Příprava..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Naimportováno {count} z celkového množství {total} kontaktů"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Naimportováno {imported} kontaktů. {failed} selhalo."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Adresář kontaktů s názvem {name} již existuje"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Přidání adresáře kontaktů selhalo: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Načtení adresářů kontaktů selhalo: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexuji kontakty"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Neodstranitelná chyba při načítání adresářů kontaktů: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Chyba."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Přidat do..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Odebrat z..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Přidat skupinu..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Neplatná URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Nastala chyba při otevírání editoru e-malů."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Neplatný e-mail: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Sloučení selhalo. Nelze nalézt kontakt: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Sloučení selhalo."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Sloučení selhalo. Chyba při ukládání kontaktu."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Vybrat fotku"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Chyba sítě či serveru. Kontaktujte prosím správce."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Chyba při přidávání do skupiny"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Chyba při odebírání ze skupiny"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Chyba při nastavování {name} jako oblíbený."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Sloučit kontakty"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Zrušit"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Přidat skupinu"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Nelze nalézt kontakt: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Žádné soubory nebyly vybrány k nahrání."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Soubor, který se pokoušíte odeslat, přesahuje maximální velikost povolenou na serveru."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Upravit obrázek profilu"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Oříznout fotku"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Je to správně?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Chyba při parsování data: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "počet skupin"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Chyba parsování narozenin {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Některé kontakty jsou označeny ke smazání, ale ještě smazány nejsou. Počkejte, prosím, na dokončení operace."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klikněte pro navrácení smazání {num} kontaktů"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Smazání {num} kontaktů zrušeno"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Přidat"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt je již v této skupině."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakty jsou již v této skupině."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Nelze získat seznam kontaktů."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt není v této skupině."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakty nejsou v této skupině."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Chyba při přejmenování skupiny: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Skupina s názvem {group} již existuje"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Můžete přesouvat skupiny, pro\nsnadné seřazení dle vašich potřeb."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Přidání skupiny se nezdařilo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Vše"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Oblíbené"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Sdílí {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Neseskupené"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Načtení skupin se nezdařilo: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Prosím zvolte adresář kontaktů"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importovat do..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Chyba při nahrávání šablony importu"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importovat kontakty"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importovat"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import dokončen"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Zavřít"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Chyba"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Zobrazované jméno nemůže být prázdné."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Zobrazit odkaz CardDAV"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Zobrazit odkaz VCF pouze pro čtení"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Stáhnout"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Upravit"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Smazat"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Více..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Méně..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Chyba serveru! Prosím informujte systémového správce."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Načtení fotografie se nezdařilo: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Nemáte oprávnění pro zobrazení těchto kontaktů"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakt nebyl nalezen"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Nemáte oprávnění pro zobrazení těchto kontaktů"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Nemáte oprávnění pro přidání kontaktů do adresáře kontaktů"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Úložiště tohoto adresáře kontaktů nepodporuje přidávání kontaktů"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Nemáte oprávnění pro smazání tohoto kontaktu"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Úložiště tohoto adresáře kontaktů nepodporuje mazání kontaktů"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Neznámá chyba"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Úložiště tohoto adresáře kontaktů nepodporuje změnu kontaktů"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Nemáte oprávnění pro provádění změn v adresáři kontaktů"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Nemáte oprávnění pro mazání v adresáři kontaktů"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adresář kontaktů nenalezen"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Nemáte oprávnění k zobrazení tohoto kontaktu"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Nemáte oprávnění ke změně tohoto kontaktu"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Úložiště tohoto kontaktu nepodporuje jeho změnu"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Toto úložiště nepodporuje přidávání kontaktů"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Vlastnost nenalezena"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Chybí IM parametr pro:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Neznámý komunikátor: "
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Narozeniny {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Chyba při vytváření adresáře kontaktů"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Chyba při změně adresáře kontaktů"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Nemáte oprávnění pro smazání adresáře kontaktů \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Chyba při mazání adresáře kontaktů"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Chyba při vytváření kontaktu"
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Chyba při mazání kontaktu"
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Chyba při otevírání kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Chyba při ukládání kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Chyba při odebírání kontaktu z jiného adresáře kontaktů."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kontakt se nepodařilo nalézt"
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Chyba při slučování do kontaktu."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Chyba při zápisu kontaktu do úložiště."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Název vlastnosti není nastaven."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Kontrolní součet vlastnosti není nastaven."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informace o vCard je neplatná. Obnovte, prosím, stránku."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Chyba při ukládání kontaktu"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Chyba při zápisu kontaktu do úložiště"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Chyba při získávání uživatelovy fotky"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Soubor nebyl odeslán. Neznámá chyba"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Soubor byl odeslán úspěšně"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Odeslaný soubor přesáhl svou velikostí parametr upload_max_filesize v php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný v formuláři HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Soubor byl odeslán pouze částečně"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Žádný soubor nebyl odeslán"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Chybí adresář pro dočasné soubory"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Nelze načíst dočasný obrázek: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Nelze uložit dočasný obrázek: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Žádná fotka nebyla odeslána."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Soubor neexistuje:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Chyba při načítání obrázku."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Obrázek byl odstraněn z mezipaměti"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Chyba při vytváření dočasného obrázku."
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Chyba při ořezávání obrázku."
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Chyba při změně velikosti obrázku."
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Chyba při získávání vlastností fotky."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Nebyl zadán název skupiny."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Chyba při přidávání skupiny."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Nebyl zadán název skupiny k přejmenování."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Nebyl zadán nový název skupiny."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Chyba při přejmenování skupiny."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "V požadavku chybí ID skupiny."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "V požadavku chybí název skupiny."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "V požadavku chybí ID kontaktu."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Zápis na disk selhal"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nedostatek dostupného úložného prostoru"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Pokud o nahrání zakázaného souboru:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Chyba při nahrávání kontaktů do úložiště."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Chyba při přesunu souboru do složky pro importy."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Nemáte oprávnění pro import do tohoto adresáře kontaktů."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "V požadavku chybí název souboru."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "V požadavku chybí položka průběhu."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Pokus o přístup k zakázanému souboru:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Žádné kontakty v:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Nebyl zadán klíč."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Nebyla zadána hodnota."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Nelze nastavit předvolby:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Jiný"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Domovská stránka"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internetový hovor"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Práce"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Domů"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Hlas"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Zpráva"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Přátelé"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Rodina"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nový kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Název skupiny"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nová skupina"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adresáře kontaktů"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Zobrazované jméno"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Přidat adresář kontaktů"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Vybrat soubor..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Vybrat (odznačit) vše"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Řazení"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Jméno, Příjmení"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Příjmení, Jméno"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Skupiny"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Oblíbit"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Sjednotit vybrané"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Klávesové zkratky"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigace"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Následující kontakt v seznamu"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Předchozí kontakt v seznamu"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Rozbalit/svinout současnou knihu adres"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Následující adresář kontaktů"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Předchozí adresář kontaktů"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Činnosti"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Obnovit seznam kontaktů"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Přidat nový kontakt"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Přidat nový adresář kontaktů"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Odstranit současný kontakt"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Váš adresář kontaktů je buď vypnutý nebo prázdný.</h3><p>Vložte nový kontakt nebo importujte již existující kontakty ze souboru VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Přidat kontakt"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Smazat skupinu"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Přejmenovat skupinu"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Do kterého kontaktu mají být data sjednocena?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Smazat ostatní po úspěšném sjednocení?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Napsat e-mail"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Smazat současnou fotku"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Upravit současnou fotku"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Nahrát novou fotku"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Vybrat fotku z ownCloudu"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Název"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Křestní jméno"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Další jména"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Příjmení"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Vyberte skupiny"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Vyberte adresář kontaktů"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Přezdívka"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Zadejte přezdívku"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Název"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Zadejte titul"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizace"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Zadejte organizaci"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Narozeniny"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Sem vložte poznámky..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportovat jako VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Přidat položku..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Komunikátor"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresa"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Poznámka"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Webová stránka"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Smazat kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferované"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Prosím zadejte platnou e-mailovou adresu."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "někdo at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Odeslat na adresu"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Smazat e-mailovou adresu"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Zadejte telefonní číslo"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Smazat telefonní číslo"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Přejít na webovou stránku"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Smazat URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Zobrazit na mapě"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Smazat adresu"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Ulice"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Směrovací číslo"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Město"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Stát nebo provincie"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Země"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Komunikátor"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Smazat komunikátor"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktivní"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Sdílet"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportovat"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV odkaz"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Adresy pro synchronizaci pomocí CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "podrobnosti"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Hlavní adresa (Kontakt etc.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adresáře kontaktů"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nový adresář kontaktů"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Popis"
diff --cc apps/contacts/l10n/cy_GB/contacts.po
index e9bbc0f,0000000..9960ca8
mode 100644,000000..100644
--- a/apps/contacts/l10n/cy_GB/contacts.po
+++ b/apps/contacts/l10n/cy_GB/contacts.po
@@@ -1,1162 -1,0 +1,1162 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# ubuntucymraeg <owen.llywelyn at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: cy_GB\n"
 +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Cysylltiadau"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Cadw"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Yn llwytho i fyny..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Diddymu"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Iawn"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Ychwanegu"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Mewnforio"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Cau"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Gwall"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Llwytho i lawr"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Golygu"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Dileu"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ni lwythwyd ffeil i fyny. Gwall anhysbys."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Does dim gwall, llwythodd y ffeil i fyny'n llwyddiannus"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Mae'r ffeil lwythwyd i fyny'n fwy na chyfarwyddeb MAX_FILE_SIZE bennwyd yn y ffurflen HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Dim ond yn rhannol y llwythwyd y ffeil i fyny"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ni lwythwyd ffeil i fyny"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Plygell dros dro yn eisiau"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Methwyd ysgrifennu i'r ddisg"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Dim digon o le storio ar gael"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Arall"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Gwaith"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr ""
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Testun"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grwpiau"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Enw"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Teitl"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Penblwydd"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-bost"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Cyfeiriad"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Gweithredol"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Rhannu"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Allforio"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mwy o wybodaeth"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Prif gyfeiriad (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Disgrifiad"
diff --cc apps/contacts/l10n/da/contacts.po
index 8546523,0000000..01c1cce
mode 100644,000000..100644
--- a/apps/contacts/l10n/da/contacts.po
+++ b/apps/contacts/l10n/da/contacts.po
@@@ -1,1175 -1,0 +1,1175 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Sappe, 2013
 +# Bawl <transifex at bawl.dk>, 2013
 +# claus_chr <claus_chr at webspeed.dk>, 2013
 +# claus_chr <claus_chr at webspeed.dk>, 2012
 +# cronner <cronner at gmail.com>, 2012
 +# kaffeldt <kasper.affeldt at gmail.com>, 2013
 +# mikkel_ilu <mikkelbjerglarsen at gmail.com>, 2011
 +# Morten Juhl-Johansen Zölde-Fejér <morten at writtenandread.net>, 2011-2012
 +# Ole Holm Frandsen <froksen at gmail.com>, 2012-2013
 +# Pascal d'Hermilly <pascal at dhermilly.dk>, 2011
 +# rpaasch <rasmuspaasch at gmail.com>, 2013
 +# muunsim <simon at rosmi.dk>, 2012
 +# Thomas Tanghus <thomas at tanghus.net>, 2012
 +# Thomas Tanghus <thomas at tanghus.net>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: kaffeldt <kasper.affeldt at gmail.com>\n"
 +"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: da\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakter"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Gem"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Uploader..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importerer..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Forbereder..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importeret {count} af {total} kontakter"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importeret {imported} kontakter. {failed} fejlede."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Der eksistere allerede en adressebog med navnet: {name}"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Kunne ikke tilføje adressebog: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Kunne ikke hente adressebøger: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indekserer kontakter"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Uigenkaldelig fejl ved hentning af adressebøger: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fejl."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Føj til..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Fjern fra..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Tilføj gruppe..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Ugyldig URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Der opstod en fejl under åbning af en e-mail-editor."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Ugyldig email: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Sammenlægning fejlede. Kan ikke finde kontakt: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Sammenlægning fejlede."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Indfletning lykkedes ikke. Fejl ved gemning af kontakt."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Vælg foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Netværks- eller serverfejl: Informér administrator."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Fejl ved tilføjelse til gruppe."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Fejl ved fjernelse fra gruppe."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Kunne ikke indstille {name} som favorit."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Sammenlæg kontakter"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Annuller"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Tilføj gruppe"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kunne ikke finde kontakt: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Der er ikke valgt nogen filer at uploade."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Dr."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Redigér profilbillede"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Beskær billede"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Er dette korrekt?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Fejl under læsning af dato: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupper"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Fejl under læsning af fødselsdato: {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Nogle kontakter er markeret til sletning, men er endnu ikke slettet. Vent venligst på, at de bliver slettet."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klik for at fortryde sletning af {num} kontakter"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "annullerede sletning af {num} kontakter"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Tilføj"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontaktperson er allerede i denne gruppe."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakterpersoner er allerede i denne gruppe."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kunne ikke hente liste over kontaktpersoner."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontaktperson er ikke i denne gruppe."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakterpersoner er ikke i denne gruppe."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Kunne ikke omdøbe gruppe: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "En gruppe med navnet {group} eksistere allerede"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Du kan trække grupper til⏎ arrangér dem som du vil."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Kunne ikke tilføje gruppe: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alle"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Foretrukne"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Delt af {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Ikke i gruppe"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Kunne ikke hente grupper: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Vælg venligst adressebog"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importér til..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Fejl ved hentning af importskabelon "
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importer kontakter"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importer"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import fuldført"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Luk"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Fejl"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Brugernavn må ikke være tomt."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Vis CardDav link"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Vis skrivebeskyttet VCF link"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Download"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Rediger"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Slet"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mere..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Mindre..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Server fejl! Informer venligst systemadministratoren."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Kunne ikke hente billede: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Du har ikke rettigheder til at se denne kontaktperson"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakt ikke fundet"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Du har ikke rettigheder til at se disse kontaktpersoner"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Du har ikke rettigheder til at føje kontaktpersoner til denne adressebog"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Denne adressebogs system understøtter ikke tilføjelse af kontakter"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Du har ikke rettigheder til at slette denne kontaktperson"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Denne adressebogs system understøtter ikke sletning af kontakter"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Ukendt fejl"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Systemet for denne adressebog understøtter ikke opdatering"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Du har ikke rettigheder til at opdatere denne adressebog"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Du har ikke rettigheder til at slette denne adressebog"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adressebog ikke fundet"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Du har ikke rettigheder til at se denne kontaktperson"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Du har ikke rettigheder til at opdatere denne kontaktperson"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Systemet for denne kontakt understøtter ikke opdatering"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Dette system understøtter ikke tilføjelse af kontakter"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Egenskab ikke fundet"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Manglende IM-parameter for:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Ukendt IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}s fødselsdag"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Fejl ved oprettelse af adressebog"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Fejl ved opdatering af adressebog"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Du har ikke tilladelse til at slette \"%s\" adressebog"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Fejl ved sletning af adressebog"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Fejl ved oprettelse af kontaktperson."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Fejl ved sletning af kontaktperson."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Fejl ved hentning af kontaktperson."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Kunne ikke gemme kontaktpersonen."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Fejl ved fjernelse af kontaktperson fra anden adressebog."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kunne ikke finde kontakt."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Ingen kontakt oplysninger i anmodningen."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Fejl ved indfletning til kontaktperson."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Kunne ikke gemme kontakt på server."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Egenskabsnavn er ikke angivet."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Tjeksum for egenskab er ikke angivet."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informationen om vCard er forkert. Genindlæs siden."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Kunne ikke opdatere kontakt"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Kunne ikke gemme kontakt til server"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Fejl ved indlæsning af brugerfoto"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ingen fil blev uploadet. Ukendt fejl."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Der skete ingen fejl, filen blev succesfuldt uploadet"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Den uploadede fil er større end upload_max_filesize indstillingen i php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Den uploadede fil overstiger MAX_FILE_SIZE indstilingen, som specificeret i HTML formularen"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Filen blev kun delvist uploadet."
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ingen fil uploadet"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Manglende midlertidig mappe."
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Kunne ikke indlæse midlertidigt billede"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Kunne ikke gemme midlertidigt billede: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Der blev ikke medsendt en sti til fotoet."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Filen eksisterer ikke:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Kunne ikke indlæse billede."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Billedet blev fjernet fra cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Kunne ikke oprette midlertidigt billede"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Kunne ikke beskære billedet"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Kunne ikke ændre billedets størrelse"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Fejl ved indlæsning af PHOTO feltet."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Intet gruppenavn givet."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Fejl ved tilføjelse af gruppe."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Intet gruppenavn at omdøbe fra det givne."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Intet gruppenavn at omdøbe til det givne."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Fejl ved omdøbning af gruppenavn."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Gruppe-id mangler i forespørgsel."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Gruppenavn mangler i forespørgsel."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Kontaktpersons-id mangler i forespørgsel."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Fejl ved skrivning til disk."
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Der er ikke nok plads til rådlighed"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Forsøg på at oploade sortlistede filer:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Kunne ikke uploade kontaktepersoner til midlertidig opbevaring."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Kunne ikke flytte filer til importmappe."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Du har ikke rettigheder til at importere til denne adressebog"
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Filnavn mangler fra forespørgsel."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Fremskridts nøglen mangler fra anmodningen."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Forsøg på at tilgå sortlistet fil:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Ingen kontaktpersoner fundet i:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Ingen værdi er givet."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Ingen værdi er givet."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Kunne ikke sætte præference:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontaktperson"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Andet"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Hjemmeside"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet opkald"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "Google Talk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbejde"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Hjemme"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "SMS"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Telefonsvarer"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Besked"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Personsøger"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Venner"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familie"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Ny Kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruppe navn"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Ny Gruppe"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adressebøger"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Vist navn"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Tilføj Adressebog"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Vælg fil..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Fra)vælg alle"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sorteringsorden"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "For- efernavn"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "For-, efternavn"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupper"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Foretrukken"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Sammenlæg markerede"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Tastaturgenveje"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigering"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Næste kontaktperson i listen"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Forrige kontaktperson i listen"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Udvid/sammenfold nuværende adressebog"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Næste adressebog"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Forrige adressebog"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Handlinger"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Genindlæs kontaktliste"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Tilføj ny kontaktperson"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Tilføj ny adressebog"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Slet aktuelle kontaktperson"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3> Din adressebog er deaktiveret eller indeholder ingen kontakter.</h3><p>Tilføj nye kontakter eller importer eksisterende kontakter fra en VCF fil.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Tilføj kontaktpeson."
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Slet gruppe"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Omdøb gruppe"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Hvilken kontaktperson skal data føjes til?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Slet de andre efter gennemgørt sammenfletning?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Skriv mail"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Slet nuværende foto"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Rediger nuværende foto"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Upload nyt foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Vælg foto fra ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Navn"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Fornavn"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Mellemnavne"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Efternavn"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Vælg grupper"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Vælg adressebog"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Kaldenavn"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Indtast kaldenavn"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Angiv titel"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisation"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Angiv organisation"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Fødselsdag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Skriv noter her..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exporter som VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Tilføj felt..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Note"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Hjemmeside"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Slet kontaktperson"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Foretrukken"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Indtast venligst en gyldig email-adresse."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "nogen at eksempel.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Send mail til adresse"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Slet email-adresse"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Indtast telefonnummer"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Slet telefonnummer"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Gå til web site"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Slet URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Vis på kort"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Slet adresse"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Gade"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postnummer"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "By"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Stat eller provins"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Slet IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Del"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exporter"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV synkroniserings adresse"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "flere oplysninger"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primær adresse (Kontakt o.a.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressebøger"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Ny adressebog"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beskrivelse"
diff --cc apps/contacts/l10n/de/contacts.po
index 189e519,0000000..417b4ae
mode 100644,000000..100644
--- a/apps/contacts/l10n/de/contacts.po
+++ b/apps/contacts/l10n/de/contacts.po
@@@ -1,1193 -1,0 +1,1193 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# iLennart21 <a12s34d56f78 at live.com>, 2013
 +# goeck <admin at s-goecker.de>, 2012
 +# HansCarlsen <aufsees at yahoo.de>, 2013
 +# Mirodin <blobbyjj at ymail.com>, 2012
 +# arkascha <foss at christian-reiner.info>, 2013
 +# driz <driz at i2pmail.org>, 2012
 +# CBiX <fh at cbix.de>, 2012
 +# javex <florian.ruechel.transifex at inexplicity.de>, 2012
 +# george <social at georgehrke.com>, 2011
 +# hebbet <pascal.herbert at gmail.com>, 2012
 +# I Robot <owncloud-bot at tmit.eu>, 2013
 +# I Robot <thomas.mueller at tmit.eu>, 2012
 +# Jan-Christoph Borchardt <JanCBorchardt at fsfe.org>, 2011
 +# Jan-Christoph Borchardt <jan at unhosted.org>, 2011
 +# Manfred Löbling, 2013
 +# Marcel Kühlhorn <susefan93 at gmx.de>, 2012-2013
 +# Mario Siegmann <mario_siegmann at web.de>, 2013
 +# Melvin Gundlach <mail at melvin-gundlach.de>, 2012
 +# Michael Krell, 2012
 +# LittleBuddha <mi.sc at gmx.net>, 2012
 +# piccobello <nelsonfritsch at gmail.com>, 2012
 +# JamFX <niko at nik-o-mat.de>, 2012
 +# Phi Lieb <>, 2012
 +# Susi <>, 2012
 +# thillux, 2013
 +#   <thomas.mueller at tmit.eu>, 2012
 +# Thomas Müller <>, 2012
 +#   <transifex.3.mensaje at spamgourmet.com>, 2012
 +# noxin <transifex.com at davidmainzer.com>, 2013
 +# Linutux <transifex.com at mail.simonzoellner.de>, 2013
 +# Mirodin <blobbyjj at ymail.com>, 2013
 +# kabum <uu.kabum at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Mario Siegmann <mario_siegmann at web.de>\n"
 +"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakte"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Speichern"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Lade hoch ..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importiere..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Vorbereiten..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Es wurden {count} von {total} Kontakten importiert"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} Kontakte importiert, {failed} fehlgeschlagen."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Ein Adressbuch mit dem Namen {name} ist schon vorhanden"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Fehler beim Hinzufügen des Adressbuchs: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Fehler beim Laden von Adressbüchern: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Kontakte Indizieren"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Während das Adressbuch geladen wurde, trat ein nicht behebbarer Fehler auf: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fehler."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Hinzufügen zu ..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Entfernen von ..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Gruppe hinzufügen ..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Ungültige Adresse: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Fehler beim Öffnen des Mail-Editors"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Ungültige E-Mail: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Zusammenführung fehlgeschlagen. Kontakt wurde nicht gefunden: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Zusammenführung fehlgeschlagen. "
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Zusammenführung fehlgeschlagen. Fehler beim Speichern des Kontakts. "
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Wähle  ein Foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Netzwerk- oder Serverfehler. Bitte Administrator informieren."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Fehler beim Hinzufügen zur Gruppe."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Fehler beim Entfernen aus Gruppe."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Fehler beim Festlegen von {name} als Favorit."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Kontakte zusammenführen"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Abbrechen"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Gruppe hinzufügen"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kontakt nicht gefunden: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Keine Datei(en) zum Hochladen ausgewählt."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Die Datei, die Du hochladen möchtest, überschreitet die maximale Größe für Datei-Uploads auf diesem Server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Profilbild bearbeiten"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Foto zuschneiden"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Ist dies korrekt?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Datum des Fehlers beim Parsen: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# Gruppen"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Fehler beim Auslesen des Geburtstages {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Einige zum Löschen vorgemerkte Kontakte wurden noch nicht gelöscht. Bitte warten."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klicken um das Löschen von {num} Kontakten rückgängig zu machen."
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Die Löschung von {num} Kontakten wurde abgebrochen"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Hinzufügen"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt ist bereits in dieser Gruppe."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakte sind bereits in dieser Gruppe."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kontaktliste konnte nicht ermittelt werden."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt ist nicht in dieser Gruppe."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakte sind nicht in dieser Gruppe."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Fehler beim Umbenennen einer Gruppe: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Eine Gruppe mit dem Namen {group} existiert bereits."
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Per \"Drag & Drop\" kannst Du Gruppen\nnach Deinen Wünschen anordnen."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Fehler beim Hinzufügen einer Gruppe: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alle"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoriten"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Geteilt von {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Nicht gruppiert"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Fehler beim Laden von Gruppen: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Bitte Adressbuch auswählen"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importiere..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Importvorlage konnte nicht geladen werden"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Kontakte werden importiert"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importieren"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import ausgeführt"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Schließen"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Fehler"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Der Anzeigename darf nicht leer sein."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav-Link anzeigen"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Schreibgeschützten VCF-Link anzeigen"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Herunterladen"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Bearbeiten"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Löschen"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mehr..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Weniger..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Serverfehler! Bitte informiere den System-Administrator"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Fehler beim Laden eines Bildes: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Du besitzt nicht die erforderlichen Rechte, um diesen Kontakte zu sehen."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakt nicht gefunden"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Du besitzt nicht die erforderlichen Rechte, um diesen Kontakte zu sehen."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Du hast nicht die Berechtigung, diesem Adressbuch Kontakte hinzuzufügen."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Das Backend für dieses Adressbuch unterstützt nicht das Hinzufügen von Kontakten."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Du besitzt nicht die erforderlichen Rechte, um diesen Kontakte zu löschen."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Das Backend für dieses Adressbuch unterstützt nicht das Löschen von Kontakten."
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Unbekannter Fehler"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Das Backend für dieses Adressbuch unterstützt keine Aktualisierung."
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Du verfügst nicht über die Rechte, das Adressbuch zu aktualisieren."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Du besitzt nicht die Berechtigungen, dieses Adressbuch zu löschen."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adressbuch nicht gefunden."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Du besitzt nicht die Berechtigung, diese Veranstaltung zu sehen."
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Du hast nicht die Berechtigungen, diesen Kontakt zu aktualisieren."
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Das Backend für diesen Kontakt unterstützt nicht dessen Aktualisierung."
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Dieses Backend unterstützt nicht das Hinzufügen von Kontakten."
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Merkmal nicht gefunden"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Fehlender IM-Parameter für:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM unbekannt:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Geburtstag von {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Fehler beim Anlegen eines Adressbuches."
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Fehler beim Aktualisieren eines Adressbuches."
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Du hast nicht die erforderlichen Rechte, das \"%s\" Adressbuch zu löschen"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Fehler beim Löschen eines Adressbuches."
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Fehler beim Anlegen eines Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Fehler beim Löschen eines Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Fehler beim Empfangen eines Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Fehler beim Speichern des Kontaktes."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Fehler beim Entfernen des Kontakts aus einem anderen Adressbuch."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kontakt nicht gefunden."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Keine Kontaktdaten in der Anfrage."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Fehler beim Zusammenführen in Kontakt."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Fehler beim Speichern eines Kontakts ins Backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Merkmalsname ist nicht angegeben."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Merkmalsprüfsumme ist nicht angegeben."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Fehler beim Aktualisieren eines Kontakts"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Fehler beim Speichern eines Kontakts ins Backend"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Fehler beim Abrufen des Benutzerfotos"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Die Datei ist größer, als durch die upload_max_filesize Direktive in php.ini erlaubt"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Die Datei ist größer, als die MAX_FILE_SIZE Direktive erlaubt, die im HTML-Formular spezifiziert ist"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Die Datei konnte nur teilweise übertragen werden"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Keine Datei konnte übertragen werden."
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Kein temporärer Ordner vorhanden"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Konnte das temporäre Bild nicht laden:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Das temporäre Bild konnte nicht gespeichert werden:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Kein Foto-Pfad angegeben."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Die Datei existiert nicht:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Fehler beim Laden des Bildes."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Das Bild wurde aus dem Zwischenspeicher entfernt"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Fehler beim Erstellen des temporären Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Fehler beim Zuschneiden des Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Fehler bei der Größenänderung des Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Fehler beim Abrufen der PHOTO-Eigenschaft."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Kein Gruppenname angegeben."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Fehler beim Hinzufügen einer Gruppe."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Kein Gruppenname zum Umbenennen angegeben."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Kein Gruppenname zum Umbenennen zu angegeben."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Fehler beim Umbenennen einer Gruppe."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Bei der Anfrage fehlt die Gruppen-ID."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Gruppenname fehlt in der Anfrage."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Bei der Anfrage fehlt die Kontakt-ID."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Fehler beim Schreiben auf die Festplatte"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nicht genug Speicher vorhanden."
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Versuche eine gesperrte Datei hochzuladen:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Übertragen der Kontakte fehlgeschlagen."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Fehler beim Verschieben der Datei in den Importordner."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Du verfügst nicht über die Rechte, in dieses Adressbuch zu importieren."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Dateiname fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Fortschrittsschlüssel fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Versuche auf eine gesperrte Datei zuzugreifen:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Keine Kontake gefunden in:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Kein Schlüssel angegeben."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Kein Wert angegeben."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Einstellung konnte nicht gesetzt werden:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Andere"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Startseite"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet-Anruf"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbeit"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Home"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Anruf"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mitteilung"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Freunde"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familie"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Neuer Kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruppenname"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Neue Gruppe"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adressbücher"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Anzeigename"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Adressbuch hinzufügen"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Wähle Datei..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Alle (nicht) auswählen"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sortierreihenfolge"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Vor- Nachname"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Nach-, Vorname"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Gruppen"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorit"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Auswahl zusammenführen"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Tastaturbefehle"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigation"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Nächster Kontakt aus der Liste"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Vorheriger Kontakt aus der Liste"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Ausklappen / Einklappen des Adressbuches"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Nächstes Adressbuch"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Vorheriges Adressbuch"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Aktionen"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Kontaktliste neu laden"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Neuen Kontakt hinzufügen"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Neues Adressbuch hinzufügen"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Aktuellen Kontakt löschen"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Du hast keine Kontakte in deinem Adressbuch oder dein Adressbuch ist deaktiviert.</h3><p>Füge einen neuen Kontakt hinzu oder importiere existierende Kontakte aus einer VCF-Datei.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Kontakt hinzufügen"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Gruppe löschen"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Gruppen umbenennen"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "In welchen Kontakt sollen die Daten zusammengeführt werden?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Den/die anderen löschen nach erfolgreicher Zusammenführung?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "E-Mail schreiben"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Derzeitiges Foto löschen"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Derzeitiges Foto ändern"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Neues Foto hochladen"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Foto aus der ownCloud auswählen"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Name"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Vorname"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Zusätzliche Namen"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Nachname"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Wähle Gruppen aus"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Addressbuch auswählen"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Spitzname"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Spitzname angeben"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Titel eingeben"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisation"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Organisation eingeben"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Geburtstag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notizen hier hinein..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Als VCF exportieren"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Feld hinzufügen..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-Mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notiz"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Webseite"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kontakt löschen"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Bevorzugt"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Bitte trage eine gültige E-Mail-Adresse ein."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "jemand at beispiel.de"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "E-Mail an diese Adresse schicken"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "E-Mail-Adresse löschen"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Telefonnummer angeben"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Telefonnummer löschen"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Webseite aufrufen"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "URL löschen"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Auf der Karte zeigen"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Adresse löschen"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Straßenanschrift"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postleitzahl"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Stadt"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Staat oder Provinz"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM löschen"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Teilen"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportieren"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV-Link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV Sync-Adressen"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "weitere Informationen"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primäre Adresse (für Kontakt o.ä.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS / OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressbücher"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Neues Adressbuch"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beschreibung"
diff --cc apps/contacts/l10n/de_CH/contacts.po
index e2bc198,0000000..5eeefd3
mode 100644,000000..100644
--- a/apps/contacts/l10n/de_CH/contacts.po
+++ b/apps/contacts/l10n/de_CH/contacts.po
@@@ -1,1194 -1,0 +1,1194 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# ako84 <a0306265 at unet.univie.ac.at>, 2013
 +# arkascha <foss at christian-reiner.info>, 2013
 +# a.tangemann <a.tangemann at web.de>, 2013
 +# CBiX <fh at cbix.de>, 2012
 +# Christoph Sczigiol <inactive+christoph.sczigiol at transifex.com>, 2013
 +# deh3nne, 2012
 +# driz <driz at i2pmail.org>, 2012
 +# FlorianScholz <work at bgstyle.de>, 2013
 +# FlorianScholz <work at bgstyle.de>, 2013
 +# george <social at georgehrke.com>, 2011
 +# goeck <admin at s-goecker.de>, 2012
 +# hebbet <pascal.herbert at gmail.com>, 2012
 +# I Robot <owncloud-bot at tmit.eu>, 2012
 +# JamFX <niko at nik-o-mat.de>, 2012
 +# Jan-Christoph Borchardt <JanCBorchardt at fsfe.org>, 2011
 +# Jan-Christoph Borchardt <jan at unhosted.org>, 2011
 +# javex <florian.ruechel.transifex at inexplicity.de>, 2012
 +# kenwood <kenwood at gmx.ch>, 2013
 +# LittleBuddha <mi.sc at gmx.net>, 2012
 +# Mario Siegmann <mario_siegmann at web.de>, 2013
 +# Melvin Gundlach <mail at melvin-gundlach.de>, 2012
 +# Michael Krell, 2012
 +# Mirodin <blobbyjj at ymail.com>, 2012-2013
 +# nIerSify <chris.schuette86 at googlemail.com>, 2012
 +# Phi Lieb <>, 2012
 +# piccobello <nelsonfritsch at gmail.com>, 2012
 +# seeed <seeed at freenet.de>, 2013
 +# SteinQuadrat, 2013
 +# Susi <>, 2013
 +# Susi  <>, 2012
 +# Thomas Müller <>, 2012
 +# toolking, 2013
 +# traductor <transifex-2.7.mensaje at spamgourmet.com>, 2012-2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-10 13:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: kenwood <kenwood at gmx.ch>\n"
 +"Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de_CH\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakte"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Speichern"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Lade hoch ..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importiere..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Es wurden {count} von {total} Kontakten importiert"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} Kontakte importiert, {failed} fehlgeschlagen."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Ein Adressbuch mit dem Namen {group} ist schon vorhanden"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Fehler beim Hinzufügen des Adressbuchs: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Fehler beim Laden von Adressbüchern: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indiziere Kontakte"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Während das Adressbuch geladen wurde, trat ein nicht behebbarer Fehler auf: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fehler."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Füge hinzu..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Entferne von..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Füge Gruppe hinzu..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Ungültige Adresse: «{url}»"
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Fehler beim öffnen des Mail-Editors"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Ungültige E-Mail Adresse: «{url}»"
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Zusammenführung fehlgeschlagen. Kontakt nicht gefunden: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Zusammenführung fehlgeschlagen."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Zusammenführung fehlgeschlagen. Fehler beim Speichern des Kontakts."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Wählen Sie ein Foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Netzwerk- oder Serverfehler. Bitte informieren Sie den Administrator."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Fehler beim Hinzufügen zur Gruppe."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Fehler beim Löschen aus der Gruppe."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Fehler beim Setzen von {name} als Favorit."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Kontakte zusammenführen"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Abbrechen"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Fügen Sie eine Gruppe hinzu"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kontakt {id} nicht gefunden"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Keine Datei(en) zum Hochladen ausgewählt."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Die Datei, die Sie hochladen möchten, überschreitet die maximale Grösse für Datei-Uploads auf diesem Server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Profilbild bearbeiten"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Foto zuschneiden"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Ist das richtig?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Datum des Fehlers beim Parsen: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# Gruppen"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Einige zum Löschen vorgemerkte Kontakte wurden noch nicht gelöscht. Bitte warten."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klicken Sie hier um das Löschen von {num} Kontakten rückgängig zu machen"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Hinzufügen"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt ist schon in der Gruppe."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakte sind schon in der Gruppe."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kontaktliste konnte nicht ermittelt werden."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt ist nicht in der Gruppe."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakte sind nicht in der Gruppe."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Das Umbenennen der Gruppe ist fehlgeschlagen: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Eine Gruppe mit dem Namen {group} ist schon vorhanden."
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Per «Drag & Drop» können Sie Gruppen\nnach Ihren Wünschen anordnen."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Fehler beim Hinzufügen einer Gruppe: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alle"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoriten"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Geteilt von {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Nicht gruppiert"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Das Laden der Gruppen ist fehlgeschlagen: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importiere..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importieren"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Schliessen"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Fehler"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Der Anzeigename darf nicht leer sein."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav-Link anzeigen"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Schreibgeschützten VCF-Link anzeigen"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Herunterladen"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Bearbeiten"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Löschen"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mehr..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Weniger..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Fehler beim Laden eines Fotos: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu sehen."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakt nicht gefunden"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diese Kontakte zu sehen."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Sie haben nicht die erforderlichen Rechte, Kontakte zum Adressbuch hinzuzufügen."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Das Backend für dieses Adressbuch unterstützt nicht das Hinzufügen von Kontakten."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu löschen."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Das Backend für dieses Adressbuch unterstützt nicht das Löschen von Kontakten."
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Unbekannter Fehler"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Das Backend für dieses Adressbuch unterstützt keine Aktualisierung."
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Sie haben nicht die erforderlichen Rechte, dieses Adressbuch zu aktualisieren."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Sie haben nicht die erforderlichen Rechte, dieses Adressbuch zu löschen."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adressbuch nicht gefunden"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu sehen."
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu aktualisieren."
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Das Backend für diesen Kontakt unterstützt nicht dessen Aktualisierung."
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Dieses Backend unterstützt nicht das Hinzufügen von Kontakten."
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Eigenschaft nicht gefunden"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Fehlender IM-Parameter für:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM unbekannt:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Geburtstag von {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Fehler beim Anlegen eines Adressbuchs"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Fehler beim aktualisieren des Adressbuchs."
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Fehler beim Löschen eines Adressbuchs."
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Fehler beim Anlegen eines Kontakts. "
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Fehler beim Löschen eines Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Fehler beim Abruf des Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Fehler beim Speichern des Kontaktes."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Fehler beim Entfernen des Kontakts aus einem anderen Adressbuch."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kontakt nicht gefunden."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Fehler beim Zusammenfügen in einen Kontakt. "
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Fehler beim Speichern eines Kontakts ins Backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Merkmalsname ist nicht angegeben."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Merkmalsprüfsumme ist nicht angegeben."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Die Information der vCard ist fehlerhaft. Bitte aktualisieren Sie die Seite."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Die Datei ist grösser, als durch die upload_max_filesize Direktive in php.ini erlaubt"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Die Datei ist grösser, als die MAX_FILE_SIZE Vorgabe erlaubt, die im HTML-Formular spezifiziert ist"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Die Datei konnte nur teilweise übertragen werden"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Keine Datei konnte übertragen werden."
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Kein temporärer Ordner vorhanden"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Konnte das temporäre Bild nicht laden:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Das temporäre Bild konnte nicht gespeichert werden:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Kein Foto-Pfad angegeben."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Die Datei existiert nicht:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Fehler beim Laden des Bildes."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Fehler beim Erstellen des temporären Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Fehler beim Zuschneiden des Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Fehler bei der Grössenänderung des Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Fehler beim Abrufen der PHOTO-Eigenschaft."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Kein Gruppenname angegeben."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Fehler beim Hinzufügen der Gruppe."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Kein Gruppenname zum Umbenennen von angegeben."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Kein Gruppenname zum Umbenennen zu angegeben."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Fehler beim Umbenennen der Gruppe aufgetreten."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Gruppen-ID fehlt in der Anfrage."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Fehlender Gruppenname bei der Anfrage."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Kontakt-ID fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Fehler beim Schreiben auf die Festplatte"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nicht genug Speicher vorhanden."
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Versuch, eine gesperrte Datei hochzuladen:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Übertragen der Kontakte fehlgeschlagen."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Sie haben nicht die erforderlichen Rechte, etwas in dieses Adressbuch zu importieren."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Dateiname fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Fortschritt fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Versuch, auf eine gesperrte Datei zuzugreifen:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Keine Kontake gefunden in:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Kein Schlüssel angegeben."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Kein Wert angegeben."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Fehler beim Speichern der Einstellung:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Andere"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Internetseite"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet-Anruf"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbeit"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Start"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Anruf"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mitteilung"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Freunde"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familie"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Neuer Kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruppenbezeichnung"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Neue Gruppe"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adressbücher"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Anzeigename"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Adressbuch hinzufügen"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Datei auswählen ..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Alle (ab-)wählen"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sortierung"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Vor- Nachname"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Nach-, Vorname"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Gruppen"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorit"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Auswahl zusammengeführt"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Tastaturbefehle"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigation"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Nächster Kontakt aus der Liste"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Vorheriger Kontakt aus der Liste"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Ausklappen / Einklappen des Adressbuches"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Nächstes Adressbuch"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Vorheriges Adressbuch"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Aktionen"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Kontaktliste neu laden"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Neuen Kontakt hinzufügen"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Neues Adressbuch hinzufügen"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Aktuellen Kontakt löschen"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Kontakt hinzufügen"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Gruppe löschen"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Gruppe umbenennen"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "In welchen Kontakt sollen die Daten zusammengeführt werden?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Den/die Anderen löschen nach erfolgreicher Zusammenführung?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "E-Mail schreiben"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Derzeitiges Foto löschen"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Derzeitiges Foto ändern"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Neues Foto hochladen"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Foto aus der ownCloud auswählen"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Name"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Vorname"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Zusätzliche Namen"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Nachname"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Wähle Gruppen"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Adressbuch auswählen"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Spitzname"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Spitzname angeben"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Titel eingeben"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisation"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Organisation eingeben"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Geburtstag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notizen hier hinein..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Als VCF exportieren"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-Mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notiz"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Webseite"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kontakt löschen"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Bevorzugt"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Bitte tragen Sie eine gültige E-Mail-Adresse ein."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "jemand at beispiel.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "E-Mail an diese Adresse schicken"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "E-Mail-Adresse löschen"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Telefonnummer angeben"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Telefonnummer löschen"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Webseite aufrufen"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Lösche URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Auf der Karte zeigen"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Lösche Adresse"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Strassenanschrift"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postleitzahl"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Stadt"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Staat oder Provinz"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM löschen"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Teilen"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportieren"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV-Link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV Sync-Adressen"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "weitere Informationen"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primäre Adresse (für Kontakt o.ä.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS / OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressbücher"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Neues Adressbuch"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beschreibung"
diff --cc apps/contacts/l10n/de_DE/contacts.po
index 72335fb,0000000..8e0b4b4
mode 100644,000000..100644
--- a/apps/contacts/l10n/de_DE/contacts.po
+++ b/apps/contacts/l10n/de_DE/contacts.po
@@@ -1,1197 -1,0 +1,1197 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# ako84 <a0306265 at unet.univie.ac.at>, 2013
 +# goeck <admin at s-goecker.de>, 2012
 +# a.tangemann <a.tangemann at web.de>, 2013
 +# a.tangemann <a.tangemann at web.de>, 2012-2013
 +# Mirodin <blobbyjj at ymail.com>, 2012
 +# nIerSify <chris.schuette86 at googlemail.com>, 2012
 +# arkascha <foss at christian-reiner.info>, 2013
 +# Christoph Sczigiol <inactive+christoph.sczigiol at transifex.com>, 2013
 +# deh3nne, 2012
 +# driz <driz at i2pmail.org>, 2012
 +# CBiX <fh at cbix.de>, 2012
 +# javex <florian.ruechel.transifex at inexplicity.de>, 2012
 +# george <social at georgehrke.com>, 2011
 +# hebbet <pascal.herbert at gmail.com>, 2012
 +# SteinQuadrat, 2013
 +# toolking, 2013
 +# I Robot <owncloud-bot at tmit.eu>, 2012
 +# Jan-Christoph Borchardt <JanCBorchardt at fsfe.org>, 2011
 +# Jan-Christoph Borchardt <jan at unhosted.org>, 2011
 +# Marcel Kühlhorn <susefan93 at gmx.de>, 2012-2013
 +# Mario Siegmann <mario_siegmann at web.de>, 2013
 +# Melvin Gundlach <mail at melvin-gundlach.de>, 2012
 +# Michael Krell, 2012
 +# LittleBuddha <mi.sc at gmx.net>, 2012
 +# piccobello <nelsonfritsch at gmail.com>, 2012
 +# JamFX <niko at nik-o-mat.de>, 2012
 +# Phi Lieb <>, 2012
 +# seeed <seeed at freenet.de>, 2013
 +# Susi <>, 2013
 +# Susi  <>, 2012
 +# I Robot <owncloud-bot at tmit.eu>, 2012
 +# Thomas Müller <>, 2012
 +# traductor <transifex-2.7.mensaje at spamgourmet.com>, 2013
 +# traductor <transifex-2.7.mensaje at spamgourmet.com>, 2012
 +# noxin <transifex.com at davidmainzer.com>, 2013
 +# Mirodin <blobbyjj at ymail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Mario Siegmann <mario_siegmann at web.de>\n"
 +"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de_DE\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakte"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Speichern"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Lade hoch ..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importiere..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Vorbereiten..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Es wurden {count} von {total} Kontakten importiert"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} Kontakte importiert, {failed} fehlgeschlagen."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Ein Adressbuch mit dem Namen {group} ist schon vorhanden"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Fehler beim Hinzufügen des Adressbuchs: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Fehler beim Laden von Adressbüchern: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indiziere Kontakte"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Während das Adressbuch geladen wurde, trat ein nicht behebbarer Fehler auf: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fehler."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Füge hinzu..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Entferne von..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Füge Gruppe hinzu..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Ungültige Adresse: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Fehler beim Öffnen des Mail-Editors"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Ungültige E-Mail Adresse: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Zusammenführung fehlgeschlagen. Kontakt nicht gefunden: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Zusammenführung fehlgeschlagen."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Zusammenführung fehlgeschlagen. Fehler beim Speichern des Kontakts."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Wählen Sie ein Foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Netzwerk- oder Serverfehler. Bitte informieren Sie den Administrator."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Fehler beim Hinzufügen zur Gruppe."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Fehler beim Löschen aus der Gruppe."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Fehler beim Setzen von {name} als Favorit."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Kontakte zusammenführen"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Abbrechen"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Fügen Sie eine Gruppe hinzu"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kontakt {id} nicht gefunden"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Keine Datei(en) zum Hochladen ausgewählt."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Die Datei, die Sie hochladen möchten, überschreitet die maximale Größe für Datei-Uploads auf diesem Server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Profilbild bearbeiten"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Foto zuschneiden"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Ist das richtig?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Datum des Fehlers beim Parsen: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# Gruppen"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Fehler beim Auslesen des Geburtstages {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Einige zum Löschen vorgemerkte Kontakte wurden noch nicht gelöscht. Bitte warten."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klicken Sie hier um das Löschen von {num} Kontakten rückgängig zu machen"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Die Löschung von {num} Kontakten wurde abgebrochen"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Hinzufügen"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt ist schon in der Gruppe."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakte sind schon in der Gruppe."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kontaktliste konnte nicht ermittelt werden."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt ist nicht in der Gruppe."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakte sind nicht in der Gruppe."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Das Umbenennen der Gruppe ist fehlgeschlagen: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Eine Gruppe mit dem Namen {group} ist schon vorhanden."
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Per \"Drag & Drop\" können Sie Gruppen\nnach Ihren Wünschen anordnen."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Fehler beim Hinzufügen einer Gruppe: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alle"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoriten"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Geteilt von {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Nicht gruppiert"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Das Laden der Gruppen ist fehlgeschlagen: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Bitte Adressbuch auswählen"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importiere..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Importvorlage konnte nicht geladen werden"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Kontakte werden importiert"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importieren"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import ausgeführt"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Schließen"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Fehler"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Der Anzeigename darf nicht leer sein."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav-Link anzeigen"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Schreibgeschützten VCF-Link anzeigen"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Herunterladen"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Bearbeiten"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Löschen"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mehr..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Weniger..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Serverfehler! Bitte informieren Sie den System-Administrator"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Fehler beim Laden eines Fotos: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu sehen."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakt nicht gefunden"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diese Kontakte zu sehen."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Sie haben nicht die erforderlichen Rechte, Kontakte zum Adressbuch hinzuzufügen."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Das Backend für dieses Adressbuch unterstützt nicht das Hinzufügen von Kontakten."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu löschen."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Das Backend für dieses Adressbuch unterstützt nicht das Löschen von Kontakten."
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Unbekannter Fehler"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Das Backend für dieses Adressbuch unterstützt keine Aktualisierung."
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Sie haben nicht die erforderlichen Rechte, dieses Adressbuch zu aktualisieren."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Sie haben nicht die erforderlichen Rechte, dieses Adressbuch zu löschen."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adressbuch nicht gefunden"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu sehen."
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Sie haben nicht die erforderlichen Rechte, diesen Kontakt zu aktualisieren."
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Das Backend für diesen Kontakt unterstützt nicht dessen Aktualisierung."
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Dieses Backend unterstützt nicht das Hinzufügen von Kontakten."
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Eigenschaft nicht gefunden"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Fehlender IM-Parameter für:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM unbekannt:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Geburtstag von {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Fehler beim Anlegen eines Adressbuchs"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Fehler beim aktualisieren des Adressbuchs."
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Sie haben nicht die erforderlichen Rechte, das \"%s\" Adressbuch zu löschen"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Fehler beim Löschen eines Adressbuchs."
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Fehler beim Anlegen eines Kontakts. "
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Fehler beim Löschen eines Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Fehler beim Abruf des Kontakts."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Fehler beim Speichern des Kontaktes."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Fehler beim Entfernen des Kontakts aus einem anderen Adressbuch."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kontakt nicht gefunden."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Keine Kontaktdaten in der Anfrage."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Fehler beim Zusammenfügen in einen Kontakt. "
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Fehler beim Speichern eines Kontakts ins Backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Merkmalsname ist nicht angegeben."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Merkmalsprüfsumme ist nicht angegeben."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Die Information der vCard ist fehlerhaft. Bitte aktualisieren Sie die Seite."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Fehler beim Aktualisieren eines Kontakts"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Fehler beim Speichern eines Kontakts ins Backend"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Fehler beim Abrufen des Benutzerfotos"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Es ist kein Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Die Datei ist größer, als durch die upload_max_filesize Direktive in php.ini erlaubt"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Die Datei ist größer, als die MAX_FILE_SIZE Vorgabe erlaubt, die im HTML-Formular spezifiziert ist"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Die Datei konnte nur teilweise übertragen werden"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Keine Datei konnte übertragen werden."
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Kein temporärer Ordner vorhanden"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Konnte das temporäre Bild nicht laden:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Das temporäre Bild konnte nicht gespeichert werden:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Kein Foto-Pfad angegeben."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Die Datei existiert nicht:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Fehler beim Laden des Bildes."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Das Bild wurde aus dem Zwischenspeicher entfernt"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Fehler beim Erstellen des temporären Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Fehler beim Zuschneiden des Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Fehler bei der Größenänderung des Bildes"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Fehler beim Abrufen der PHOTO-Eigenschaft."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Kein Gruppenname angegeben."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Fehler beim Hinzufügen der Gruppe."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Kein Gruppenname zum Umbenennen von angegeben."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Kein Gruppenname zum Umbenennen zu angegeben."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Fehler beim Umbenennen der Gruppe aufgetreten."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Gruppen-ID fehlt in der Anfrage."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Fehlender Gruppenname bei der Anfrage."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Kontakt-ID fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Fehler beim Schreiben auf die Festplatte"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nicht genug Speicher vorhanden."
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Versuch, eine gesperrte Datei hochzuladen:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Übertragen der Kontakte fehlgeschlagen."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Fehler beim Verschieben der Datei in den Importordner."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Sie haben nicht die erforderlichen Rechte, etwas in dieses Adressbuch zu importieren."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Dateiname fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Fortschritt fehlt in der Anfrage."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Versuch, auf eine gesperrte Datei zuzugreifen:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Keine Kontake gefunden in:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Kein Schlüssel angegeben."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Kein Wert angegeben."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Fehler beim Speichern der Einstellung:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Andere"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Internetseite"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet-Anruf"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbeit"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Start"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Anruf"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mitteilung"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Freunde"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familie"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Neuer Kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruppenbezeichnung"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Neue Gruppe"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adressbücher"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Anzeigename"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Adressbuch hinzufügen"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Datei auswählen ..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Alle (ab-)wählen"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sortierung"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Vor- Nachname"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Nach-, Vorname"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Gruppen"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorit"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Auswahl zusammengeführt"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Tastaturbefehle"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigation"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Nächster Kontakt aus der Liste"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Vorheriger Kontakt aus der Liste"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Ausklappen / Einklappen des Adressbuches"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Nächstes Adressbuch"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Vorheriges Adressbuch"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Aktionen"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Kontaktliste neu laden"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Neuen Kontakt hinzufügen"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Neues Adressbuch hinzufügen"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Aktuellen Kontakt löschen"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Sie haben keine Kontakte in Ihrem Adressbuch oder Ihr Adressbuch íst deaktiviert.</h3><p>Fügen Sie einen neuen hinzu oder importieren Sie existierende Kontakte aus einer VCF-Datei.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Kontakt hinzufügen"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Gruppe löschen"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Gruppe umbenennen"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "In welchen Kontakt sollen die Daten zusammengeführt werden?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Den/die Anderen löschen nach erfolgreicher Zusammenführung?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "E-Mail schreiben"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Derzeitiges Foto löschen"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Derzeitiges Foto ändern"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Neues Foto hochladen"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Foto aus der ownCloud auswählen"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Name"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Vorname"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Zusätzliche Namen"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Nachname"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Wähle Gruppen"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Adressbuch auswählen"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Spitzname"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Spitzname angeben"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Titel eingeben"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisation"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Organisation eingeben"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Geburtstag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notizen hier hinein..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Als VCF exportieren"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Feld hinzufügen..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-Mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notiz"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Webseite"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kontakt löschen"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Bevorzugt"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Bitte tragen Sie eine gültige E-Mail-Adresse ein."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "jemand at beispiel.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "E-Mail an diese Adresse schicken"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "E-Mail-Adresse löschen"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Telefonnummer angeben"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Telefonnummer löschen"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Webseite aufrufen"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Lösche URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Auf der Karte zeigen"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Lösche Adresse"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Straßenanschrift"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postleitzahl"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Stadt"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Staat oder Provinz"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM löschen"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Teilen"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportieren"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV-Link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV Sync-Adressen"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "weitere Informationen"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primäre Adresse (für Kontakt o.ä.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS / OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressbücher"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Neues Adressbuch"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beschreibung"
diff --cc apps/contacts/l10n/el/contacts.po
index 457d206,0000000..7c8dee2
mode 100644,000000..100644
--- a/apps/contacts/l10n/el/contacts.po
+++ b/apps/contacts/l10n/el/contacts.po
@@@ -1,1186 -1,0 +1,1186 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# AnAstAsiA <anastasia2501 at hotmail.com>, 2012
 +# AnAstAsiA <anastasia2501 at hotmail.com>, 2012
 +# axil Pι <axilleas at archlinux.gr>, 2013
 +# axil Pι <axilleas at archlinux.gr>, 2013
 +# axil Pι <axilleas at archlinux.gr>, 2013
 +# christosvas <christosvas at in.gr>, 2011
 +# christosvas <christosvas at in.gr>, 2011
 +# Dimitris M. <monopatis at gmail.com>, 2012
 +# Efstathios Iosifidis <iefstathios at gmail.com>, 2012
 +# Efstathios Iosifidis <iefstathios at gmail.com>, 2012-2013
 +# Efstathios Iosifidis <iosifidis at opensuse.org>, 2012
 +# Efstathios Iosifidis <iosifidis at opensuse.org>, 2012, 2012-2013, 2013
 +# gtsamis <gtsamis at yahoo.com>, 2013
 +# KAT.RAT12 <spanish.katerina at gmail.com>, 2013
 +# Marios Bekatoros <>, 2012
 +# Nisok Kosin <nikos.efthimiou at gmail.com>, 2012
 +# Petros Kyladitis <petros.kyladitis at gmail.com>, 2011-2012
 +# Serenata <pamponiros at yahoo.com>, 2013
 +# Teogramm <theodorewii121 at hotmail.com>, 2013
 +# xneo1 <vagelis at cyberdest.com>, 2013
 +# xneo1 <vagelis at cyberdest.com>, 2012
 +# Wasilis <inactive+Wasilis at transifex.com>, 2013
 +# Wasilis <inactive+Wasilis at transifex.com>, 2013
 +# xneo1 <vagelis at cyberdest.com>, 2012-2013
 +# KAT.RAT12 <spanish.katerina at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Efstathios Iosifidis <iefstathios at gmail.com>\n"
 +"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: el\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Επαφές"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Αποθήκευση"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Μεταφόρτωση..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Γίνεται εισαγωγή..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Προετοιμασία..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Εισήχθησαν επαφές {count} από {total}"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Αποτυχία πρόσθεσης βιβλίου διευθύνσεων: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Αποτυχία πρόσθεσης βιβλίων διευθύνσεων: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Σφάλμα."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Προσθήκη στο..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Αφαίρεση από το..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Προσθήκη ομάδας..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Μη έγκυρη URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Υπήρχε ένα σφάλμα στο άνοιγμα μίας σύνθεσης μηνύματος."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Μη έγκυρο email: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Αποτυχία συγχώνευσης. Αδυναμία εύρεσης επαφής: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Η συγχώνευση απέτυχε. "
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Αποτυχία συγχώνευσης. Σφάλμα αποθήκευσης επαφής."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Επέλεξε φωτογραφία"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Σφάλμα δικτύου ή διακομιστή. Παρακαλώ ενημερώστε το διαχειριστή."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Σφάλμα κατά την προσθήκη σε ομάδα."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Σφάλμα κατά την αφαίρεση από ομάδα."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Συγχώνευση επαφών"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Άκυρο"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Προσθήκη ομάδας"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "ΟΚ"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Αδυναμία εύρεσης επαφής: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Δεν επιλέχτηκαν αρχεία για μεταφόρτωση"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Το αρχείο που προσπαθείτε να ανεβάσετε υπερβαίνει το μέγιστο μέγεθος για τις προσθήκες αρχείων σε αυτόν τον server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Επεξεργασία εικόνας προφίλ"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Περικοπή φωτογραφίας"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Είναι σωστό;"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# ομάδες"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Κάποιες επαφές σημειώθηκαν προς διαγραφή,δεν έχουν διαγραφεί ακόμα. Παρακαλώ περιμένετε μέχρι να διαγραφούν."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Προσθήκη"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Η επαφή είναι ήδη σε αυτήν την ομάδα."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Οι επαφές είναι ήδη σε αυτήν την ομάδα."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Αδυναμία λήψης λίστας επαφών."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Η επαφή δεν είναι σε αυτή την ομάδα"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Οι επαφές δεν είναι σε αυτή την ομάδα."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Υπάρχει ήδη μια ομάδα με όνομα {group}"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Σφάλμα προσθήκη της ομάδας: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Όλες"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Αγαπημένες"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Διαμοιράστηκε από τον {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Οχι ομαδοποιημένα"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Παρακαλώ επέλεξε βιβλίο διευθύνσεων"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Εισαγωγή σε..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Εισαγωγή επαφών"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Εισαγωγή"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Η εισαγωγή ολοκληρώθηκε"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Κλείσιμο"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Σφάλμα"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Το όνομα προβολής δεν μπορεί να είναι κενό. "
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Εμφάνιση συνδέσμου CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Εμφάνιση συνδέσμου VCF μόνο για ανάγνωση"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Λήψη"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Επεξεργασία"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Διαγραφή"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Περισσότερα..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Λιγότερα"
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Αποτυχία φόρτωσης φωτογραφίας: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Δεν βρέθηκε επαφή"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Δεν έχετε δικαιώματα για να δείτε αυτές τις επαφές"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Δεν έχετε δικαιώματα για να προσθέσετε επαφές σε αυτό το βιβλίο διευθύνσεων."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Δεν διαθέτε επαρκή δικαιώματα για την διαγραφή αυτής της επαφής."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Άγνωστο σφάλμα"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Δεν έχετε δικαιώματα ενημέρωσης αυτού του βιβλίου διευθύνσεων."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Δεν έχετε δικαιώματα να διαγράψετε αυτό το βιβλίο διευθύνσεων."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Δε βρέθηκε βιβλίο διευθύνσεων"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Δεν έχετε δικαιώματα να δείτε αυτή την επαφή"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Δεν έχετε δικαιώματα για να ενημερώσετε αυτή την επαφή"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Άγνωστο IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Τα Γεννέθλια του/της {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Σφάλμα κατά την δημιουργία βιβλίου διευθύνσεων "
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Σφάλμα κατά την ενημέρωση του βιβλίου διευθύνσεων"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Σφάλμα κατά την διαγραφή βιβλίου διεευθύνσεων "
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Σφάλμα δημιουργίας επαφής."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Σφάλμα διαγραφής επαφής."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Σφάλμα κατά την ανάκτηση της επαφής"
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Σφάλμα κατά την αποθήκευση επαφής."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Σφάλμα διαγραφής επαφής από το βιβλίο διευθύνσεων"
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Η επαφή δεν μπόρεσε να βρεθεί."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Οι πληροφορίες σχετικά με vCard είναι εσφαλμένες. Παρακαλώ επαναφορτώστε τη σελίδα."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Δεν υπάρχει σφάλμα, το αρχείο εστάλει επιτυχώς"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Το αρχείο που εστάλει υπερβαίνει την οδηγία μέγιστου επιτρεπτού μεγέθους \"upload_max_filesize\" του php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Το ανεβασμένο αρχείο υπερβαίνει το MAX_FILE_SIZE που ορίζεται στην  HTML φόρμα"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Το αρχείο εστάλει μόνο εν μέρει"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Κανένα αρχείο δεν στάλθηκε"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Λείπει ο προσωρινός φάκελος"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Δεν ήταν δυνατή η φόρτωση της προσωρινής εικόνας: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Δεν ήταν δυνατή η αποθήκευση της προσωρινής εικόνας: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Δε δόθηκε διαδρομή εικόνας"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Το αρχείο δεν υπάρχει"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Σφάλμα φόρτωσης εικόνας"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Σφάλμα κατά την δημιουργία προσωρινής εικόνας"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Σφάλμα κατά την περικοπή εικόνας"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Σφάλμα κατά την αλλαγή μεγέθους εικόνας"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Σφάλμα κατά τη λήψη ιδιοτήτων ΦΩΤΟΓΡΑΦΙΑΣ."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Δεν δόθηκε όνομα ομάδας."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Σφάλμα κατά την προσθήκη ομάδας."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Σφάλμα κατά τη μετονομασία της ομάδας"
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Αποτυχία εγγραφής στο δίσκο"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Σφάλμα κατά την αποθήκευση επαφών"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Δεν βρέθηκαν επαφές στο: "
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Δεν δόθηκε κλειδί "
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Δεν δόθηκε τιμή "
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Αδυναμία ορισμού προτίμησης:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Επαφή"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Άλλο"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Ιστοσελίδα"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Κλήση Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Εργασία"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Σπίτι"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Κινητό"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Κείμενο"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Ομιλία"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Μήνυμα"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Φαξ"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Βίντεο"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Βομβητής"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Διαδίκτυο"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Φίλοι"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Οικογένεια"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Νέα επαφή"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Όνομα ομάδας"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Νέα Ομάδα"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Βιβλία Διευθύνσεων"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Όνομα εμφάνισης"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Προσθήκη Βιβλίου Διευθύνσεων"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Επιλογή αρχείου..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Απο-)επιλογή όλων"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Σειρά ταξινόμησης"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Όνομα- Επίθετο"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Επίθετο-, Όνομα"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Ομάδες"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Αγαπημένο"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Συγχώνευση επιλέχτηκε"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Συντομεύσεις πλητρολογίου"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Πλοήγηση"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Επόμενη επαφή στη λίστα"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Προηγούμενη επαφή στη λίστα"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Ανάπτυξη/σύμπτυξη τρέχοντος βιβλίου διευθύνσεων"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Επόμενο βιβλίο διευθύνσεων"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Προηγούμενο βιβλίο διευθύνσεων"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Ενέργειες"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Ανανέωσε τη λίστα επαφών"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Προσθήκη νέας επαφής"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Προσθήκη νέου βιβλίου επαφών"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Διαγραφή τρέχουσας επαφής"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Δεν έχετε επαφές στο βιβλίο διευθύνσεων.</h3><p>Προσθέστε μία νέα επαφή ή εισάγετε τις υπάρχουσες επαφές σας από ένα αρχείο VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Προσθήκη επαφής"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Διαγραφή ομάδας"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Μετονομασία ομάδας"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Σύνθεση μηνύματος"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Διαγραφή τρέχουσας φωτογραφίας"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Επεξεργασία τρέχουσας φωτογραφίας"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Ανέβασε νέα φωτογραφία"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Επέλεξε φωτογραφία από το ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Όνομα"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Όνομα"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Επιπλέον ονόματα"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Επώνυμο"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Επιλέξτε ομάδες"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Επέλεξε βιβλίο διευθύνσεων"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Παρατσούκλι"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Εισάγετε παρατσούκλι"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Τίτλος"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Εισάγετε τίτλο"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Οργανισμός"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Εισάγετε οργανισμό"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Γενέθλια"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Πρόσθεσε τις σημειώσεις εδώ..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Εξαγωγή ως VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Τηλέφωνο"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Ηλ. ταχυδρομείο"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Άμεσα μυνήματα"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Διεύθυνση"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Σημείωση"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Ιστότοπος"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Διαγραφή επαφής"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Προτιμώμενο"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Παρακαλώ εισήγαγε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Αποστολή σε διεύθυνση"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Διαγραφή διεύθυνση email"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Εισήγαγε αριθμό τηλεφώνου"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Διέγραψε αριθμό τηλεφώνου"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Πήγαινε στον ιστότοπο"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Διαγραφή URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Προβολή στο χάρτη"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Διαγραφή διεύθυνσης"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Διεύθυνση οδού"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Ταχυδρομικός Κωδικός"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Πόλη"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Νομός ή περιφέρεια"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "ΗΠΑ"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Χώρα"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Διαγραφή IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Ενεργό"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Διαμοιρασμός"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Εξαγωγή"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Σύνδεσμος CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "συγχρονισμός διευθύνσεων μέσω CardDAV "
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "περισσότερες πλροφορίες"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Κύρια Διεύθυνση(Επαφή και άλλα)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Βιβλία διευθύνσεων"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Νέο βιβλίο διευθύνσεων"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Περιγραφή"
diff --cc apps/contacts/l10n/en_GB/contacts.po
index a6bd141,0000000..0b8b499
mode 100644,000000..100644
--- a/apps/contacts/l10n/en_GB/contacts.po
+++ b/apps/contacts/l10n/en_GB/contacts.po
@@@ -1,1162 -1,0 +1,1162 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mnestis <transifex at mnestis.net>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: mnestis <transifex at mnestis.net>\n"
 +"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: en_GB\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contacts"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Save"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Uploading..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importing..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparing..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Imported {count} of {total} contacts"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Imported {imported} contacts. {failed} failed."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "An address book called {name} already exists"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Failed adding address book: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Failed loading address books: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexing contacts"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Unrecoverable error loading address books: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Error."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Add to..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Remove from..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Add group..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Invalid URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "There was an error opening a mail composer."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Invalid email: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Merge failed. Cannot find contact: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Merge failed."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Merge failed. Error saving contact."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Select photo"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Network or server error. Please inform administrator."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Error adding to group."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Error removing from group."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Error setting {name} as favourite."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Merge contacts"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancel"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Add group"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Could not find contact: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "No files selected for upload."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "The file you are trying to upload exceeds the maximum size for file uploads on this server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Edit profile picture"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Crop photo"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Is this correct?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Error parsing date: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# groups"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Error parsing birthday {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Click to undo deletion of {num} contacts"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Cancelled deletion of {num} contacts"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Add"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Contact is already in this group."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Contacts are already in this group."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Couldn't get contact list."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Contact is not in this group."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Contacts are not in this group."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Failed renaming group: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "A group named {group} already exists"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "You can drag groups to\narrange them as you like."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Failed adding group: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "All"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favourites"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Shared by {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Not grouped"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Failed loading groups: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Please choose the address book"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Import into..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Error loading import template"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Import contacts"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Import"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import done"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Close"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Error"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Displayname cannot be empty."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Show CardDav link"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Show read-only VCF link"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Download"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Edit"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Delete"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "More..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Less..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Server error! Please inform a system administrator"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Failed to load photo: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "You do not have permission to see these contacts"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contact not found"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "You do not have permission to see these contacts"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "You do not have permission add contacts to the address book"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "The backend for this address book does not support adding contacts"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "You do not have permission to delete this contact"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "The backend for this address book does not support deleting contacts"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Unknown error"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "The backend for this address book does not support updating"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "You don't have permission to update the address book."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "You don't have permission to delete the address book."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Address book not found"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "You do not have permission to see this contact"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "You do not have permission to update this contact"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "The backend for this contact does not support updating it"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "This backend not support adding contacts"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Property not found"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr " Missing IM parameter for: "
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Unknown IM: "
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}'s Birthday"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Error creating address book"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Error updating address book"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "You do not have permission to delete the \"%s\" address book"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Error deleting address book"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Error creating contact."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Error deleting contact."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Error retrieving contact."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Error saving contact."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Error removing contact from other address book."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Couldn't find contact."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "No contact data in request."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Error merging into contact."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Error saving contact to backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Property name is not set."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Property checksum is not set."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Information about vCard is incorrect. Please reload the page."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Error updating contact"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Error saving contact to backend"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Error getting user photo"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "No file was uploaded. Unknown error"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "There is no error, the file uploaded successfully"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "The uploaded file was only partially uploaded"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "No file was uploaded"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Missing a temporary folder"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Couldn't load temporary image: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Couldn't save temporary image: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "No photo path was submitted."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "File doesn't exist:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Error loading image."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Image has been removed from cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Error creating temporary image"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Error cropping image"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Error resizing image"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Error getting PHOTO property."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "No group name given."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Error adding group."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "No group name to rename from given."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "No group name to rename to given."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Error renaming group."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Group ID missing from request."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Group name missing from request."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Contact ID missing from request."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Failed to write to disk"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Not enough storage available"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Attempt to upload blacklisted file:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Error uploading contacts to storage."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Error moving file to imports folder."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "You do not have permission to import into this address book."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "File name missing from request."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Progress key missing from request."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Attempt to access blacklisted file:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "No contacts found in: "
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "No key is given."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "No value is given."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Could not set preference: "
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contact"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Other"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "HomePage"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet call"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Work"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Home"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobile"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voice"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Message"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Friends"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Family"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "New Contact"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Group name"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "New Group"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Address books"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Display name"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Add Address Book"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Select file..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(De-)select all"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sort order"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Firstname Surname"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Surname, Firstname"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Groups"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favourite"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Merge selected"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Keyboard shortcuts"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigation"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Next contact in list"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Previous contact in list"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Expand/collapse current address book"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Next address book"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Previous address book"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Actions"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Refresh contacts list"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Add new contact"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Add new address book"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Delete current contact"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>You have no contacts in your address book or your address book is disabled.</h3><p>Add a new contact or import existing contacts from a VCF file.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Add contact"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Delete group"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Rename group"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Into which contact should the data be merged?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Delete the other(s) after successful merge?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Compose mail"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Delete current photo"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Edit current photo"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Upload new photo"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Select photo from ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Name"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "First-name"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Middle names"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Surname"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Select groups"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Select address book"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Nickname"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Enter nickname"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Title"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Enter title"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisation"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Enter organisation"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Birthday"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notes go here..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Export as VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Add field..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Phone"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Address"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Note"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Website"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Delete contact"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferred"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Please specify a valid email address."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Mail to address"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Delete email address"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Enter phone number"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Delete phone number"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Go to website"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Delete URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "View on map"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Delete address"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Street address"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postcode"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "City"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "State or province"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Country"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Delete IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Active"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Share"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Export"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV syncing addresses"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "more info"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primary address (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Address books"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "New Address Book"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Description"
diff --cc apps/contacts/l10n/eo/contacts.po
index f109c88,0000000..0ba97d9
mode 100644,000000..100644
--- a/apps/contacts/l10n/eo/contacts.po
+++ b/apps/contacts/l10n/eo/contacts.po
@@@ -1,1164 -1,0 +1,1164 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Mariano <mstreet at kde.org.ar>, 2013
 +# Mariano <mstreet at kde.org.ar>, 2012
 +# Mariano <mstreet at kde.org.ar>, 2011, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Mariano <mstreet at kde.org.ar>\n"
 +"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: eo\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontaktoj"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Konservi"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Alŝutante..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Enportante..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indeksante kontaktojn"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Eraro."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Aldoni al..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Forigi el..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Aldoni grupon..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Nevalidas URL-adreso: “{url}”"
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Eraro okazis dum malfermo de retpoŝtomesaĝoredaktilo."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Nevalidas retpoŝtadreso: “{url}”"
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Kunfando malsukcesis. Ne troviĝas kontakto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Kunfando malsukcesis."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Kunfando malsukcesis. Eraris konservo de kontakto."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Elekti foton"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Reta aŭ servila eraro. Bonvolu sciigi al la administranto."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Eraro dum aldono al grupo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Eraro dum forigo el grupo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Kunfandi kontaktojn"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Nuligi"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Aldoni grupon"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Akcepti"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Ne troviĝis kontakto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Neniu dosiero elektita por alŝuto."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "La dosiero, kiun vi provas alŝuti, transpasas la maksimuman grandon por dosieraj alŝutoj en ĉi tiu servilo."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Redakti profilbildon"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Ĉu ĉi tio ĝustas?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupoj"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Iuj kontaktoj estas markitaj por forigo, sed ankoraŭ ne forigitaj. Bonvolu atendi ĝis ili foriĝos."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klaku por malfari forigon de {num} kontaktoj"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Nuliĝis forigo de {num} kontaktoj"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Aldoni"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "La kontakto jam estas en ĉi tiu grupo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "La kontaktoj jam estas en ĉi tiu grupo."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Ne eblis ekhavi kontaktoliston."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "La kontakto ne estas en ĉi tiu grupo."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "La kontaktoj ne estas en ĉi tiu grupo."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Malsukcesis alinomigo de grupo: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Grupo nomata {group} jam ekzistas"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Malsukcesis aldono de grupo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Ĉio"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoratoj"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Kunhavigita de {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Ne grupigita"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Malsukcesis ŝargo de grupoj: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Bonvolu elekti adresaron"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Enporti en..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Enporti kontaktojn"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Enporti"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Enporto plenumiĝis"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Fermi"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Eraro"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Montronomo devas ne esti malplena."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Montri CardDav-ligilon"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Montri nur legeblan VCF-ligilon"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Elŝuti"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Redakti"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Forigi"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Pli..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Malpli..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Malsukcesis ŝargo de foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "La kontakto ne troviĝis"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Nekonata eraro"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "La adresaro ne troviĝis"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Eco ne troviĝis"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Nekonata tujmesaĝado:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Naskiĝtago de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Eraris kreo de adresaro"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Eraris alŝuto de adresaro"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Eraris forigo de adresaro"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Eraris kreo de kontakto."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Eraris forigo de kontakto."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Eraris revenigo de kontakto."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Eraro dum konserviĝis kontakto."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Eraris forigo de kontakto el aliaj adresaroj."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Ne troviĝis kontakto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Eraris kunfando en kontakton."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informo pri vCard estas malĝusta. Bonvolu reŝargi la paĝon."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Eraris ĝisdatigo de kontakto"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Eraris ekhavo de uzantofoto"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Neniu dosiero alŝutiĝis. Nekonata eraro."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Ne estas eraro, la dosiero alŝutiĝis sukcese."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "La alŝutita dosiero transpasas la preskribon upload_max_filesize en php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "La dosiero alŝutita superas la regulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "la alŝutita dosiero nur parte alŝutiĝis"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Neniu dosiero alŝutiĝis."
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Mankas provizora dosierujo."
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Ne eblis ŝargi provizoran bildon: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Ne eblis konservi provizoran bildon: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Neniu vojo al foto sendiĝis."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Dosiero ne ekzistas:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Eraro dum ŝargado de bildo."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "La bildo foriĝis el kaŝmemoro."
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Eraro dum kreiĝis provizora bildo."
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Eraro dum stuciĝis bildo."
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Eraro dum aligrandiĝis bildo"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Eraro dum ekhaviĝis la propraĵon PHOTO."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Eraro dum aldono de grupo."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Eraris alinomigo de grupo."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Grupidentigilo mankas en peto."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Gruponomo mankas en peto."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Kontaktidentigilo mankas en peto."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Malsukcesis skribo al disko"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Ne haveblas sufiĉa memoro"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Eraro dum alŝutiĝis kontaktoj al konservejo."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Dosieronomo mankas en peto."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Progresklavo mankas en peto."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Neniu kontakto troviĝis en:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Neniu klavo doniĝis."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Neniu valoro doniĝis."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Ne eblis agordi preferon:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Alia"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Hejmpaĝo"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Interreta voko"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Tvitero"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Vizaĝlibro"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo!"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skajpo"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Laboro"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Hejmo"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Poŝtelefono"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Teksto"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voĉo"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mesaĝo"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fakso"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Videaĵo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Televokilo"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Interreto"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amikoj"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familio"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nova kontakto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruponomo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nova grupo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adresaroj"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Aldoni adresaron"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Elekti dosieron..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Mal)elekti ĉion"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Persona- FamiliaNomo"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Familia-, PersonaNomo"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupoj"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorato"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Fulmoklavoj"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigado"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Jena kontakto en la listo"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Maljena kontakto en la listo"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Etendi/Maletendi la nunan adresaron"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Jena adresaro"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Maljena adresaro"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Agoj"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Refreŝigi la kontaktoliston"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Aldoni novan kontakton"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Aldoni novan adresaron"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Forigi la nunan kontakton"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Aldoni kontakton"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Forigi grupon"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Alinomigi grupon"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Redakti retpoŝtomesaĝon"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Forigi nunan foton"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Redakti nunan foton"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Alŝuti novan foton"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Elekti foton el ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nomo"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Persona nomo"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Pliaj nomoj"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Familia nomo"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Elekti grupojn"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Elekti adresaron"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Kromnomo"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Enigu kromnomon"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titolo"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizaĵo"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Naskiĝotago"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notoj iras tie ĉi..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Malenporti kiel VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Aldoni kampon..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefono"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Retpoŝto"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Tujmesaĝado"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adreso"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Noto"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "TTT-ejo"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Forigi kontakton"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferata"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Bonvolu specifi validan retpoŝtadreson."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "iu at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Retpoŝtmesaĝo al adreso"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Forigi retpoŝþadreson"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Enigi telefonnumeron"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Forigi telefonnumeron"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Iri al TTT-ejon"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Forigi URL-on"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Vidi en mapo"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Forigi adreson"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Stratadreso"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Poŝtkodo"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Urbo"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "Usono"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Lando"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Tujmesaĝilo"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Forigi tujmesaĝadon"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiva"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Kunhavigi"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Elporti"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "adresoj por CardDAV-sinkronigo"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "pli da informo"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Ĉefa adreso (Kontact kaj aliaj)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adresaroj"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nova adresaro"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Priskribo"
diff --cc apps/contacts/l10n/es/contacts.po
index 6bc05db,0000000..2f2080a
mode 100644,000000..100644
--- a/apps/contacts/l10n/es/contacts.po
+++ b/apps/contacts/l10n/es/contacts.po
@@@ -1,1187 -1,0 +1,1187 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Agustin Ferrario <agustin.ferrario at hotmail.com.ar>, 2012-2013
 +# Art O. Pal <artopal at fastmail.fm>, 2012-2013
 +# Bui <bui at g.pl>, 2012
 +# VaCi0 <cvargas at linuxmail.org>, 2013
 +# telco2011 <davidlopez.david at gmail.com>, 2012
 +# Francisco Losada <flosada at gmail.com>, 2013
 +# ggam <ggam at brainleakage.com>, 2013
 +# eSSeneX <israel at expander.es>, 2013
 +# Javier Llorente <javier at opensuse.org>, 2012
 +# juanman <juanma at kde.org.ar>, 2013
 +# juanman <juanma at kde.org.ar>, 2011-2012
 +# valarauco <manudeloz86 at gmail.com>, 2012
 +# msoko <sokolovitch at yahoo.com>, 2013
 +# mikelanabitarte <mikelanabitarte at gmail.com>, 2013
 +# oSiNaReF  <>, 2012
 +# plaguna <laguna.sanchez at gmail.com>, 2013
 +# pablomillaquen <pablomillaquen at gmail.com>, 2013
 +# Raul Fernandez Garcia <raulfg3 at gmail.com>, 2012-2013
 +# qdneren <renanqd at yahoo.com.mx>, 2013
 +# rodrigo.calvo <rodrigo.calvo at gmail.com>, 2012
 +# Rubén del Campo <yo at rubendelcampo.es>, 2013
 +# Rubén Trujillo <rubentrf at gmail.com>, 2012
 +# saskarip <saskarip at gmail.com>, 2013
 +# xsergiolpx <sergioballesterossolanas at gmail.com>, 2011-2012
 +# scambra <sergio at programatica.es>, 2013
 +# William Díaz <wdiazux at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Rubén del Campo <yo at rubendelcampo.es>\n"
 +"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: es\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactos"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Guardar"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Subiendo..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importando..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparando..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importados {count} de un total de {total} contactos"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} contactos importados. Han fallado {failed}."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Ya existe una libreta de contactos llamada {name}"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Hubo un fallo al agregar la libreta de contactos: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Se produjo un error al cargar las libretas de contactos: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexando contactos"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Error irrecuperable mientras se cargaban las libretas de contactos: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Error."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Añadir a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Eliminar de..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Añadir grupo..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL no válida: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Hubo un error mientras se abría el compositor de correo electrónico."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Dirección de correo inválida: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Error en la combinación. No se puede encontrar contacto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Error en la combinación."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Combinación fallida. Error guardando el contacto."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Seleccionar una foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Error en la red o en el servidor. Por favor, informe al administrador."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Error añadiendo al grupo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Error eliminando del grupo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Error configurando {name} como favorito."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Combinar contactos"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancelar"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Añadir grupo"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Aceptar"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "No se puede encontrar el contacto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "No se seleccionaron archivos para subir."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "El fichero que quieres subir excede el tamaño máximo permitido en este servidor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Editar imagen de perfil."
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Recortar imagen"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "¿Es esto correcto?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Error al analizar la fecha: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupos"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Error al analizar el cumpleaños {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Algunos contactos están marcados para su eliminación, pero no eliminados todavía. Por favor, espere a que sean eliminados."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Pulse para deshacer la eliminación de {num} contactos"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Cancelada la eliminación de {num} contactos"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Añadir"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "El contacto ya se encuentra en este grupo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Los contactos ya se encuentran es este grupo."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "No se pudo obtener la lista de contactos."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "El contacto no se encuentra en este grupo."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Los contactos no se encuentran en este grupo."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Error renombrando el grupo: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Ya existe un grupo llamado {group}"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Puedes arrastrar grupos para\ncolocarlos como usted quiera."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Error añadiendo el grupo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Todos"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoritos"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Compartido por {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "No agrupado"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Error cargando grupos: {error} "
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Por favor, escoja una libreta de direcciones"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importando en..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Error cargando la plantilla a importar"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importar contactos"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importar"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importación realizada"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Cerrar"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Error"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "El nombre para mostrar no puede estar vacío."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostrar enlace CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostrar enlace VCF de sólo lectura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Descargar"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Eliminar"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Más..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menos..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Error en el servidor. Por favor, informe al administrador."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Error cargando foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "No tiene permisos para ver este contacto"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contacto no encontrado"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "No tiene permisos para ver estos contactos"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "No tiene permisos para agregar contactos a esta libreta de direcciones"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "El backend de esta libreta de direcciones no permite agregar contactos"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "No tiene permisos para borrar este contacto"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "El backend de esta libreta de direcciones no permite eliminar contactos"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Error desconocido"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "El backend de esta libreta de direcciones no permite actualizaciones"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "No tiene permisos para modificar esta libreta de direcciones"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "No tiene permisos para borrar esta libreta de direcciones."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "No se encontraron libretas de direcciones."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "No tiene permisos para ver este contacto"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "No tiene permisos para actualizar este contacto"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "El backend de este contacto no permite actualizarlo"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Este backend no permite agregar contactos"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Propiedad no encontrada"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Falta el parámetro de IM para:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Servicio IM desconocido:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Cumpleaños de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Error creando libreta de direcciones"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Error actualizando libreta de direcciones"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "No tiene los permisos requeridos para eliminar la libreta de direcciones \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Error borrando libreta de direcciones"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Error creando contacto."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Error borrando contacto."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Error obteniendo contacto."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Error guardando el contacto."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Error borrando contacto desde otra libreta de direcciones."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr " No se puede encontrar contacto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "No hay información de contacto en la solicitud."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Error fusionando en contacto."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Error guardando contacto en backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Nombre de propiedad no definido."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Verificación de propiedad no definida."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "La información sobre el vCard es incorrecta. Por favor, recargue la página."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Error actualizando contacto"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Error guardando el contacto"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Error obteniendo la imagen de usuario"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "No se subió ningún archivo. Error desconocido"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "No hay ningún error, el archivo se ha subido con éxito"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "El archivo subido sobrepasa la directiva \"upload_max_filesize\" del archivo PHP.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "El archivo subido sobrepasa la directiva \"MAX_FILE_SIZE\" especificada en el formulario HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "El archivo ha sido subido parcialmente"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "No se subió ningún archivo"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Falta una carpeta temporal"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "No se pudo cargar la imagen temporal:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "No se pudo guardar una imagen temporal"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "No se ha introducido la ruta de la foto."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "El archivo no existe:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Error cargando la imagen."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "La imagen ha sido eliminada de la caché"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Error creando la imagen temporal"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Error al recortar la imagen"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Error redimensionando la imagen."
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Error obteniendo las propiedades de la foto."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "No se ha especificado un nombre de grupo."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Error añadiendo el grupo."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "No hay nombre de grupo para renombrar el que se ha dado."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "No se ha especificado un nombre de grupo para renombrar el que se ha dado"
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Error renombrando grupo."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Falta el ID de grupo en la solicitud."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Falta el nombre del grupo en la petición."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Falta el ID de contacto en la solicitud."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Error al escribir al disco"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "No hay suficiente espacio disponible"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Intentó subir un fichero en lista negra:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Error subiendo contactos al almacenamiento."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Error moviendo ficheros a la carpeta de importaciones."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "No tiene permiso para importar en esta libreta de direcciones."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Falta el nombre del fichero en la petición."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Falta la clave de progreso en la petición."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Intentó acceder a un fichero en la lista negra:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "No se encontraron contactos en:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "No se ha especificado una clave."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "No se ha especificado un valor."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "No se pudo establecer la opción:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contacto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Otro"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Página de inicio"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Llamada por Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "Google Talk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Trabajo"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Particular"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Móvil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Texto"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voz"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mensaje"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vídeo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Localizador"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amigos"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nuevo contacto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nombre de grupo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nuevo grupo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Libretas de direcciones"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Nombre para mostrar"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Añadir libreta de direcciones"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Seleccionar archivo"
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(De-)seleccionar todos"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Ordenar"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Nombre, Apellido"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Apellido, Nombre"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupos"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorito"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Combinar seleccionados"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Atajos de teclado"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navegación"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Siguiente contacto en la lista"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Anterior contacto en la lista"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Abrir/cerrar la libreta actual"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Siguiente libreta de direcciones"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Anterior libreta de direcciones"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Acciones"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Refrescar la lista de contactos"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Añadir un nuevo contacto"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Añadir nueva libreta de direcciones"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Eliminar contacto actual"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>No tiene contactos en su libreta de direcciones o su libreta de direcciones está desactivada.</h3><p>Agregue un nuevo contacto o importe contactos de un archivo VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Añadir contacto"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Eliminar grupo"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Renombrar grupo"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "¿En qué contacto deben fusionarse los datos?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "¿Borrar el/los otro(s) después de una combinación satisfactoria?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Redactar mensaje"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Eliminar fotografía actual"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editar fotografía actual"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Subir nueva fotografía"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Seleccionar fotografía desde ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nombre"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Nombre"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Nombres adicionales"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Apellido"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Seleccionar grupos"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Seleccionar libreta de direcciones"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Alias"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Introduce un alias"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Título"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Introduzca título"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organización"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Introduzca organización"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Fecha de nacimiento"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Puede escribir notas aquí..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportar como VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Agregar campo..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Teléfono"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Mensajería instantánea"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Dirección"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Sitio Web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Eliminar contacto"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferido"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Por favor especifica una dirección de correo electrónico válida."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "alguien at ejemplo.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Enviar por correo a la dirección"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Eliminar dirección de correo electrónico"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Introduce un número de teléfono"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Eliminar número de teléfono"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ir al sitio Web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Eliminar URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Ver en el mapa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Eliminar dirección"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Calle"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Código postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Ciudad"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Estado o provincia"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "EUA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "País"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Mensajero instantáneo"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Eliminar IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Activo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Compartir"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportar"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Enlace CardDav"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Sincronizando direcciones"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "Más información"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Dirección principal (Kontact y otros)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Libretas de direcciones"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nueva libreta de direcciones"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descripción"
diff --cc apps/contacts/l10n/es_AR/contacts.po
index 82f7920,0000000..adf8c64
mode 100644,000000..100644
--- a/apps/contacts/l10n/es_AR/contacts.po
+++ b/apps/contacts/l10n/es_AR/contacts.po
@@@ -1,1168 -1,0 +1,1168 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Agustin Ferrario <>, 2012
 +# Agustin Ferrario <agustin.ferrario at hotmail.com.ar>, 2012-2013
 +# cjtess <claudio.tessone at gmail.com>, 2013
 +# cjtess <claudio.tessone at gmail.com>, 2012
 +# gmoriello <gmoriello at gmail.com>, 2013
 +# Javierkaiser <javierkaiser at gmail.com>, 2012
 +# juliabis, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: cjtess <claudio.tessone at gmail.com>\n"
 +"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: es_AR\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactos"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Guardar"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Subiendo..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importando..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparando..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Se importaron {count} de {total} contactos"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Se importaron {imported} contactos. {failed} fallidos."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Ya existe una libreta de direcciones con nombre {name}"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Error al añadir la libreta de direcciones: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Error al cargar la libreta de direcciones: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexando contactos"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Error total al cargar las libretas de contactos: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Error."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Agregar a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Borrar de..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Añadir grupo..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL no válida: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Hubo un error al abrir el escritor de correo electrónico"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Correo electrónico inválido : \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Error al combinar. No se puede encontrar contacto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Falló la combinación"
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Falló la combinación. Error al guardar el contacto."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Seleccionar una imagen"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Error en la red o en el servidor. Por favor, informe al administrador."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Error al agregar al grupo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Error al borrar del grupo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Error al configurar {name} como favorito."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Combinar contactos."
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancelar"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Añadir grupo"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Aceptar"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "No se puede encontrar el contacto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "No hay archivos seleccionados para subir"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "El archivo que querés subir supera el tamaño máximo permitido en este servidor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Editar imagen del perfil"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Recortar imagen"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "¿Es esto correcto?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Error al analizar la fecha: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupos"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Error al interpretar fecha de nacimiento {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Algunos contactos fuero marcados para ser borrados, pero no fueron borrados todavía. Esperá que lo sean."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Pulsá para deshacer la eliminación de {num} contactos"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Cancelado el borrado de {num} contactos"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Agregar"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "El contacto ya está en este grupo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Los contactos ya están en este grupo."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "No se pudo obtener la lista de contactos."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "El contacto no está en este grupo."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Los contactos no están en este grupo."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Error al renombrar el grupo: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Un grupo llamado {grupo} ya existe"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Podés arrastrar grupos para\nordenarlos como quieras"
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Error agregando el grupo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Todos"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoritos"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Compartido por {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "No agrupado"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Error cargando grupos: {error} "
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Elegí la agenda"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importando en..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Error cargando la plantilla a importar"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importar contactos"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importar"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importación completada"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Cerrar"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Error"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "El nombre a mostrar no puede quedar en blanco"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostrar enlace CardDAV"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostrar enlace VCF de sólo lectura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Descargar"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Borrar"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Más..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menos..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Error en el servidor. Por favor, informá al administrador."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Error cargando foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "No tiene permisos para ver este contacto."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contacto no encontrado"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "No tiene permisos para ver estos contactos."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "No tiene atribuciones para añadir contactos a la libreta de direcciones."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "El backend de esta libreta de direcciones no permite agregar contactos"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "No tiene permisos para borrar este contacto."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "El backend de esta libreta de direcciones no permite borrar contactos"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Error desconocido"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "El backend de esta libreta de direcciones no permite actualizaciones"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "No tiene atribuciones para actualizar la libreta de direcciones."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "No tiene atribuciones para borrar la libreta de direcciones."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Libreta de direcciones no encontrada"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "No tiene atribuciones para ver este contacto."
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "No tenés permisos para actualizar este contacto"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "El backend de este contacto no permite actualizarlo"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Este backend no permite agregar contactos"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "No se encuentra la propiedad"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Falta un parámetro de IM para:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "MI desconocido:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Cumpleaños de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Error creando libreta de direcciones"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Error actualizando libreta de direcciones"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "No tenés los permisos requeridos para para la libreta de direcciones \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Error borrando libreta de direcciones"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Error al crear contacto."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Error al borrar contacto."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Error al obtener contacto."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Error al guardar el contacto."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Error borrando contacto de la otra libreta de direcciones."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "No se puede encontrar contacto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "No hay información de contacto en la solicitud."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Error combinando en un contacto."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Error guardando contacto en backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Nombre de propiedad no definido."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Verificación de propiedad no definida."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "La información sobre la vCard es incorrecta. Por favor, cargá nuevamente la página"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Error actualizando contacto"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Error guardando el contacto"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Error obteniendo la imagen de usuario"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "El archivo no fue subido. Error desconocido"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "No hay errores, el archivo fue subido con éxito"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "El archivo subido excede el valor 'upload_max_filesize' del archivo de configuración php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "El archivo subido sobrepasa el valor MAX_FILE_SIZE especificada en el formulario HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "El archivo fue subido parcialmente"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "No se subió ningún archivo "
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Falta un directorio temporal"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "No se pudo cargar la imagen temporal"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "No fue posible guardar la imagen temporal"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "La ruta de la imagen no fue enviada"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "El archivo no existe."
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Error cargando imagen."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "La imagen fue eliminada de la caché"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Error al crear una imagen temporal"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Error al recortar la imagen"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Error al cambiar el tamaño de la imagen"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Error al obtener la propiedades de la foto."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "No fue dado un nombre de grupo"
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Error al agregar el grupo"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "No se dio nombre de grupo para renombrar."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "No se dio nombre de grupo a renombrar"
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Error al cambiar nombre de grupo"
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "El ID de grupo falta en el pedido"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Falte nombre del grupo en el pedido"
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Falta ID de contacto en la solicitud"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Error al escribir en el disco"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "No hay suficiente almacenamiento"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Intento de subida de un archivo en la lista negra:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Error al subir contactos al almacenamiento."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Error moviendo archivos al directorio con importaciones"
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "No tenés permisos para importar a esta libreta de direcciones."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Falta el nombre del archivo en la petición"
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Falta la clave de progreso en el pedido"
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Intento de acceso a un archivo de la lista negra:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "No se encontraron contactos en:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "No fue dada una clave"
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "No fue dado un valor"
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "No se pudo asignar la preferencia:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contacto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Otros"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Página personal"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Llamada por Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Trabajo"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Particular"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Celular"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Texto"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voz"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mensaje"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amigos"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nuevo contacto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nombre de grupo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nuevo grupo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Libretas de direcciones"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Nombre a mostrar"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Agregar libreta de direcciones"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Seleccionar archivo..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(De-)seleccionar todos"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Orden"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Nombre, Apellido"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Apellido, Nombre"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupos"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorito"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Fusionar seleccionados"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Atajos de teclado"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navegación"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Contacto siguiente en la lista"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contacto anterior en la lista"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Expandir/colapsar la agenda"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Siguiente agenda"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Agenda anterior"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Acciones"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Refrescar la lista de contactos"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Agregar un nuevo contacto"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Agregar nueva agenda"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Borrar el contacto seleccionado"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>No tenés contactos en la libreta de direcciones o la libreta de direcciones está desactivada.</h3><p>Agregá un nuevo contacto o importá contactos de un archivo VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Agregar contacto"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Borrar grupo"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Renombrar grupo"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "¿En qué contacto deben fusionarse los datos?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "¿Borrar el/los otro(s) después de una combinación satisfactoria?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Redactar mensaje"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Eliminar imagen actual"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editar imagen actual"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Subir nueva imagen"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Seleccionar imagen desde ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nombre"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Nombre"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Segundo nombre"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Apellido"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Seleccionar grupos"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Seleccionar libreta de direcciones"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Sobrenombre"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Escribí un sobrenombre"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Título"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Ingresá título"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organización"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Ingresá organización"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Cumpleaños"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Las notas van acá..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportar como VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Agregar campo..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Teléfono"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "e-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Mensajería instantánea"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Dirección"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Página web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Borrar contacto"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferido"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Por favor, escribí una dirección de e-mail válida."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Enviar por e-mail a la dirección"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Eliminar dirección de correo electrónico"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Escribí un número de teléfono"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Eliminar número de teléfono"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ir al sitio web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Borrar URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Ver en el mapa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Borrar dirección"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Calle de la dirección"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Código postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Ciudad"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Provincia o estado"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "EE. UU."
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "País"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Mensajero instantáneo"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Eliminar IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Activo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Compartir"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportar"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Enlace CardDav"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV está sincronizando direcciones"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "más información"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Dirección primaria (Kontact y semejantes)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Agendas"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nueva agenda"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descripción"
diff --cc apps/contacts/l10n/et_EE/contacts.po
index d048032,0000000..7971a70
mode 100644,000000..100644
--- a/apps/contacts/l10n/et_EE/contacts.po
+++ b/apps/contacts/l10n/et_EE/contacts.po
@@@ -1,1164 -1,0 +1,1164 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# dagor <dagor.vint at hotmail.com>, 2012
 +# pisike.sipelgas <pisike.sipelgas at gmail.com>, 2013
 +# Rivo Zängov <eraser at eraser.ee>, 2011-2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Rivo Zängov <eraser at eraser.ee>\n"
 +"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: et_EE\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontaktid"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Salvesta"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Üleslaadimine..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importimine..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Valmistumine..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Imporditud {count} kontakti {total}-st"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Imporditud {imported} kontakti. Ebaõnnestus {failed}."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Aadressiraamat nimega {name} on juba olemas"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Aadressiramatu lisamine ebaõnnestus: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Aadressiraamatute laadimine ebaõnnestus: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Kontaktide indekseerimine"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Taastumatu viga aadressiraamatute laadimisel: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Viga."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Lisa..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Eemalda..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Lisa gruppi..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Vigane URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Meiliprogrammi avamisel tekkis viga."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Vigane e-post: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Ühendamine ebaõnnestus. Ei suuda leida kontakti: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Ühendamine ebaõnnestus."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Ühendamine ebaõnnestus. Viga kontakti salvestamisel."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Vali foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Võrgu või serveri viga. Palun informeeri administraatorit."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Viga gruppi lisamisel."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Viga grupist eemaldamisel."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Viga {name} lemmikuks määramisel."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Ühenda kontaktid"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Loobu"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Lisa grupp"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Ei leia kontakti: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Üleslaadimiseks pole faile valitud."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Fail, mida sa proovid üles laadida, ületab sinu serveri poolt määratud maksimaalse üleslaadimise limiidi."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Muuda profiili pilti"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Lõika pilti"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Kas see on õige?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Viga kuupäeva parsimisel: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupid"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Viga sünnipäeva {bday} parsimisel: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Mõned kontaktid on märgitud kustutamiseks, aga pole veel kustutatud. Palun oota, kuni need kustutatakse."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Kliki, et tühistada {num} kontakti kustutamine"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Tühistatud {num} kontakti kustutamine"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Lisa"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt juba on selles grupis."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontaktid juba on selles grupis."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kontaktide nimekirja hankimine ebaõnnestus."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt pole selles grupis."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontaktid pole selles grupis."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Grupi ümber nimetamine ebaõnnestus: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Grupp nimega {group} on juba olemas"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Pukseeri gruppe märgile ⏎\nsobivamaks reastuseks"
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Grupi lisamine ebaõnnestus: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Kõik"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Lemmikud"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Jagas {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Pole grupeeritud"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Gruppide laadimine ebaõnnestus: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Palun vali aadressiraamat"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Impordi ..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Viga impordi malli laadimisel"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Impordi kontaktid"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Impordi"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importimine on tehtud"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Sulge"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Viga"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Näidatav nimi ei saa olla tühi."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Näita CardDav linki"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Näita VCF linki (ainult lugemisõigusega)"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Lae alla"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Muuda"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Kustuta"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Veel..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Vähem..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Serveri viga! Palun teavita süsteemi administraatorit"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Pildi laadimine ebaõnnestus: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Sul pole selle kontakti vaatamiseks õigusi"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakti ei leitud"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Sul pole nende kontaktide vaatamiseks õigusi"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Sul pole õigusi aadressiraamatusse kontaktide lisamiseks"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Selle aadressiraamatu tagarakend ei toeta kontaktide lisamist"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Sul pole selle kontakti kustutamiseks õigusi"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Selle aadressiraamatu tagarakend ei toeta kontaktide kustutamist"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Tundmatu viga"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Selle aadressiraamatu tagarakend ei toeta uuendamist"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Sul pole õigusi selle aadressiraamatu uuendamiseks."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Sul pole õigusi aadressiraamatu kustutamiseks."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Aadressiraamatut ei leitud"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Sul pole selle kontakti vaatamiseks õigusi"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Sul pole õigusi selle kontakti uuendamiseks."
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Tagarakend ei toeta selle kontakti muutmist"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "See tagarakend ei toeta kontaktide lisamist"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Omadust ei leitud"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Puuduv IM parameeter:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Tundmatu IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} sünnipäev"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Viga aadressiraamatu loomisel"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Viga aadressiraamatu uuendamisel"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Sul pole õigusi aadressiraamatu \"%s\" kustutamiseks"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Viga aadressiraamatu kustutamisel"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Viga kontakti loomisel."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Viga kontakti kustutamisel."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Viga kontakti hankimisel."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Viga kontakti salvestamisel."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Viga kontakti eemaldamisel aadressiraamatust."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Ei suuda leida kontakti."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Päringus pole kontaktinfot."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Viga kontaktiks ühendamisel."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Viga kontakti salvestamisel tagarakendisse."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Omaduse nimi pole määratud."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Omaduse kontrollsummat pole määratud."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Visiitkaardi info pole korrektne. Palun lae leht uuesti."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Viga kontakti uuendamisel"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Viga kontakti salvestamisel tagarakendisse"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Viga kasutaja foto hankimisel"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ühtegi faili ei laetud üles. Tundmatu viga"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Ühtegi tõrget polnud, fail on üles laetud"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Üleslaetud fail ületab php.ini failis määratud upload_max_filesize suuruse"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Üleslaetud fail ületab MAX_FILE_SIZE suuruse, mis on HTML vormi jaoks määratud"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Fail laeti üles ainult osaliselt"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ühtegi faili ei laetud üles"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Ajutiste failide kaust puudub"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Ajutise pildi laadimine ebaõnnestus: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Ajutise pildi salvestamine ebaõnnestus: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Foto asukohta pole määratud."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Faili pole olemas:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Viga pildi laadimisel."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Pilt on puhvrist eemaldatud"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Viga ajutise pildi loomisel"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Viga pildi lõikamisel"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Viga pildi suuruse muutmisel"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Viga PHOTO omaduse hankimisel."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Puudub grupi nimi."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Viga grupi lisamisel."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Puudub ümbernimetatava grupi nimi."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Puudub grupi nimi ümbernimetatamiseks."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Viga grupi ümber nimetamisel."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Päringust puudub Grupi ID."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Päringust puudub grupi nimi."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Päringust puudub kontakti ID."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Kettale kirjutamine ebaõnnestus"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Saadaval pole piisavalt ruumi"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Katse üles laadida mustas nimekirjas olevat faili:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Viga kontaktide üleslaadimisel kettale."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Viga faili liigutamisel impordi kataloogi."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Sul pole õigusi sellesse aadressiraamatuse importimiseks."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Päringust puudub faili nimi."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Päringust puudub edenemise võti."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Katse kasutada mustas nimekirjas olevat faili:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Kontakte ei leitud: "
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Puudub võti."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Puudub väärtus."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Eelistust ei saa määrata:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Muu"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Koduleht"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Interneti kõne"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Töö"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Kodu"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobiil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Tekst"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Hääl"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Sõnum"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faks"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Piipar"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Sõbrad"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Pereliikmed"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Uus kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Grupi nimi"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Uus grupp"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Aadressiraamatud"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Näidatav nimi"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Lisa aadressiraamat"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Vali fail..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Ära) vali kõik"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sorteerimise järjekord"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Ees- Perenimi"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Pere-, Eesnimi"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupid"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Lemmik"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Liida valitud"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Klaviatuuri otseteed"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigeerimine"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Järgmine kontakt nimekirjas"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Eelmine kontakt nimekirjas"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Ava/Sulge praegune aadressiraamat"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Järgmine aadressiraamat"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Eelmine aadressiraamat"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Tegevused"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Värskenda kontaktide nimekirja"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Lisa uus kontakt"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Lisa uus aadressiraamat"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Kustuta praegune kontakt"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Sul pole aadressiraamatus ühtegi kontakti või on sinu aadressiraamat keelatud.</h3><p>Lisa uus kontakt või impordi olemasolevad kontaktid VCF failist.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Lisa kontakt"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Kustuta grupp"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Grupi ümbernimetus"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Millisele kontaktile tuleks andmed lisada?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Kustuta teine (teised) peale edukat ühendamist?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Koosta kiri"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Kustuta praegune foto"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Muuda praegust pilti"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Lae üles uus foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Vali foto ownCloudist"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nimi"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Eesnimi"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Lisanimed"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Perekonnanimi"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Vali grupid"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Vali aadressiraamat"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Hüüdnimi"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Sisesta hüüdnimi"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Pealkiri"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Sisesta tiitel"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisatsioon"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Sisesta organisatsioon"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Sünnipäev"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Märkmed lähevad siia.."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Ekspordi VCF-ina"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Lisa väli ..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-post"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Kiirsõnumid"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Aadress"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Märkus"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Veebisait"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kustuta kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Eelistatud"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Palun sisesta korrektne e-posti aadress."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Kiri aadressile"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Kustuta e-posti aadress"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Sisesta telefoninumber"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Kustuta telefoninumber"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Mine veebisaidile"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Kustuta URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Vaata kaardil"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Kustuta aadress"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Tänava aadress"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postiindeks"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Linn"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Maakond"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Riik"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Kiirsõnum"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Kustuta IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiivne"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Jaga"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Ekspordi"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV sünkroniseerimise aadressid"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "lisainfo"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Peamine aadress (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Aadressiraamatud"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Uus aadressiraamat"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Kirjeldus"
diff --cc apps/contacts/l10n/eu.php
index d9c597d,0000000..12855e2
mode 100644,000000..100644
--- a/apps/contacts/l10n/eu.php
+++ b/apps/contacts/l10n/eu.php
@@@ -1,177 -1,0 +1,216 @@@
 +<?php $TRANSLATIONS = array(
 +"Contacts" => "Kontaktuak",
 +"Save" => "Gorde",
 +"Uploading..." => "Igotzen...",
 +"Importing..." => "Inportatzen",
++"Preparing..." => "Prestatzen...",
 +"Imported {count} of {total} contacts" => "{total} kontaktuetatik {count} inportatuak",
 +"Indexing contacts" => "Kontaktuak indexatzen",
 +"Error." => "Akatsa.",
 +"Add to..." => "Gehitu hemen...",
 +"Remove from..." => "Ezabatu hemendik...",
 +"Add group..." => "Gehitu taldea...",
++"Invalid URL: \"{url}\"" => "URL ez-egokia: \"{url}\"",
 +"There was an error opening a mail composer." => "Errore bat izan da posta editorea abiaraztean.",
++"Invalid email: \"{url}\"" => "e-posta ez egokia: \"{url}\"",
 +"Select photo" => "Hautatu argazkia",
 +"Network or server error. Please inform administrator." => "Errore bat izan da sare edo zerbitzarian. Mesedez abisatu administradorea.",
 +"Error adding to group." => "Errore bat izan da taldera gehitzean.",
 +"Error removing from group." => "Errore bat izan da taldetik kentzean.",
 +"Merge contacts" => "Kontaktuak batu",
 +"Cancel" => "Ezeztatu",
 +"Add group" => "Gehitu taldea",
 +"OK" => "Ados",
 +"Could not find contact: {id}" => "Ezin izan dugu kontaktua topatu:  {id}",
 +"No files selected for upload." => "Ez duzu igotzeko fitxategirik hautatu.",
 +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Igo nahi duzun fitxategia zerbitzariak onartzen duen tamaina baino handiagoa da.",
 +"Edit profile picture" => "Editatu profilaren argazkia",
++"Crop photo" => "Moztu argazkia",
 +"Is this correct?" => "Hau zuzena al da?",
++"Error parsing date: {date}" => "Errorea data aztertzerakoan: {date}",
 +"# groups" => "# taldeak",
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Kontaktu batzuk ezabatzeko markatuta daude, baina oraindik ez dira ezabatu. Mesedez itxoin ezabatu arte.",
 +"Click to undo deletion of {num} contacts" => "Klikatu {num} kontaktuen ezabaketa desegiteko",
 +"Add" => "Gehitu",
 +"Contact is already in this group." => "Kontaktua dagoeneko talde honetan dago.",
 +"Contacts are already in this group." => "Kontaktuak dagoeneko talde honetan daude.",
 +"Couldn't get contact list." => "Ezin izan da kontaktuen zerrenda lortu.",
 +"Contact is not in this group." => "Kontaktua ez dago talde honetan.",
 +"Contacts are not in this group." => "Kontaktuak ez daude talde honetan.",
 +"Failed renaming group: {error}" => "Talderan izena aldatzen huts egin dugu: {error}",
 +"A group named {group} already exists" => "{group} izeneko taldea dagoeneko existitzen da",
 +"Failed adding group: {error}" => "Ezin izan dugu taldea gehitu: {error}",
 +"All" => "Denak",
 +"Favorites" => "Gogokoak",
 +"Shared by {owner}" => "{owner}-k partekatuta",
++"Not grouped" => "Taldekatu gabe",
++"Failed loading groups: {error}" => "Taldea kargatzeak huts egin du: {error}",
 +"Please choose the addressbook" => "Mesedez, aukeratu helbide liburua",
++"Import into..." => "Inportatu hemen...",
++"Import contacts" => "Kontaktuak inportatu",
 +"Import" => "Inportatu",
 +"Import done" => "Inportazioa burutua",
 +"Close" => "Itxi",
 +"Error" => "Errorea",
 +"Displayname cannot be empty." => "Bistaratzeko izena ezin da hutsik egon.",
 +"Show CardDav link" => "Erakutsi CardDav lotura",
 +"Show read-only VCF link" => "Erakutsi bakarrik irakurtzeko VCF lotura",
 +"Download" => "Deskargatu",
 +"Edit" => "Editatu",
 +"Delete" => "Ezabatu",
 +"More..." => "Gehiago...",
 +"Less..." => "Gutxiago...",
++"Failed loading photo: {error}" => "Argazkia kargatzeak huts egin du: {error}",
++"Contact not found" => "Ez da kontaktua aurkitu",
 +"Unknown error" => "Errore ezezaguna",
++"Address book not found" => "Ez da helbide liburua aurkitu.",
++"Property not found" => "Propietatea ez da aurkitu",
 +"Unknown IM: " => "BM ezezaguna:",
 +"{name}'s Birthday" => "{name}ren jaioteguna",
++"You do not have permissions to delete the \"%s\" address book" => "Ez duzu \"%s\" helbide-liburua ezabatzeko baimenik",
++"Error creating contact." => "Errore bat izan da kontaktua sortzean.",
++"Error deleting contact." => "Errorea bat izan da kontaktua ezabatzean.",
 +"Error saving contact." => "Errore bat izan da kontaktua gordetzean.",
++"Couldn't find contact." => "Ezin izan da kontaktua aurkitu.",
 +"Information about vCard is incorrect. Please reload the page." => "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea.",
++"Error updating contact" => "Errore bat izan da kontaktua eguneratzerakoan",
 +"No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna",
 +"There is no error, the file uploaded with success" => "Ez da errorerik egon, fitxategia ongi igo da",
 +"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Igotako fitxategia php.ini fitxategiko upload_max_filesize direktiba baino handiagoa da",
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da.",
 +"The uploaded file was only partially uploaded" => "Igotako fitxategiaren zati bat bakarrik igo da",
 +"No file was uploaded" => "Ez da fitxategirik igo",
 +"Missing a temporary folder" => "Aldi bateko karpeta falta da",
 +"Couldn't load temporary image: " => "Ezin izan da aldi bateko irudia kargatu:",
 +"Couldn't save temporary image: " => "Ezin izan da aldi bateko irudia gorde:",
 +"No photo path was submitted." => "Ez da argazkiaren bide-izenik eman.",
 +"File doesn't exist:" => "Fitxategia ez da existitzen:",
 +"Error loading image." => "Errore bat izan da irudia kargatzearkoan.",
 +"Error creating temporary image" => "Errore bat izan da aldi bateko irudia sortzen",
 +"Error cropping image" => "Errore bat izan da irudia mozten",
 +"Error resizing image" => "Errore bat izan da irudiaren tamaina aldatzean",
 +"Error getting PHOTO property." => "Errore bat izan da PHOTO propietatea lortzean.",
 +"Error adding group." => "Errore bat izan da taldea gehitzean.",
++"Error renaming group." => "Errore bat izan da taldea berrizendatzerakoan.",
 +"Group ID missing from request." => "Taldearen IDa falta da eskarian.",
 +"Contact ID missing from request." => "Kontaktuaren IDa falta da eskarian.",
 +"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
 +"Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
 +"Error uploading contacts to storage." => "Errore bat egon da kontaktuak biltegira igotzerakoan.",
++"Attempt to access blacklisted file:" => "Zerrenda beltzeko fitxategi baten igotzearen saiakuntza:",
++"No contacts found in: " => "Ez da kontakturik aurkitu hemen:",
++"No value is given." => "Ez da baliorik eman.",
 +"Could not set preference: " => "Ezin izan da lehentasuna ezarri:",
 +"Contact" => "Kontaktua",
 +"Other" => "Bestelakoa",
 +"HomePage" => "WebOrria",
 +"Jabber" => "Jabber",
++"Internet call" => "Interneteko deia",
 +"AIM" => "AIM",
 +"MSN" => "MSN",
 +"Twitter" => "Twitter",
 +"GoogleTalk" => "GoogleTalk",
 +"Facebook" => "Facebook",
 +"XMPP" => "XMPP",
 +"ICQ" => "ICQ",
 +"Yahoo" => "Yahoo",
 +"Skype" => "Skype",
 +"QQ" => "QQ",
 +"GaduGadu" => "GaduGadu",
 +"Work" => "Lana",
 +"Home" => "Etxea",
 +"Mobile" => "Mugikorra",
 +"Text" => "Testua",
 +"Voice" => "Ahotsa",
 +"Message" => "Mezua",
 +"Fax" => "Fax-a",
 +"Video" => "Bideoa",
 +"Pager" => "Bilagailua",
 +"Internet" => "Internet",
 +"Friends" => "Lagunak",
 +"Family" => "Familia",
 +"New Contact" => "Kontaktu berria",
++"Group name" => "Taldearen izena",
 +"New Group" => "Talde berria",
++"Address books" => "Helbide liburuak",
++"Display name" => "Bistaratze izena",
++"Add Address Book" => "Gehitu Helbide-liburua",
++"Select file..." => "Hautatu fitxategia...",
 +"(De-)select all" => "(Ez-)Hautatu dena",
++"First- Lastname" => "Izena, Abizena",
++"Last-, Firstname" => "Abizena, Izena",
 +"Groups" => "Taldeak",
 +"Favorite" => "Gogokoa",
 +"Keyboard shortcuts" => "Teklatuaren lasterbideak",
 +"Navigation" => "Nabigazioa",
 +"Next contact in list" => "Hurrengoa kontaktua zerrendan",
 +"Previous contact in list" => "Aurreko kontaktua zerrendan",
 +"Expand/collapse current addressbook" => "Zabaldu/tolestu uneko helbide-liburua",
 +"Next addressbook" => "Hurrengo helbide-liburua",
 +"Previous addressbook" => "Aurreko helbide-liburua",
 +"Actions" => "Ekintzak",
 +"Refresh contacts list" => "Gaurkotu kontaktuen zerrenda",
 +"Add new contact" => "Gehitu kontaktu berria",
 +"Add new addressbook" => "Gehitu helbide-liburu berria",
 +"Delete current contact" => "Ezabatu uneko kontaktuak",
 +"Add contact" => "Gehitu kontaktua",
 +"Delete group" => "Ezabatu taldea",
++"Rename group" => "Berrizendatu taldea",
 +"Compose mail" => "Idatzi eposta",
 +"Delete current photo" => "Ezabatu oraingo argazkia",
 +"Edit current photo" => "Editatu oraingo argazkia",
 +"Upload new photo" => "Igo argazki berria",
 +"Select photo from ownCloud" => "Hautatu argazki bat ownCloudetik",
 +"Name" => "Izena",
 +"First name" => "Izena",
 +"Additional names" => "Tarteko izenak",
 +"Last name" => "Abizena",
 +"Select groups" => "Hautatu taldeak",
++"Select address book" => "Hautatu helbide-liburua",
 +"Nickname" => "Ezizena",
 +"Enter nickname" => "Sartu ezizena",
 +"Title" => "Izenburua",
++"Enter title" => "Idatzi titulua",
 +"Organization" => "Erakundea",
++"Enter organization" => "Idatzi erakundea",
 +"Birthday" => "Jaioteguna",
 +"Notes go here..." => "Idatzi oharrak hemen...",
++"Export as VCF" => "VCF gisa esportatu",
++"Add field..." => "Gehitu eremua...",
 +"Phone" => "Telefonoa",
 +"Email" => "E-posta",
 +"Instant Messaging" => "Berehalako mezularitza",
 +"Address" => "Helbidea",
 +"Note" => "Oharra",
 +"Web site" => "Web orria",
 +"Delete contact" => "Ezabatu kontaktua",
 +"Preferred" => "Hobetsia",
 +"Please specify a valid email address." => "Mesedez sartu eposta helbide egoki bat",
++"someone at example.com" => "norbait at adibide.com",
 +"Mail to address" => "Bidali helbidera",
 +"Delete email address" => "Ezabatu eposta helbidea",
 +"Enter phone number" => "Sartu telefono zenbakia",
 +"Delete phone number" => "Ezabatu telefono zenbakia",
 +"Go to web site" => "Web orrira joan",
 +"Delete URL" => "Ezabatu URLa",
 +"View on map" => "Ikusi mapan",
 +"Delete address" => "Ezabatu helbidea",
 +"Street address" => "Kalearen helbidea",
 +"Postal code" => "Posta kodea",
 +"City" => "Hiria",
++"State or province" => "Estatu edo probintzia",
 +"Country" => "Herrialdea",
 +"Instant Messenger" => "Instant Messenger",
 +"Delete IM" => "Ezabatu BM",
 +"Active" => "Aktibo",
 +"Share" => "Partekatu",
 +"Export" => "Exportatu",
++"CardDAV link" => "CardDAV lotura",
 +"CardDAV syncing addresses" => "CardDAV sinkronizazio helbideak",
 +"more info" => "informazio gehiago",
 +"Primary address (Kontact et al)" => "Helbide nagusia",
 +"iOS/OS X" => "iOS/OS X",
 +"Addressbooks" => "Helbide Liburuak",
 +"New Address Book" => "Helbide-liburu berria",
 +"Description" => "Deskribapena"
 +);
diff --cc apps/contacts/l10n/eu/contacts.po
index 2565a09,0000000..cd0a2aa
mode 100644,000000..100644
--- a/apps/contacts/l10n/eu/contacts.po
+++ b/apps/contacts/l10n/eu/contacts.po
@@@ -1,1166 -1,0 +1,1166 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# asieriko <asieriko at gmail.com>, 2013
 +# asieriko <asieriko at gmail.com>, 2012
 +# asieriko <asieriko at gmail.com>, 2011
 +# Debatik mundura!, 2013
 +# Piarres Beobide <pi at beobide.net>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
- "Last-Translator: Debatik mundura!\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-14 21:40+0000\n"
++"Last-Translator: asieriko <asieriko at gmail.com>\n"
 +"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: eu\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontaktuak"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Gorde"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Igotzen..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Inportatzen"
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
- msgstr ""
++msgstr "Prestatzen..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "{total} kontaktuetatik {count} inportatuak"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Kontaktuak indexatzen"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Akatsa."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Gehitu hemen..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Ezabatu hemendik..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Gehitu taldea..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
- msgstr ""
++msgstr "URL ez-egokia: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Errore bat izan da posta editorea abiaraztean."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
- msgstr ""
++msgstr "e-posta ez egokia: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Hautatu argazkia"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Errore bat izan da sare edo zerbitzarian. Mesedez abisatu administradorea."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Errore bat izan da taldera gehitzean."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Errore bat izan da taldetik kentzean."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Kontaktuak batu"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Ezeztatu"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Gehitu taldea"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Ados"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Ezin izan dugu kontaktua topatu:  {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Ez duzu igotzeko fitxategirik hautatu."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Igo nahi duzun fitxategia zerbitzariak onartzen duen tamaina baino handiagoa da."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Editatu profilaren argazkia"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
- msgstr ""
++msgstr "Moztu argazkia"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Hau zuzena al da?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
- msgstr ""
++msgstr "Errorea data aztertzerakoan: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# taldeak"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Kontaktu batzuk ezabatzeko markatuta daude, baina oraindik ez dira ezabatu. Mesedez itxoin ezabatu arte."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klikatu {num} kontaktuen ezabaketa desegiteko"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Gehitu"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontaktua dagoeneko talde honetan dago."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontaktuak dagoeneko talde honetan daude."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Ezin izan da kontaktuen zerrenda lortu."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontaktua ez dago talde honetan."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontaktuak ez daude talde honetan."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Talderan izena aldatzen huts egin dugu: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "{group} izeneko taldea dagoeneko existitzen da"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Ezin izan dugu taldea gehitu: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Denak"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Gogokoak"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "{owner}-k partekatuta"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
- msgstr ""
++msgstr "Taldekatu gabe"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
- msgstr ""
++msgstr "Taldea kargatzeak huts egin du: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Mesedez, aukeratu helbide liburua"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
- msgstr ""
++msgstr "Inportatu hemen..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
- msgstr ""
++msgstr "Kontaktuak inportatu"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Inportatu"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Inportazioa burutua"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Itxi"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Errorea"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Bistaratzeko izena ezin da hutsik egon."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Erakutsi CardDav lotura"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Erakutsi bakarrik irakurtzeko VCF lotura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Deskargatu"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editatu"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Ezabatu"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Gehiago..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Gutxiago..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
- msgstr ""
++msgstr "Argazkia kargatzeak huts egin du: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
- msgstr ""
++msgstr "Ez da kontaktua aurkitu"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Errore ezezaguna"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
- msgstr ""
++msgstr "Ez da helbide liburua aurkitu."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
- msgstr ""
++msgstr "Propietatea ez da aurkitu"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "BM ezezaguna:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}ren jaioteguna"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
- msgstr ""
++msgstr "Ez duzu \"%s\" helbide-liburua ezabatzeko baimenik"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
- msgstr ""
++msgstr "Errore bat izan da kontaktua sortzean."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
- msgstr ""
++msgstr "Errorea bat izan da kontaktua ezabatzean."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Errore bat izan da kontaktua gordetzean."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
- msgstr ""
++msgstr "Ezin izan da kontaktua aurkitu."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
- msgstr ""
++msgstr "Errore bat izan da kontaktua eguneratzerakoan"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ez da fitxategirik igo. Errore ezezaguna"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Ez da errorerik egon, fitxategia ongi igo da"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Igotako fitxategia php.ini fitxategiko upload_max_filesize direktiba baino handiagoa da"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Igotako fitxategiaren zati bat bakarrik igo da"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ez da fitxategirik igo"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Aldi bateko karpeta falta da"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Ezin izan da aldi bateko irudia kargatu:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Ezin izan da aldi bateko irudia gorde:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Ez da argazkiaren bide-izenik eman."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Fitxategia ez da existitzen:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Errore bat izan da irudia kargatzearkoan."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Errore bat izan da aldi bateko irudia sortzen"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Errore bat izan da irudia mozten"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Errore bat izan da irudiaren tamaina aldatzean"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Errore bat izan da PHOTO propietatea lortzean."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Errore bat izan da taldea gehitzean."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
- msgstr ""
++msgstr "Errore bat izan da taldea berrizendatzerakoan."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Taldearen IDa falta da eskarian."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Kontaktuaren IDa falta da eskarian."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Errore bat izan da diskoan idazterakoan"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Ez dago behar aina leku erabilgarri,"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Errore bat egon da kontaktuak biltegira igotzerakoan."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
- msgstr ""
++msgstr "Zerrenda beltzeko fitxategi baten igotzearen saiakuntza:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
- msgstr ""
++msgstr "Ez da kontakturik aurkitu hemen:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
- msgstr ""
++msgstr "Ez da baliorik eman."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Ezin izan da lehentasuna ezarri:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontaktua"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Bestelakoa"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "WebOrria"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
- msgstr ""
++msgstr "Interneteko deia"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Lana"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Etxea"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mugikorra"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Testua"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Ahotsa"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mezua"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax-a"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Bideoa"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Bilagailua"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Lagunak"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Kontaktu berria"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
- msgstr ""
++msgstr "Taldearen izena"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Talde berria"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
- msgstr ""
++msgstr "Helbide liburuak"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
- msgstr ""
++msgstr "Bistaratze izena"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
- msgstr ""
++msgstr "Gehitu Helbide-liburua"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
- msgstr ""
++msgstr "Hautatu fitxategia..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Ez-)Hautatu dena"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
- msgstr ""
++msgstr "Izena, Abizena"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
- msgstr ""
++msgstr "Abizena, Izena"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Taldeak"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Gogokoa"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Teklatuaren lasterbideak"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Nabigazioa"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Hurrengoa kontaktua zerrendan"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Aurreko kontaktua zerrendan"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Zabaldu/tolestu uneko helbide-liburua"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Hurrengo helbide-liburua"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Aurreko helbide-liburua"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Ekintzak"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Gaurkotu kontaktuen zerrenda"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Gehitu kontaktu berria"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Gehitu helbide-liburu berria"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Ezabatu uneko kontaktuak"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Gehitu kontaktua"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Ezabatu taldea"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
- msgstr ""
++msgstr "Berrizendatu taldea"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Idatzi eposta"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Ezabatu oraingo argazkia"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editatu oraingo argazkia"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Igo argazki berria"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Hautatu argazki bat ownCloudetik"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Izena"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Izena"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Tarteko izenak"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Abizena"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Hautatu taldeak"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
- msgstr ""
++msgstr "Hautatu helbide-liburua"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Ezizena"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Sartu ezizena"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Izenburua"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
- msgstr ""
++msgstr "Idatzi titulua"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Erakundea"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
- msgstr ""
++msgstr "Idatzi erakundea"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Jaioteguna"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Idatzi oharrak hemen..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
- msgstr ""
++msgstr "VCF gisa esportatu"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
- msgstr ""
++msgstr "Gehitu eremua..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefonoa"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-posta"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Berehalako mezularitza"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Helbidea"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Oharra"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Web orria"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Ezabatu kontaktua"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Hobetsia"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Mesedez sartu eposta helbide egoki bat"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
- msgstr ""
++msgstr "norbait at adibide.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Bidali helbidera"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Ezabatu eposta helbidea"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Sartu telefono zenbakia"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Ezabatu telefono zenbakia"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Web orrira joan"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Ezabatu URLa"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Ikusi mapan"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Ezabatu helbidea"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Kalearen helbidea"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Posta kodea"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Hiria"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
- msgstr ""
++msgstr "Estatu edo probintzia"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Herrialdea"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Ezabatu BM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktibo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Partekatu"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportatu"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
- msgstr ""
++msgstr "CardDAV lotura"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV sinkronizazio helbideak"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "informazio gehiago"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Helbide nagusia"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Helbide Liburuak"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Helbide-liburu berria"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Deskribapena"
diff --cc apps/contacts/l10n/fa/contacts.po
index e46651d,0000000..439e4e1
mode 100644,000000..100644
--- a/apps/contacts/l10n/fa/contacts.po
+++ b/apps/contacts/l10n/fa/contacts.po
@@@ -1,1165 -1,0 +1,1165 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# amirlord <pnetsale at gmail.com>, 2013
 +# Amir Reza Asadi <amirreza.asadi at live.com>, 2013
 +# Hossein Rayeshman <rayeshman at gmail.com>, 2012
 +# miki_mika1362 <miki_mika1362 at yahoo.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: fa\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "ارتباط‌ها"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "ذخیره"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "درحال بارگذاری..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "تصویر را انتخاب کنید"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "منصرف شدن"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "باشه"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "هیچ فایلی برای آپلود انتخاب نشده است"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "حجم فایل بسیار بیشتر از حجم تنظیم شده در تنظیمات سرور است"
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "افزودن"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "لطفا یک کتابچه نشانی انتخاب کنید"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "وارد کردن"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "بستن"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "خطا"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "اسم نمایشی نمی تواند خالی باشد"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "دانلود"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "ویرایش"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "حذف"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "خطای نامشخص"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "روز تولد {name} است"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "خطا در ذخیره سازی اطلاعات"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "اطلاعات درمورد vCard شما اشتباه است لطفا صفحه را دوباره بار گذاری کنید"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "هیچ فایلی آپلود نشد.خطای ناشناس"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "هیچ خطایی نیست بارگذاری پرونده موفقیت آمیز بود"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "حجم آپلود از طریق Php.ini تعیین می شود"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "حداکثر حجم قابل بار گذاری از طریق HTML MAX_FILE_SIZE است"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "پرونده بارگذاری شده فقط تاحدودی بارگذاری شده"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "هیچ پروندهای بارگذاری نشده"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "یک پوشه موقت گم شده"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "قابلیت بارگذاری تصویر  موقت وجود ندارد:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "قابلیت ذخیره تصویر  موقت وجود ندارد:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "هیچ نشانی از تصویرارسال نشده"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "پرونده وجود ندارد"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "خطا در بارگزاری تصویر"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "خطا در ساخت تصویر  temporary"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "خطا در برداشت تصویر"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "خطا در تغییر دادن اندازه تصویر"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "خطا در دربافت تصویر ویژگی شخصی"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "نوشتن بر روی دیسک سخت ناموفق بود"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "فضای کافی در دسترس نیست"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "خطا در هنگام بارگذاری و ذخیره سازی"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "اشخاص"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "دیگر"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "کار"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "خانه"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "موبایل"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "متن"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "صدا"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "پیغام"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "دورنگار:"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "رسانه تصویری"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "صفحه"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "اینترنت"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "گروه ها"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "افزودن اطلاعات شخص مورد نظر"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "پاک کردن تصویر کنونی"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "ویرایش تصویر کنونی"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "بار گذاری یک تصویر جدید"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "انتخاب یک تصویر از ابر های شما"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "نام"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "نام های دیگر"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "نام مستعار"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "یک نام مستعار وارد کنید"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "عنوان"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "نهاد(ارگان)"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "روزتولد"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "شماره تلفن"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "ایمیل"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "آدرس"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "یادداشت"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "پاک کردن  اطلاعات شخص مورد نظر"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "مقدم"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "لطفا یک پست الکترونیکی معتبر وارد کنید"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "به نشانی  ارسال شد"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "پاک کردن نشانی پست الکترونیکی"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "شماره تلفن راوارد کنید"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "پاک کردن شماره تلفن"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "دیدن روی نقشه"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "شهر"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "کشور"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "فعال"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "اشتراک‌گذاری"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "گرفتن خروجی"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV syncing addresses "
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "اطلاعات بیشتر"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "نشانی اولیه"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X "
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "کتابچه ی نشانی ها"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "کتابچه نشانه های جدید"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "توضیحات"
diff --cc apps/contacts/l10n/fi_FI/contacts.po
index 3e6a630,0000000..1053033
mode 100644,000000..100644
--- a/apps/contacts/l10n/fi_FI/contacts.po
+++ b/apps/contacts/l10n/fi_FI/contacts.po
@@@ -1,1168 -1,0 +1,1168 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# ehdoton <sampsa.somerma at gmail.com>, 2013
 +# Jesse Jaara <jesse.jaara at gmail.com>, 2012
 +# Jiri Grönroos <jiri.gronroos at iki.fi>, 2012-2013
 +# Johannes Korpela <>, 2012
 +# Larso <larso at gmx.com>, 2013
 +# teho <tehoratopato at gmail.com>, 2012
 +# tscooter <tscooter at hotmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: fi_FI\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Yhteystiedot"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Tallenna"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Lähetetään..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Tuodaan..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Valmistellaan..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Tuotiin {count}/{total} yhteystietoa"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Tuotiin {imported} yhteystietoa. {failed} epäonnistui."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Osoitekirja nimeltä {name} on jo olemassa"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Osoitekirjan lisääminen epäonnistui: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Osoitekirjojen lataaminen epäonnistui: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indeksoidaan yhteystietoja"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Virhe."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Lisää..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Poista..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Lisää ryhmä..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Virheellinen verkko-osoite: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Virheellinen sähköposti: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Yhdistäminen epäonnistui. Yhteystietoa ei löydy: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Yhdistäminen epäonnistui."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Yhdistäminen epäonnistui. Virhe yhteystietoa tallentaessa."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Valitse valokuva"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Verkko- tai palvelinvirhe. Ilmoita asiasta pääkäyttäjälle."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Virhe ryhmään lisättäessä."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Virhe poistaessa ryhmästä."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Yhdistä yhteystiedot"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Peru"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Lisää ryhmä"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Yhteystietoa ei löydy: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Tiedostoja ei ole valittu lähetettäväksi."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Tiedosto, jota yrität ladata ylittää suurimman sallitun koon tällä palvelimella."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Muokkaa profiilikuvaa"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Rajaa valokuva"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Jotkin yhteystiedot on merkitty poistettaviksi, mutta niitä ei ole vielä poistettu. Odota hetki, että kyseiset yhteystiedot poistetaan."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Lisää"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Yhteystieto on jo tässä ryhmässä."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Yhteystiedot ovat jo tässä ryhmässä."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Yhteystieto ei ole tässä ryhmässä."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Ryhmän nimen muuttaminen epäonnistui: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Ryhmä nimeltä {group} on jo olemassa"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Voit raahata ryhmiä järjestääksesi\nne haluamallasi tavalla."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Virhe ryhmää lisätessä: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Kaikki"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Suosikit"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Jakanut {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Ei ryhmitelty"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Ryhmien lataaminen epäonnistui: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Valitse osoitekirja"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Tuo.."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Tuo"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Tuonti valmis"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Sulje"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Virhe"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Näyttönimi ei voi olla tyhjä."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Näytä CardDav-linkki"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Näytä vain luku -muodossa oleva VCF-linkki"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Lataa"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Muokkaa"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Poista"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Lisää..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Vähemmän..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Palvelinvirhe! Ilmoita asiasta ylläpitäjälle"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Kuvan lataaminen epäonnistui: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Yhteystietoa ei löydy"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Käyttöoikeutesi eivät riitä näiden yhteystietojen katselemiseen"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Oikeutesi eivät riitä yhteystietojen lisäämiseen osoitekirjaan"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Oikeutesi eivät riitä tämän yhteystiedon poistamiseen"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Tuntematon virhe"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Oikeutesi eivät riitä tämän osoitekirjan päivittämiseen."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Oikeutesi eivät riitä tämän osoitekirjan poistamiseen."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Osoitekirjaa ei löytynyt"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Oikeutesi eivät riitä tämän yhteystiedon katseluun"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Oikeutesi eivät riitä tämän yhteystiedon päivittämiseen"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Ominaisuutta ei löydy"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Tuntematon IM-arvo."
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Henkilön {name} syntymäpäivä"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Virhe osoitekirjaa luotaessa"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Virhe osoitekirjaa päivittäessä"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Käyttöoikeutesi eivät riitä osoitekirjan \"%s\" poistamiseen"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Virhe osoitekirjaa poistaessa"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Virhe yhteystietoa luotaessa."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Virhe yhteystietoa poistaessa."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Virhe yhteystietoa tallennettaessa."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCardin tiedot eivät kelpaa. Lataa sivu uudelleen."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Virhe yhteystietoa päivittäessä"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Virhe hankkiessa kuvaa "
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Tiedostoa ei lähetetty. Tuntematon virhe"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Ei virheitä, tiedosto lähetettiin onnistuneesti"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Lähetetty tiedosto ylittää upload_max_filesize-arvon rajan php.ini-tiedostossa"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Ladattavan tiedoston maksimikoko ylittää MAX_FILE_SIZE dirketiivin, joka on määritelty HTML-lomakkeessa"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Tiedoston lähetys onnistui vain osittain"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Yhtäkään tiedostoa ei lähetetty"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Tilapäiskansio puuttuu"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Väliaikaiskuvan lataus epäonnistui:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Väliaikaiskuvan tallennus epäonnistui:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Kuvan polkua ei annettu."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Tiedostoa ei ole olemassa"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Virhe kuvaa ladatessa."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Kuva on poistettu välimuistista"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Virhe luotaessa väliaikaista kuvaa"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Virhe rajatessa kuvaa"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Virhe asettaessa kuvaa uuteen kokoon"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Virhe KUVA ominaisuuden saamisessa."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Virhe muuttaessa ryhmän nimeä."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Levylle kirjoitus epäonnistui"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Tallennustilaa ei ole riittävästi käytettävissä"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Virhe yhteystietojen lataamisessa talletettavaksi."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Sinulla ei ole oikeuksia tuoda tähän osoitekirjaan."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Tiedoston nimi puuttuu pyynnöstä."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Arvoa ei ole annettu."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Yhteystieto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Muu"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Kotisivu"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet-puhelu"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "Google Talk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Työ"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Koti"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobiili"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Teksti"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Ääni"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Viesti"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faksi"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Hakulaite"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Kaverit"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Perhe"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Uusi yhteystieto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Ryhmän nimi"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Uusi ryhmä"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Osoitekirjat"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Näyttönimi"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Lisää osoitekirja"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Valitse tiedosto..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Lajittelujärjestys"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Etu-/sukunimi"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Suku-/etunimi"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Ryhmät"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Pikanäppäimet"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Suunnistus"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Seuraava yhteystieto luettelossa"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Edellinen yhteystieto luettelossa"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Laajenna/supista nykyinen osoitekirja"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Seuraava osoitekirja"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Edellinen osoitekirja"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Toiminnot"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Päivitä yhteystietoluettelo"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Lisää uusi yhteystieto"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Lisää uusi osoitekirja"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Poista nykyinen yhteystieto"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Osoitekirjassasi ei ole yhteystietoja, tai osoitekirja on poistettu käytöstä.</h3><p>Lisää uusia yhteystietoja, tai tuo yhteystietoja VCF-tiedostosta.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Lisää yhteystieto"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Poista ryhmä"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Muuta ryhmän nimi"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Lähetä sähköpostia"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Poista nykyinen valokuva"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Muokkaa nykyistä valokuvaa"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Lähetä uusi valokuva"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Valitse valokuva ownCloudista"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nimi"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Etunimi"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Lisänimet"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Sukunimi"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Valitse ryhmät"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Valitse osoitekirja"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Kutsumanimi"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Anna kutsumanimi"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Otsikko"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisaatio"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Syntymäpäivä"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Muistiinpanot kuuluvat tähän..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Vie VCF-muodossa"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Lisää kenttä..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Puhelin"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Sähköpostiosoite"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Pikaviestintä"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Osoite"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Muistio"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Verkkosivu"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Poista yhteystieto"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Ensisijainen"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Anna kelvollinen sähköpostiosoite."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Lähetä sähköpostia"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Poista sähköpostiosoite"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Anna puhelinnumero"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Poista puhelinnumero"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Siirry verkkosivulle"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Näytä kartalla"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Poista osoite"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Katuosoite"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postinumero"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Paikkakunta"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Maa"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Pikaviestin"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Poista IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiivinen"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Jaa"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Vie"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV-linkki"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV-synkronointiosoitteet"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "lisätietoja"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Varsinainen osoite (yhteystiedot jne.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Osoitekirjat"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Uusi osoitekirja"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Kuvaus"
diff --cc apps/contacts/l10n/fr/contacts.po
index 684aa5a,0000000..7b3dc22
mode 100644,000000..100644
--- a/apps/contacts/l10n/fr/contacts.po
+++ b/apps/contacts/l10n/fr/contacts.po
@@@ -1,1188 -1,0 +1,1188 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# square <benben390-390 at yahoo.fr>, 2013
 +# Borjan Tchakaloff <borjan at tchaka.fr>, 2012
 +# Christophe Lherieau <skimpax at gmail.com>, 2012-2013
 +# Cyril Glapa <kyriog at gmail.com>, 2012
 +# NumEricR <defnox at gmail.com>, 2013
 +# etiess <etiess at gmail.com>, 2013
 +# Francois_Boulogne <fboulogne at sciunto.org>, 2011
 +# gp4004 <gp4004 at arghh.org>, 2011-2012
 +# guiguidu31300 <guiguidu31300 at gmail.com>, 2012
 +# Guillaume Paumier <guillom.pom at gmail.com>, 2013
 +# Jan-Christoph Borchardt <JanCBorchardt at fsfe.org>, 2011
 +# lyly95, 2013
 +# msoko <sokolovitch at yahoo.com>, 2013
 +# MathieuP <mathieu.payrol at gmail.com>, 2012
 +# mishka, 2012
 +# Nahir Mohamed <nahirmoha at gmail.com>, 2012
 +# Nicolas <booloki at lokizone.net>, 2012
 +# nferrari <nferrari at alwaysdata.com>, 2013
 +# nicoroud <nicolas at tycho.fr>, 2013
 +# ouafnico <nicolas at shivaserv.fr>, 2012
 +# ogre_sympathique <ogre.sympathique at speed.1s.fr>, 2013
 +# akaN44 <134331 at supinfo.com>, 2013
 +# red0ne <red-0ne at smarty-concept.com>, 2013
 +# Robert Di Rosa <>, 2012
 +# Romain DEP. <rom1dep at gmail.com>, 2011, 2012
 +# Romain DEP. <rom1dep at gmail.com>, 2012-2013
 +# Zertrin <zrk951 at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Christophe Lherieau <skimpax at gmail.com>\n"
 +"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: fr\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contacts"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Sauvegarder"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Téléversement en cours…"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Import en cours…"
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "En préparation..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "{count} contacts sur {total} ont été importés"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} contacts importés. {failed} échoués."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Un carnet d'adresse appelé {name} existe déjà"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Échec de l'ajout du carnet d'adresses : {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Echec du chargement des carnets d'adresses : {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexation des contacts"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Erreur irrécupérable lors du chargement des carnets d'adresses : {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Erreur."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Ajouter à…"
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Retirer de…"
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Ajouter un groupe…"
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Adresse URL invalide : \"{URL}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Une erreur s'est produite lors de l’ouverture d'un outil de composition email."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Courriel invalide : \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Échec de la fusion. Impossible de trouver le contact : {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Echec de la fusion."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Échec de la fusion. Erreur d'enregistrement du contact."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Sélectionner une photo"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Erreur de serveur ou du réseau. Veuillez contacter votre administrateur."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Erreur lors de l'ajout au groupe."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Erreur lors du retrait du groupe."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Erreur lors de la mise en favori de {name}."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Fusionner les contacts"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Annuler"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Ajouter un groupe"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Impossible de trouver le contact : {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Aucun fichiers choisis pour être chargés"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Le fichier que vous tentez de charger dépasse la taille maximum de fichier autorisée sur ce serveur."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Éditer l'image de profil"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Recadrer la photo"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Est-ce correct ?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Erreur lors de l'analyse de la date : {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# groupes"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Erreur lors de l'analyse de l'anniversaire {bday} : {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Certains contacts sont marqués pour être supprimés, mais ne le sont pas encore. Veuillez attendre que l'opération se termine."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Cliquer pour annuler la suppression de {num} contacts"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Suppression annulée pour {num} contacts"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Ajouter"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Ce contact est déjà présent dans le groupe."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Ces contacts sont déjà présents dans le groupe."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Impossible d'obtenir la liste des contacts."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Ce contact n'est pas présent dans le groupe."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Ces contacts ne sont pas présents dans le groupe."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Échec du renommage du groupe : {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Un groupe nommé {group} existe déjà"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Vous pouvez faire glisser les groupess pour les réorganiser comme bon vous semble."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Echec de l'ajout du groupe : {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Tous"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoris"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Partagé par {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Non groupé"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Échec lors du chargement des groupes : {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Veuillez choisir le carnet d'adresses"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importer dans..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Erreur de chargement du modèle d'importation"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importer les contacts"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importer"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Fichiers importés"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Fermer"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Erreur"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Le nom d'affichage ne peut pas être vide."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Afficher le lien CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Afficher les liens VCF en lecture seule"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Télécharger"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Modifier"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Supprimer"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Plus…"
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Moins..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Erreur du serveur ! Veuillez contacter votre administrateur."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Echec du chargement de la photo : {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Vous n'avez pas les droits pour voir ces contacts."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contact introuvable"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Vous n'avez pas les droits pour voir ces contacts."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Vous n'avez pas les droits suffisants pour ajouter des contacts à ce carnet d'adresses."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "L'infrastructure pour ce carnet d'adresses ne supporte pas l'ajout de contacts."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Vous n'avez pas l'autorisation de supprimer ce contact."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "L'infrastructure pour ce carnet d'adresses ne supporte pas la suppression de contacts."
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Erreur Inconnue "
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "L'infrastructure pour ce carnet d'adresses ne supporte pas la mise à jour"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Vous n'avez pas les droits suffisants pour mettre à jour ce carnet d'adresses."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Vous n'avez pas les droits suffisants pour supprimer ce carnet d'adresses."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Carnet d'adresses non trouvé."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Vous n'avez pas les droits suffisants pour voir ce contact."
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Vous n'avez pas les droits suffisants pour mettre à jour ce contact"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "L'infrastructure pour ce contact ne supporte pas sa mise à jour"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "L'infrastructure ne supporte pas l'ajout de contacts"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Propriété non trouvée"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Paramètres de Messagerie Instantanée manquants pour :"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Messagerie instantanée inconnue"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Anniversaire de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Erreur à la création du carnet d'adresses"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Erreur à la mise à jour du carnet d'adresses"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Vous n'avez pas les droits suffisants pour supprimer le carnet d'adresses \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Erreur à la suppression du carnet d'adresses"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Erreur à la création du contact."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Erreur à la suppression du contact."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Erreur à la récupération du contact."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Erreur de sauvegarde du contact"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Erreur à la suppression du contact d'un autre carnet d'adresses."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Impossible de trouver le contact."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Aucune donnée de contact dans la requête."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Erreur de la fusion du contact."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Erreur d'enregistrement du contact sur l'infrastructure d'arrière-plan."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Le nom de la propriété n'est pas défini."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "La somme de contrôle de la propriété n'est pas définie."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Erreur lors de la mise à jour du contact"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Erreur d'enregistrement du contact sur l'infrastructure d'arrière-plan."
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Erreur lors de l'obtention de la photo de l'utilisateur"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Aucun fichier n'a été envoyé. Erreur inconnue"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Aucune erreur, le fichier a été envoyé avec succès."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Le fichier envoyé dépasse la directive upload_max_filesize dans php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Le fichier envoyé dépasse la directive MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Le fichier n'a été que partiellement envoyé."
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Pas de fichier envoyé."
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Absence de dossier temporaire."
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Impossible de charger l'image temporaire :"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Impossible de sauvegarder l'image temporaire :"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Le chemin de la photo n'a pas été envoyé."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Ce fichier n'existe pas :"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Erreur lors du chargement de l'image."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "L'image a été supprimée du cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Erreur de création de l'image temporaire"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Erreur lors du rognage de l'image"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Erreur de redimensionnement de l'image"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Erreur lors de l'obtention des propriétés de la photo."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Aucun nom de groupe n'a été spécifié."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Erreur lors de l'ajout du groupe."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Aucun nom de groupe à renommer n'a été spécifié."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Aucun nouveau nom de groupe n'a été spécifié pour le renommage."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Erreur lors du renommage du groupe. "
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Identifiant du groupe manquant dans la requête."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Nom de groupe manquant dans la requête."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Identifiant du contact manquant dans la requête."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Erreur d'écriture sur le disque"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Plus assez d'espace de stockage disponible"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Tentative de téléverser un fichier appartenant à la liste noire :"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Erreur lors de l'envoi des contacts vers le stockage."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Erreur lors du déplacement du fichier vers le dossier cible."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Vous n'avez pas les droits suffisants pour importer ce carnet d'adresses."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Nom de fichier manquant dans la requête."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Clé de progression manquante dans la requête."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Tentative d'accès à un fichier appartenant à la liste noire :"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Aucun contact trouvé dans :"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Aucune clef n'a été spécifiée."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Aucune valeur n'a été spécifiée."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Impossible de spécifier le paramètre :"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contact"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Autre"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Page d'Accueil"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Appel internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AOL Instant Messaging"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Travail"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Domicile"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobile"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Texte"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voix"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Message"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vidéo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Bipeur"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amis"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Famille"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nouveau Contact"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nom du groupe"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nouveau Groupe"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Carnets d'adresses"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Nom affiché"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Ajouter un carnet d'adresse"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Sélectionner un fichier..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Dé-)sélectionner tout"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Ordre de tri"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Prénom-Nom"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Nom-Prénom"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Groupes"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favoris"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Fusionner la sélection"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Raccourcis clavier"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigation"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Contact suivant dans la liste"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contact précédent dans la liste"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Dé/Replier le carnet d'adresses courant"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Carnet d'adresses suivant"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Carnet d'adresses précédent"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Actions"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Actualiser la liste des contacts"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Ajouter un nouveau contact"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Ajouter un nouveau carnet d'adresses"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Effacer le contact sélectionné"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Vous n'avez aucun contact dans votre carnet d'adresses ou votre carnet d'adresses n'est pas activé.</h3><p>Ajoutez un nouveau contact ou importez des contacts existants depuis un fichier VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Ajouter un contact"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Effacer le groupe"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Renommer le groupe"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Vers quel contact les données doivent-elles être fusionnées ?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Supprimer le(s) autre(s) après une fusion réalisée avec succès ?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Écrire un mail"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Supprimer la photo actuelle"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editer la photo actuelle"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Envoyer une nouvelle photo"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Sélectionner une photo depuis ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nom"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Prénom"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Nom supplémentaires"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Nom"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Sélectionnez les groupes"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Sélectionner un carnet d'adresses"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Surnom"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Entrer un surnom"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titre"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Saisissez le titre"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Société"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Saisissez l'organisation"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Anniversaire"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Remarques…"
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exporter vers VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Ajouter un champ ..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Téléphone"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Adresse mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Messagerie instantanée"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Note"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Page web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Supprimer le contact"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Préféré"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Veuillez entrer une adresse e-mail valide."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "personne at exemple.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Envoyer à l'adresse"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Supprimer l'adresse e-mail"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Entrer un numéro de téléphone"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Supprimer le numéro de téléphone"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Allez à la page web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Effacer l'URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Voir sur une carte"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Effacer l'adresse"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Adresse postale"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Code postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Ville"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Pays ou région"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "États-Unis"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Pays"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Supprimer la messagerie instantanée"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Carnet actif"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Partager"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exporter"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Lien CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Synchronisation des contacts CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "plus d'infos"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Adresses principales (Kontact et assimilés)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Carnets d'adresses"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nouveau Carnet d'adresses"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Description"
diff --cc apps/contacts/l10n/gl/contacts.po
index c9b6fc5,0000000..59f81bd
mode 100644,000000..100644
--- a/apps/contacts/l10n/gl/contacts.po
+++ b/apps/contacts/l10n/gl/contacts.po
@@@ -1,1168 -1,0 +1,1168 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# antiparvos <marcoslansgarza at gmail.com>, 2013
 +# antiparvos <marcoslansgarza at gmail.com>, 2012-2013
 +# correodabid <correodabid at gmail.com>, 2013
 +# correodabid <correodabid at gmail.com>, 2013
 +# mbouzada <mbouzada at gmail.com>, 2013
 +# mbouzada <mbouzada at gmail.com>, 2013
 +# Xosé M. Lamas <correo.xmgz at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: mbouzada <mbouzada at gmail.com>\n"
 +"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: gl\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactos"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Gardar"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Enviando..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importando..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparando..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importados {count} de {total} contactos"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importados {imported} contactos. fallados {failed}."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Xa existe un caderno de enderezos chamado {name}"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Non foi posíbel engadir o caderno  de enderezos: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Non foi posíbel cargar os cadernos de enderezos: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexando os contactos"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Produciuse un erro non recuperábel ao cargar os cadernos de enderezos: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Erro."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Engadir a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Retirar de..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Engadir un grupo..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL incorrecto: «{url}»"
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Produciuse un erro ao abrir o editor do correo."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Correo incorrecto: «{url}»"
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Non foi posíbel facer a mistura. Non foi posíbel atopar o contacto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Non foi posíbel facer a mistura."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Non foi posíbel facer a mistura. produciuse un erro ao gardar o contacto."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Seleccione fotografía"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Produciuse un erro na rede ou no servidor. Informe ao administrador."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Produciuse un erro ao engadir ao grupo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Produciuse un erro ao retirar do grupo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Produciuse un erro ao estabelecer {name} como favorito."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Misturar os contactos"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancelar"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Engadir un grupo"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Aceptar"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Non foi posíbel atopar o contacto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Non foi seleccionado ningún ficheiro para enviar."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "O ficheiro que tenta enviar supera o tamaño máximo permitido neste servidor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Editar a imaxe do perfil"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Recortar a foto"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "É correcto isto?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Produciuse un erro ao analizar a data: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "Núm. grupos"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Produciuse un erro ao analizar o aniversario {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Algúns contactos están marcados para ser eliminados máis aínda non se eliminaron. Espera a que se eliminen."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Prema para desfacer a eliminación de {num} contactos"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Cancelada a eliminación de {num} contactos"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Engadir"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "O contacto xa está neste grupo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Os contactos xa están neste grupo."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Non é posíbel obter a lista de contactos."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "O contacto non está neste grupo."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Os contactos non están neste grupo."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Non foi posíbel renomear o grupo: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "O grupo nomeado {group} xa existe"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Pode arrastrar grupos para\norganizalos como desexe."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Non foi posíbel engadir o grupo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Todo"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoritos"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Compartido por {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Sen agrupar"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Non foi posíbel cargar os grupos: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Escolle o caderno de enderezos"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importar en..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Produciuse un erro ao cargar o modelo de importación"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importar contactos"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importar"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importación realizada"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Pechar"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Erro"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Displayname non pode estar baldeiro."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostrar a ligazón de CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostrar as ligazóns a VCF de só lectura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Descargar"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Eliminar"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Máis..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menos..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Produciuse un erro no servidor! Informe ao administrador do sistema"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Non foi posíbel cargar a foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Vostede non ten permisos para ver estes contactos"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Non se atopa o contacto"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Vostede non ten permisos para ver eses contactos"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Vostede non ten permisos para engadir contactos no caderno de enderezos"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "A infraestrutura para este caderno de enderezos non admite que se engadan contactos"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Vostede non ten permisos para eliminar este contacto"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "A infraestrutura para este caderno de enderezos non admite que se eliminen contactos"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Produciuse un erro descoñecido"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "A infraestrutura para este caderno de enderezos non admite que se eliminen contactos"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Vostede non ten permisos para actualizar o caderno de enderezos"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Vostede non ten permisos para eliminar o caderno de enderezos"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Non se atoparon cadernos de enderezos"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Vostede non ten permisos para ver este contacto"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Vostede non ten permisos para actualizar este contacto"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "A infraestrutura para este contacto non admite a súa actualización"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "A infraestrutura non admite que se engadan contactos"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Non se atopou a propiedade"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr " Falta o parámetro MI para:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "MI descoñecido:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Aniversario de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Produciuse un erro ao crear o caderno de enderezos"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Produciuse un erro ao actualizar o caderno de enderezos"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Vostede non ten permisos para eliminar o caderno de enderezos «%s»"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Produciuse un erro ao eliminar o caderno de enderezos"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Produciuse un erro ao crear o contacto."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Produciuse un erro ao eliminar o contacto."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Produciuse un erro ao recuperar o contacto."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Produciuse un erro ao gardar o contacto."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Produciuse un erro ao retirar o contacto desde outro caderno de enderezos."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Non foi posíbel atopar o contacto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Non hai datos de contacto na petición."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Produciuse un erro ao mesturar en contacto."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Produciuse un erro ao gardar o contacto na infraestrutura."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Non foi estabelecido o nome da propiedade"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Non foi estabelecida a suma de comprobación da propiedade"
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "A información sobre a vCard é incorrecta. Volva cargar a páxina."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Produciuse un erro ao actualizar o contacto."
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Produciuse un erro ao gardar o contacto na infraestrutura"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Produciuse un erro ao obter a foto do usuario"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Non se enviou ningún ficheiro. Produciuse un erro descoñecido."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Non houbo erros, o ficheiro enviouse correctamente"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "O ficheiro enviado supera a directiva upload_max_filesize no php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "O ficheiro enviado excede da directiva MAX_FILE_SIZE especificada no formulario HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "O ficheiro so foi parcialmente enviado"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Non se enviou ningún ficheiro"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Falta o cartafol temporal"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Non se puido cargar a imaxe temporal: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Non foi posíbel gardar a imaxe temporal: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Non se enviou a ruta a unha foto."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Non existe o ficheiro:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Produciuse un erro ao cargar a imaxe."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "A imaxe foi retirada da caché."
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Produciuse un erro ao crear a imaxe temporal"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Produciuse un erro ao recortar a imaxe"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Produciuse un erro ao ao cambiar o tamaño da imaxe"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Produciuse un erro ao obter a propiedade PHOTO."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Non se indicou o nome do grupo."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Produciuse un erro ao engadir o grupo."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Non se indicou o novo nome do grupo para renomear."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Non se indicou o nome do grupo que renomear."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Produciuse un erro ao renomear o grupo."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Falta o ID do grupo desde a petición."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "No se atopa o nome do grupo desde a petición."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Falta o ID do contacto desde a petición."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Produciuse un erro ao escribir no disco"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Non hai espazo de almacenamento abondo"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Intentar enviar o ficheiro da lista negra:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Produciuse un erro ao enviar os contactos ao almacén."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Produciuse un erro ao mover o ficheiro ao cartafol de importacións."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Vostede non ten permisos para importar a este caderno de enderezos"
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Falta o nome do ficheiro desde a petición."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Falta a chave de progreso desde a petición."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Intentar acceder ao ficheiro da lista negra:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Non se atoparon contactos en:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Non se indicou a chave."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Non se indicou o valor."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Non foi posíbel estabelecer a preferencia:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contacto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Outro"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Páxina de inicio"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Chamadas por Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "Google Talk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Traballo"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Inicio"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Móbil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Texto"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voz"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mensaxe"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vídeo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Paxinador"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amigos"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Novo contacto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nome do grupo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Novo grupo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Cadernos de enderezos"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Amosar o nome"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Engadir un caderno de enderezos"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Seleccionar ficheiro..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Des)marcar todo"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Reordenar"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Nome- Apelido"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Apelido-, Nome"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupos"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorito"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Mistura seleccionada"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Atallos de teclado"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navegación"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Seguinte contacto na lista"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contacto anterior na lista"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Expandir/contraer o caderno de enderezos actual"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Seguinte caderno de enderezos"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Anterior caderno de enderezos"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Accións"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Anovar a lista de contactos"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Engadir un contacto novo"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Engadir un novo caderno de enderezos"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Eliminar o contacto actual"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Non ten contactos no caderno de enderezos ou o caderno de enderezos está desactivado.</h3><p>Engada un contacto novo ou importe os contactos existentes desde un ficheiro VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Engadir contacto"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Eliminar grupo"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Rrenomear o grupo."
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "A cales contactos misturaránselle os datos?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Eliminar o(s) outro(s) despois dunha mistura satisfactoria?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Redactar un correo"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Borrar foto actual"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editar a foto actual"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Enviar unha nova foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Escoller foto desde ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nome"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Nome"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Nomes adicionais"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Apelidos"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Seleccionar grupos"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Seleccionar o caderno de enderezos"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Alcume"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Introduza o alcume"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Título"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Introducir o título"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organización"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Introducir a organización"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Aniversario"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "As notas van aquí..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportar como VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Engadir campo..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Teléfono"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Correo"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Mensaxería instantánea"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Enderezo"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Sitio web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Borrar contacto"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferido"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Indica unha dirección de correo electrónico válida."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "calquera at dominio.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Enviar correo ao enderezo"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Borrar o enderezo de correo electrónico"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Introducir número de teléfono"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Borrar número de teléfono"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ir ao sitio web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Eliminar URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Ver no mapa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Eliminar enderezo"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Enderezo da rúa"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Código Postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Cidade"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Estado ou provincia"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "País"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Mensaxería instantánea"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Eliminar o MI"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Activo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Compartir"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportar"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Ligazón a CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Enderezos CardDAV a sincronizar"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "máis información"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Enderezo primario (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Caderno de enderezos"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Novo caderno de enderezos"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descrición"
diff --cc apps/contacts/l10n/he/contacts.po
index 572fdb3,0000000..e72b6a5
mode 100644,000000..100644
--- a/apps/contacts/l10n/he/contacts.po
+++ b/apps/contacts/l10n/he/contacts.po
@@@ -1,1165 -1,0 +1,1165 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Gilad Naaman <gilad.doom at gmail.com>, 2012
 +# idop <ido.parag at gmail.com>, 2012
 +# Tomer Cohen <tomerc+transifex.net at gmail.com>, 2011
 +# Yaron Shahrabani <sh.yaron at gmail.com>, 2012-2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: he\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "אנשי קשר"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "שמירה"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "העלאה..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "ביטול"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "אישור"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "הוספה"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "אנא בחר ספר כתובות"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "יבוא"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "סגירה"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "שגיאה"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "הורדה"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "עריכה"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "מחיקה"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "שגיאה בלתי ידועה"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "יום ההולדת של {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "שגיאה בשמירת איש הקשר"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "המידע אודות vCard אינו נכון. נא לטעון מחדש את הדף."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "לא הועלה קובץ. טעות בלתי מזוהה."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "לא התרחשה שגיאה, הקובץ הועלה בהצלחה"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "גודל הקובץ שהועלה גדול מהערך upload_max_filesize שמוגדר בקובץ php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "הקובץ שהועלה גדוך מהערך MAX_FILE_SIZE שהוגדר בתופס HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "הקובץ הועלה באופן חלקי בלבד"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "שום קובץ לא הועלה"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "תקיה זמנית חסרה"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "אין אפשרות לשמור תמונה זמנית:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "כתובת התמונה לא נשלחה"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "קובץ לא קיים:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "שגיאה בטעינת התמונה."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "שגיאה בשינוי גודל התמונה"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "שגיאה בקבלת מידע של תמונה"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "הכתיבה לכונן נכשלה"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "אין די שטח פנוי באחסון"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "התרשה שגיאה בהעלאת אנשי הקשר לאכסון."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "איש קשר"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "אחר"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "עבודה"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "בית"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "נייד"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "טקסט"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "קולי"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "הודעה"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "פקס"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "וידאו"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "זימונית"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "אינטרנט"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "קבוצות"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "הוסף איש קשר"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "מחק תמונה נוכחית"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "ערוך תמונה נוכחית"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "העלה תמונה חדשה"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "בחר תמונה מ ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "שם"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "שמות נוספים"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "כינוי"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "הכנס כינוי"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "כותרת"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "ארגון"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "יום הולדת"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "טלפון"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "דואר אלקטרוני"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "כתובת"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "הערה"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "מחיקת איש קשר"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "מועדף"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "אנא הזן כתובת דוא\"ל חוקית"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "כתובת"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "מחק כתובת דוא\"ל"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "הכנס מספר טלפון"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "מחק מספר טלפון"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "ראה במפה"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "עיר"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "מדינה"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "פעיל"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "שיתוף"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "ייצוא"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV מסנכרן כתובות"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "מידע נוסף"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "כתובת ראשית (קונטקט ואחרים)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "פנקסי כתובות"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "פנקס כתובות חדש"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "תיאור"
diff --cc apps/contacts/l10n/hu_HU/contacts.po
index 229b62b,0000000..08f2c0b
mode 100644,000000..100644
--- a/apps/contacts/l10n/hu_HU/contacts.po
+++ b/apps/contacts/l10n/hu_HU/contacts.po
@@@ -1,1172 -1,0 +1,1172 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# blackc0de <complic at vipmail.hu>, 2013
 +# Adam Toth <adazlord at gmail.com>, 2012
 +# akoscomp <nagy.akos at libreoffice.ro>, 2013
 +# sherlock79 <david at interpont.hu>, 2013
 +# ebela <bela at dandre.hu>, 2013
 +# gyeben <gyonkibendeguz at gmail.com>, 2013
 +# gyeben <gyonkibendeguz at gmail.com>, 2013
 +# Laszlo Tornoci <torlasz at gmail.com>, 2013
 +# Tamas Nagy <mail at tamas-nagy.net>, 2011
 +# Peter Borsa <peter.borsa at gmail.com>, 2011
 +# Tamas Nagy <mail at tamas-nagy.net>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-13 21:20+0000\n"
 +"Last-Translator: Laszlo Tornoci <torlasz at gmail.com>\n"
 +"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: hu_HU\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Névjegyek"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Mentés"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Feltöltés..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importálás..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Előkészítés..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "A {total} névjegyből {count} importálva"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} névjegy importálva. {failed} sikertelen."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "\"{name}\" névvel már létezik névjegy"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Nem sikerült hozzáadni a címjegyzékhez: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Hiba a címjegyzék betöltésekor: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Névjegyek indexelése"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Helyrehozhatatlan hiba a címjegyzékek betöltésekor: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Hiba."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Hozzáadás ehhez..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Eltávolítás innen..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Csoport hozzáadása..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Hibás URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Hiba történt a levélszerkesztő megnyitása közben."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Hibás e-mail: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Sikertelen összefűzés. Nem található a névjegy: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Sikertelen összefűzés."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Sikertelen összefűzés. Hiba a kapcsolat mentésekor."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Fénykép kiválasztása"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Hiba történt a hálózatban vagy a kiszolgálón. Értesítse a rendszergazdát!"
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Hiba a csoporthoz adás közben."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Hiba a csoportból való eltávolítás közben."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Nem sikerült \"{name}\"-t kedvencként beállítani."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Névjegyek összefűzése."
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Mégsem"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Csoport hozzáadása"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Nem található a névjegy: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Nincs kiválasztva feltöltendő fájl."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "A feltöltendő fájl mérete meghaladja a kiszolgálón engedélyezett maximális méretet."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Profilkép szerkesztése"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Fénykép vágása"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Helyes?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Nem sikerült értelmezni ezt a dátumot: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# csoport"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Nem sikerült értelmezni a {bday} születésnap adatait: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Néhány névjegy ki lett jelölve törlésre, de még nem lett törölve. Várja meg a végleges törlést."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Kattintson ide {num} névjegy törlésének visszavonásához"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "{num} névjegy törlése visszavonva"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Hozzáadás"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "A névjegy már a csoportban van."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "A névjegyek már a csoportban vannak."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Nem érhető el a névjegyek listája."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "A névjegy nincs ebben a csoportban."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "A névjegyek nincsenek ebben a csoportban."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Hiba a csoport átnevezésekor: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "A {group} nevű csoport már létezik"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "A sorrend megváltoztatásához\\n\negérrel húzza a csoportokat."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Hiba a csoport hozzáadásakor: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Mind"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Kedvencek"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Megosztotta: {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Nem csoportosított"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Nem sikerült betölteni a csopotokat: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Válassza ki a címlistát"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importálás ide:"
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Hiba az importálandó sablon betöltésekor"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Kapcsolatok importálása"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importálás"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importálás befejezve"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Bezárás"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Hiba"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "A megjelenített nevet ki kell tölteni."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav link mutatása"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Csak-olvasható VCF link megjelenítése"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Letöltés"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Szerkesztés"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Törlés"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Bővebben..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Kevesebb..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Kiszolgáló hiba! Értesítse a rendszergazdát!"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Hiba a kép betöltésekor: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Nincs jogosultsága a névjegy megtekintéséhez"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kapcsolat nem található"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Nincs jogosultsága megnézni ezeket a névjegyeket"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Nincs jogosultsága új névjegyeket hozzáadni a címjegyzékhez"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "A címjegyzék háttérredszere nem támogatja az új névjegyek felvételét"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Nincs jogosultsága törölni ezt a névjegyet!"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "A címjegyzék háttérrendszere nem támogatja a névjegyek törlését"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Ismeretlen hiba"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "A címjegyzék háttérrendszere nem támogatja a frissítést"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Nincs jogosultsága frissíteni a címjegyzéket!"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Nincs jogosultsága törölni a címjegyzéket!"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "A címjegyzék nem található"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Nincs jogosultsága megnézni ez a névjegyet"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Nincs jogosultsága frissíteni ezt a névjegyet"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "A névjegyhez tartozó háttérrendszer nem támogatja a frissítést"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Ez a háttérrendszer nem támogatja a névjegyek felvételét"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "A tulajdonság nem található"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Hiányzó Üzenetküldő paraméter:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Ismeretlen Üzenetküldő:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} születésnapja"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Hiba a címjegyzék létrehozásakor"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Hiba a címjegyzék frissítésekor"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Önnek nincs jogosultsága ahhoz, hogy törölje ezt a címjegyzéket: \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Hiba a címjegyzék törlésekor"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Hiba a névjegy létrehozásakor."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Hiba a névjegy törlésekor."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Hiba a névjegy betöltésekor."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "A névjegy mentése sikertelen"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Hiba a névjegy más címjegyzékből történő törlésekor."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Nem található névjegy."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "A kérés nem tartalmaz névjegyet"
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Hiba a névjegy összefűzésekor."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Hiba a névjegy mentésekor a háttérrendszerben."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Tulajdonság neve nincs megadva."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Tulajdonság ellenőrzőkódja nincs megadva."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "A vCardról szóló információ helytelen. Töltsd újra az oldalt."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Hiba, a kapcsolat aktualizálásakor"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Hiba a kapcsolat háttérmentésekor."
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Nem sikerült beolvasni a felhasználó fényképét"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Nem történt feltöltés. Ismeretlen hiba"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "A fájlt sikerült feltölteni"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "A feltöltött fájl mérete meghaladja az upload_max_filesize értéket a php.ini-ben"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "A feltöltött fájl mérete meghaladja a HTML űrlapon beállított MAX_FILE_SIZE méretet."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Az eredeti fájlt csak részben sikerült feltölteni"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Egy fájlt sem töltött fel"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Hiányzik egy ideiglenes mappa"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Ideiglenes kép betöltése sikertelen:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Ideiglenes kép létrehozása sikertelen:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Nincs fénykép-útvonal megadva"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "A fájl nem létezik:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Kép betöltése sikertelen"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "A kép el lett távolítva a gyorsítótárból"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Ideiglenes kép létrehozása sikertelen"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Képvágás sikertelen"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Képméretezés sikertelen"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "A PHOTO-tulajdonság  feldolgozása sikertelen"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Nem adott meg csoportnevet."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Hiba a csoport hozzáadása közben."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Nem adta meg, hogy miről nevezzük át a csoportot."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Nem adta meg, hogy mire nevezzük át a csoportot."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Hiba a csoport átnevezésekor."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "A csoport azonosítója hiányzik a kérésből."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "A csoport neve hiányzik a kérésből."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "A névjegy azonosítója (ID) hiányzik a kérésből."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Nem sikerült a lemezre írás"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nincs elég tárhely."
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Tiltólistán szereplő fájl feltöltésének kísérlete:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Hiba a névjegyek feltöltésekor a tárhelyre."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Az állomány áthelyezése az importáltak mappába nem sikerült."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Nincs jogosultsága importálni ebbe a címjegyzékbe."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "A kérésből hiányzik a fájl neve."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "A kérésből hiányzik a folyamat kulcsa."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Feketelistán szereplő fájl hozzáférési kísérlet:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Itt egy névjegy sem található:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Nincs kulcs megadva."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Nincs érték megadva."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Nem állítható be a tulajdonság:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Névjegy"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Más"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Weboldal"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet hívás"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "Google Talk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Munkahelyi"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Otthoni"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "SMS"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Hang"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Üzenet"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Videó"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Személyhívó"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Barátok"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Család"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Új névjegy"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Csoport neve"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Új csoport"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Címjegyzék"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Megjelenített név"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Címjegyzék hozzáadása"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Fájl kiválasztása..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Ki/bejelöli mindet"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Rendezés"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Kereszt- Vezetéknév"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Vezeték-, Keresztnév"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Csoportok"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Kedvenc"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Kijelöltek összefűzése"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Gyorsbillentyűk"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigáció"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Következő névjegy a listán"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Előző kapcsolat a listán"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "A címlista kinyitása/becsukása"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "A következő címlista"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Az előző címlista"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Műveletek"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Kapcsolatok lista frissítése"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Új kapcsolat hozzáadása"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Új címlista létrehozása"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Jelenlegi kapcsolat törlése"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Ebben a címjegyzékben még nincsenek bejegyzések.</h3><p>Hozzon létre egyet, vagy importáljon adatokat egy VCF-állományból.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Kapcsolat hozzáadása"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Csoport törlése"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Csoport átnevezése"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Melyik kapcsolathoz adódjon hozzá az adat?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Sikeres összefűzés után törölje a többit."
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Levél írás"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Aktuális kép törlése"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Aktuális kép szerkesztése"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Új kép feltöltése"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Kép kiválasztása ownCloud-ból"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Név"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Keresztnév"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "További nevek"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Vezetéknév"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Csoportok kiválasztása"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Válassza ki a címjegyzéket"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Becenév"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Becenév megadása"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Cím"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Cím megadása"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Szervezet"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Szervezet megadása"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Születésap"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Ide jönnek a jegyzetek..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportálás VCF-ként"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Mező hozzáadása..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefonszám"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Azonnali üzenetküldés"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Cím"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Jegyzet"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Weboldal"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kapcsolat törlése"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Előnyben részesített"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Adjon meg érvényes email címet"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Postai cím"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Email cím törlése"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Adja meg a telefonszámot"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Telefonszám törlése"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ugrás a weboldalra"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "URL törlése"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Megtekintés a térképen"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Cím törlése"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Utcacím"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Irányítószám"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Város"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Állam vagy tartomány"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Ország"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Azonnali üzenetküldő"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM törlése"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktív"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Megosztás"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportálás"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDav hivatkozás"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV szinkronizációs címek"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "további információ"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Elsődleges cím (Kontact és már programok)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Címlisták"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Új címlista"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Leírás"
diff --cc apps/contacts/l10n/id/contacts.po
index 7be9064,0000000..b767fcb
mode 100644,000000..100644
--- a/apps/contacts/l10n/id/contacts.po
+++ b/apps/contacts/l10n/id/contacts.po
@@@ -1,1164 -1,0 +1,1164 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# minion, 2013
 +# elmakong <mr.pige_ina at yahoo.co.id>, 2012
 +# rodin <romihardiyanto at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: id\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "kontak"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Simpan"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Mengunggah..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "mengimpor..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Batal"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Oke"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Tambah"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Impor"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Tutup"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Galat"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Unduh"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Edit"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Hapus"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "hari ulang tahun {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Tidak ada berkas yang diunggah. Galat tidak dikenal."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Tidak ada galat, berkas sukses diunggah"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "File yang diunggah melampaui directive upload_max_filesize di php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Berkas yang diunggah melampaui direktif MAX_FILE_SIZE yang ditentukan dalam formulir HTML."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Berkas hanya diunggah sebagian"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Tidak ada berkas yang diunggah"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Folder sementara tidak ada"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "file tidak ditemukan:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Gagal menulis ke disk"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Ruang penyimpanan tidak mencukupi"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "kontak"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Lainnya"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Kantor"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "rumah"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "ponsel"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Teks"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "suara"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "pesan"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grup"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nama"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Pilih grup"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "nama panggilan"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "masukkan nama panggilan"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Judul"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "organisasi"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "tanggal lahir"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Alamat"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "hapus kontak"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "disarankan"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "kota"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "negara"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktif"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Bagikan"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Ekspor"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "lebih lanjut"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Alamat utama (Kontak dsb)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "buku alamat"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Deskripsi"
diff --cc apps/contacts/l10n/it/contacts.po
index 206d9ff,0000000..ef47fdb
mode 100644,000000..100644
--- a/apps/contacts/l10n/it/contacts.po
+++ b/apps/contacts/l10n/it/contacts.po
@@@ -1,1171 -1,0 +1,1171 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# formalist <formalist at email.it>, 2012
 +# Francesco Apruzzese <cescoap at gmail.com>, 2011,2013
 +# Francesco Capuano <francesco at capu.it>, 2013
 +# ufic <marco at carnazzo.it>, 2011, 2012
 +# idetao <marcxosm at gmail.com>, 2013
 +# Monica Crapanzano <m.crapanzano at estartup.it>, 2013
 +# polxmod <paolo.velati at gmail.com>, 2013
 +# pgcloud <pgcloud at imballaggi.net>, 2013
 +# Stefano Maffulli <smaffulli at gmail.com>, 2013
 +# Vincenzo Reale <vinx.reale at gmail.com>, 2012-2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Vincenzo Reale <vinx.reale at gmail.com>\n"
 +"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: it\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contatti"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Salva"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Caricamento in corso..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importazione in corso..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparazione in corso..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importati {count} di {total} contatti"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importati {imported} contatti. {failed} non riusciti."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Una rubrica con nome {name} esiste già"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Aggiunta della rubrica non riuscita: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Caricamento rubriche non riuscito: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indicizzazione dei contatti"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Errore irreversibile durante il caricamento delle rubriche: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Errore."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Aggiungi a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Rimuovi da..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Aggiungi gruppo..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL non valido: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Si è verificato un errore durante l'apertura del compositore."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Email non valida: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Unione non riuscita. Impossibile trovare il contatto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Unione non riuscita."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Unione non riuscita. Errore durante il salvataggio del contatto."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Seleziona la foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Errore di rete o del server. Informa l'amministratore."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Errore durante l'aggiunta al gruppo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Errore durante la rimozione dal gruppo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Errore durante l'impostazione di {name} come preferito."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Unisci contatti"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Annulla"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Aggiungi gruppo"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Impossibile trovare il contatto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Nessun file selezionato per l'invio"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Il file che stai cercando di inviare supera la dimensione massima per l'invio dei file su questo server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Modifica l'immagine del profilo"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Ritaglia foto"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "È corretto?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Errore durante l'elaborazione della data: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# gruppi"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Errore durante l'elaborazione della data di nascita {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Alcuni contatti sono marcati per l'eliminazione, ma non sono stati ancora rimossi. Attendi fino al completamento dell'operazione."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Un clic per annullare l'eliminazione di {num} contatti"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Eliminazione di {num} contatti annullata"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Aggiungi"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Il contatto è già in questo gruppo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "I contatti sono già in questo gruppo."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Impossibile ottenere l'elenco dei contatti."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Il contatto non è in questo gruppo."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "I contatti non sono in questo gruppo."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Rinomina gruppo non riuscita: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Un gruppo con nome {group} esiste già"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Puoi trascinare i gruppi per\norganizzarli come preferisci."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Aggiunta gruppo non riuscita: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Tutti"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Preferiti"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Condiviso da {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Non raggruppati"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Caricamento gruppi non riuscito: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Scegli la rubrica"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importa in..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Errore durante il caricamento del modello di importazione"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importa contatti"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importa"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importazione completata"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Chiudi"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Errore"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Il nome visualizzato non può essere vuoto."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostra collegamento CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostra collegamento VCF in sola lettura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Scarica"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Modifica"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Elimina"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Altro..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Meno..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Errore del server. Informa l'amministratore di sistema"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Caricamento foto non riuscito: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Non hai i permessi per vedere questo contatto"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contatto non trovato"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Non hai i permessi per vedere questi contatti"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Non hai i permessi per aggiungere contatti alla rubrica"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Il motore per questa rubrica non supporta l'aggiunta di contatti"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Non hai i permessi per eliminare questo contatto"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Il motore per questa rubrica non supporta l'eliminazione di contatti"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Errore sconosciuto"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Il motore per questa rubrica non supporta l'aggiornamento"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Non hai i permessi per aggiornare la rubrica."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Non hai i permessi per eliminare la rubrica."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Rubrica non trovata."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Non hai i permessi per vedere questo contatto"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Non hai i permessi per aggiornare questo contatto"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Il motore per questo contatto non supporta l'aggiornamento"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Questo motore non supporta l'aggiunta di contatti"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Proprietà non trovata"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Parametro IM mancante per:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM sconosciuto:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Data di nascita di {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Errore durante la creazione della rubrica"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Errore durante l'aggiornamento della rubrica"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Non hai i permessi per eliminare la rubrica \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Errore durante l'eliminazione della rubrica"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Errore durante la creazione del contatto."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Errore durante l'eliminazione del contatto."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Errore durante il recupero del contatto."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Errore di salvataggio del contatto."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Errore durante la rimozione del contatto da altre rubriche."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Impossibile trovare il contatto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Non ci sono dati di contatto nella richiesta."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Errore durante l'unione al contatto."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Errore di salvataggio del contatto nel motore."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Il nome della proprietà non è impostato."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "La proprietà del codice di controllo non è impostata."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informazioni sulla vCard non corrette. Ricarica la pagina."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Errore durante l'aggiornamento del contatto"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Errore durante il salvataggio del contatto nel motore"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Errore durante il recupero della foto dell'utente"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Nessun file è stato inviato. Errore sconosciuto"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Non ci sono errori, il file è stato caricato correttamente"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Il file inviato supera la direttiva upload_max_filesize nel php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Il file inviato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Il file è stato caricato solo parzialmente"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Nessun file è stato caricato"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Manca una cartella temporanea"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Impossibile caricare l'immagine temporanea: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Impossibile salvare l'immagine temporanea: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Non è stato inviato alcun percorso a una foto."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Il file non esiste:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Errore di caricamento immagine."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "L'immagine è stata rimossa dalla cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Errore durante la creazione dell'immagine temporanea"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Errore di ritaglio dell'immagine"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Errore di ridimensionamento dell'immagine"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Errore di recupero della proprietà FOTO."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Nessun nome di gruppo fornito."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Errore durante l'aggiunta del gruppo."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Non è stato fornito nessun nome per il gruppo da rinominare."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Nessun nome gruppo di destinazione fornito."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Errore durante la rinomina del gruppo."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "ID del gruppo mancante nella richiesta."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Nome del gruppo mancante nella richiesta."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "ID del contatta mancante nella richiesta."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Scrittura su disco non riuscita"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Spazio di archiviazione insufficiente"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Tentativo di caricare un file della lista nera:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Errore di invio dei contatti in archivio."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Errore durante lo spostamento del file nella cartella di importazione."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Non hai i permessi per importare in questa rubrica."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Manca il nome del file nella richiesta."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Manca la chiave di avanzamento nella richiesta."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Tentativo di accedere a un file della lista nera:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Nessun contatto trovato in:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Nessuna chiave fornita."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Nessun valore fornito."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Impossibile impostare la preferenza:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contatto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Altro"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Pagina principale"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Chiamata via Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Lavoro"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Casa"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Cellulare"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Testo"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voce"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Messaggio"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Cercapersone"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amici"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Famiglia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nuovo contatto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nome gruppo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nuovo gruppo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Rubriche"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Nome visualizzato"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Aggiungi rubrica"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Seleziona file..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(De)seleziona tutto"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Ordinamento"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Nome Cognome"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Cognome, Nome"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Gruppi"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Preferito"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Unisci selezionati"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Scorciatoie da tastiera"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigazione"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Contatto successivo in elenco"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contatto precedente in elenco"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Espandi/Contrai la rubrica corrente"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Rubrica successiva"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Rubrica precedente"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Azioni"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Aggiorna l'elenco dei contatti"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Aggiungi un nuovo contatto"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Aggiungi una nuova rubrica"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Elimina il contatto corrente"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Non ci sono contatti nella tua rubrica o la rubrica è disabilitata.</h3><p>Aggiungi un nuovo contatto o importa contatti esistenti da un file VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Aggiungi contatto"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Elimina gruppo"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Rinomina gruppo"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "A quale contatto desideri unire i dati?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Vuoi eliminare gli altri dopo il completamento dell'unione?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Componi messaggio"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Elimina la foto corrente"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Modifica la foto corrente"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Invia una nuova foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Seleziona la foto da ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nome"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Nome"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Nomi aggiuntivi"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Cognome"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Seleziona gruppi"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Seleziona rubrica"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Pseudonimo"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Inserisci pseudonimo"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titolo"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Inserisci il titolo"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizzazione"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Inserisci l'organizzazione"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Compleanno"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Le note vanno qui..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Esporta come VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Aggiungi campo..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefono"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Posta elettronica"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Messaggistica istantanea"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Indirizzo"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Sito web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Elimina contatto"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferito"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Specifica un indirizzo email valido"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "qualcuno at esempio.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Invia per email"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Elimina l'indirizzo email"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Inserisci il numero di telefono"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Elimina il numero di telefono"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Vai al sito web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Elimina URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Visualizza sulla mappa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Elimina indirizzo"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Indirizzo"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "CAP"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Città"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Stato o regione"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Stato"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Client di messaggistica istantanea"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Elimina IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Attivo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Condividi"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Esporta"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Collegamento CardDav"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Indirizzi di sincronizzazione CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "ulteriori informazioni"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Indirizzo principale (Kontact e altri)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Rubriche"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nuova rubrica"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descrizione"
diff --cc apps/contacts/l10n/ja_JP/contacts.po
index 8a25b0c,0000000..e853d32
mode 100644,000000..100644
--- a/apps/contacts/l10n/ja_JP/contacts.po
+++ b/apps/contacts/l10n/ja_JP/contacts.po
@@@ -1,1168 -1,0 +1,1168 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Daisuke Deguchi <ddeguchi at nagoya-u.jp>, 2012
 +# Daisuke Deguchi <ddeguchi at nagoya-u.jp>, 2012-2013
 +# plazmism <gomidori at live.jp>, 2013
 +# Koichi MATSUMOTO <mzch at me.com>, 2013
 +# pabook <pabook.32 at gmail.com>, 2013
 +# tt yn <tetuyano+transi at gmail.com>, 2012
 +# tt yn <tetuyano+transi at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Daisuke Deguchi <ddeguchi at nagoya-u.jp>\n"
 +"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ja_JP\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "コンタクト"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "保存"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "アップロード中..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "インポート中..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "準備中..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "{count} 件中 {total} 件の連絡先をインポート"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} 件の連絡先をインポート。{failed} 件失敗。"
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "{name} という名前のアドレス帳はすでに存在します"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "アドレス帳の追加に失敗: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "アドレス帳の読み込みに失敗: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "連絡先のインデックスを作成中"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "アドレス帳の読み込み時に回復不能なエラーが発生: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "エラー"
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "追加..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "削除..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "グループを追加..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "無効なURL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "メールコンポーザを起動する際にエラーが発生しました。"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "無効なメールアドレス: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "マージに失敗しました。 連絡先が見つかりません: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "マージに失敗しました。"
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "マージに失敗しました。連絡先の保存エラー。"
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "写真を選択"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "ネットワークもしくはサーバエラーです。管理者に連絡してください。"
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "グループの追加時にエラー発生。"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "グループからの削除でエラーが発生。"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "{name} をお気に入りにする際にエラーが発生しました。"
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "連絡先をマージ"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "キャンセル"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "グループを追加"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "連絡先が見つかりませんでした: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "アップロードするファイルが選択されていません。"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "アップロードしようとしているファイルは、このサーバの最大ファイルアップロードサイズを超えています。"
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "プロフィール写真を編集"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "フォトをトリミング"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "これは正しいですか?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "日付の読み取りでエラー発生: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "グループ数"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "誕生日 {bday} の解析エラー: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "いくつかの連絡先が削除対象としてマークされていますが、まだ削除されていません。削除には今しばらく時間がかかります。"
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "クリックして {num} 個の連絡先の削除を取り消す"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "{num}件の連絡先の削除がキャンセルされました"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "追加"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "連絡先はすでにこのグループに存在します。"
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "連絡先はすでにこのグループに存在します。"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "連絡先リストを取得できませんでした。"
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "連絡先はこのグループに存在しません。"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "連絡先はこのグループに存在しません。"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "グループの名前の変更に失敗: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "{group} のグループはすでに存在します"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "グループをドラックすることで好きな\nように並べ替えることができます。"
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "グループの追加に失敗: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "すべて"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "お気に入り"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "{owner} と共有中"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "グループ化されていません"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "グループの読み込みに失敗: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "アドレス帳を選択してください"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "インポート ..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "インポートのテンプレートの読み込みエラー"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "連絡先をインポート"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "インポート"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "インポート完了"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "閉じる"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "エラー"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "表示名は空にできません。"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDavリンクを表示"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "読み取り専用のVCFリンクを表示"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "ダウンロード"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "編集"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "削除"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "詳細..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "閉じる..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "サーバエラー!システム管理者にお知らせください"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "写真の読み込みに失敗: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "この連絡先を閲覧する権限がありません"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "連絡先が見つかりません"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "これらの連絡先を閲覧する権限がありません"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "アドレス帳に連絡先を追加する権限がありません"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "このアドレス帳のバックエンドは連絡先の追加をサポートしていません"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "この連絡先を削除する権限がありません"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "このアドレス帳のバックエンドは連絡先の削除をサポートしていません"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "不明なエラー"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "このアドレス帳のバックエンドは更新をサポートしていません"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "アドレス帳を更新する権限がありません。"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "アドレス帳を削除する権限がありません。"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "アドレス帳が見つかりません"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "この連絡先を閲覧する権限がありません"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "この連絡先を更新する権限がありません"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "この連絡先のバックエンドは更新をサポートしていません"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "このバックエンドは連絡先の追加をサポートしていません"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "プロパティが見つかりません"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "不足しているIMパラメータ:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "不明なIM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}の誕生日"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "アドレス帳の作成エラー"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "アドレス帳の更新エラー"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "アドレス帳 \"%s\" を削除する権限がありません"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "アドレス帳の削除エラー"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "連絡先の作成エラー。"
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "連絡先の削除エラー。"
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "連絡先の取得エラー"
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "連絡先の保存エラー。"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "他のアドレス帳からの連絡先の削除エラー"
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "連絡先が見つかりませんでした。"
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "リクエストには連絡先はありません。"
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "連絡先へのマージエラー。"
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "バックエンドへの連絡先の保存エラー"
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "プロパティ名が設定されていません。"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "プロパティのチェックサムが設定されていません。"
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCardの情報に誤りがあります。ページをリロードして下さい。"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "連絡先の更新エラー"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "バックエンドへの連絡先の保存エラー"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "ユーザーフォト取得エラー"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "アップロードされたファイルはありません。不明なエラー"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "エラーはありません。ファイルのアップロードは成功しました"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "アップロードファイルは php.ini 内の upload_max_filesize の制限を超えています"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "アップロードファイルはHTMLフォームで指定された MAX_FILE_SIZE の制限を超えています"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "アップロードファイルは一部分だけアップロードされました"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "アップロードされたファイルはありません"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "一時保存フォルダが見つかりません"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "一時的な画像の読み込みができませんでした: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "一時的な画像の保存ができませんでした: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "写真のパスが登録されていません。"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "ファイルが存在しません:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "画像の読み込みエラー。"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "画像はキャッシュから削除されました。"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "一時画像の生成エラー"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "画像の切り抜きエラー"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "画像のリサイズエラー"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "写真属性の取得エラー。"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "グループ名が指定されていません。"
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "グループの追加エラー。"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "名前変更元のグループ名が指定されていません。"
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "名前変更先のグループ名が指定されていません。"
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "グループの名前変更エラー"
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "リクエストにはグループIDがありません。"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "リクエストにはグループ名が不足しています。"
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "リクエストには連絡先IDがありません。"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "ディスクへの書き込みに失敗しました"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "ストレージに十分な空き容量がありません"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "ブラックリストファイルのアップロードの試行:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "ストレージへの連絡先のアップロードエラー。"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "ファイルのインポートフォルダへの移動エラー。"
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "このアドレス帳にインポートする権限がありません"
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "リクエストにはファイル名が不足しています。"
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "リクエストにはプログレスキーが不足しています。"
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "ブラックリストファイルへのアクセスの試み:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "連絡先が見つかりません:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "キーが指定されていません。"
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "値が指定されていません。"
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "優先度を設定出来ません: "
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "連絡先"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "その他"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "ホームページ"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "インターネット電話"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "Googleトーク"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "週の始まり"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "住居"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "携帯電話"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "TTY TDD"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "音声番号"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "メッセージ"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "FAX"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "テレビ電話"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "ポケベル"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "インターネット"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "友達"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "家族"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "新しい連絡先"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "グループ名"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "新しいグループ"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "アドレス帳"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "表示名"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "アドレス帳を追加"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "ファイルを選択..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "すべての選択を解除"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "ソート順"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "名 姓"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "姓, 名"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "グループ"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "お気に入り"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "選択をマージ"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "キーボードショートカット"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "ナビゲーション"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "リスト内の次の連絡先"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "リスト内の前の連絡先"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "現在のアドレス帳を展開する/折りたたむ"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "次のアドレス帳"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "前のアドレス帳"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "アクション"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "連絡先リストを再読込する"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "新しい連絡先を追加"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "新しいアドレス帳を追加"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "現在の連絡先を削除"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>アドレスブックに連絡先が存在しない、もしくはアドレスブックが無効になっています。</h3><p>新しい連絡先を追加するか、VCFファイルから既存の連絡先をインポートしてください。</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "連絡先を追加"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "グループを削除"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "グループ名の変更"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "どの連絡先のデータをマージしますか?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "マージが成功した後に他を削除しますか?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "メールを作成"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "現在の写真を削除"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "現在の写真を編集"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "新しい写真をアップロード"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "ownCloudから写真を選択"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "名前"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "名"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "ミドルネーム"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "姓"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "グループを選択"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "アドレス帳を選択"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "ニックネーム"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "ニックネームを入力"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "タイトル"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "タイトルを入力"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "所属"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "組織を入力"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "誕生日"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "メモはここに..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "VCFとしてエクスポート"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "フィールドを追加..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "電話番号"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "メール"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "インスタントメッセージ"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "アドレス"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "メモ"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "ウェブサイト"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "連絡先の削除"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "推奨"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "連絡先を追加"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "アドレスへメールを送る"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "メールアドレスを削除"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "電話番号を入力"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "電話番号を削除"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Webサイトへ移動"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "URLを削除"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "地図で表示"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "住所を削除"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "住所1"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "郵便番号"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "ワシントンDC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "都市"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "コロンビア特別区"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "州/県"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "アメリカ合衆国"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "国名"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "インスタントメッセンジャー"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IMを削除"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "アクティブ"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "共有"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "エクスポート"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAVリンク"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV同期アドレス"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "さらに"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "プライマリアドレス(コンタクト等)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "アドレス帳"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "新規のアドレス帳"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "説明"
diff --cc apps/contacts/l10n/ka_GE/contacts.po
index ffe2eaf,0000000..6c9bb4a
mode 100644,000000..100644
--- a/apps/contacts/l10n/ka_GE/contacts.po
+++ b/apps/contacts/l10n/ka_GE/contacts.po
@@@ -1,1163 -1,0 +1,1163 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# drlinux64 <romeo at energo-pro.ge>, 2012
 +# drlinux64 <romeo at energo-pro.ge>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ka_GE\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "კონტაქტები"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "შენახვა"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "მიმდინარეობს ატვირთვა..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "უარყოფა"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "დიახ"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "დამატება"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "იმპორტი"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "დახურვა"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "შეცდომა"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "ჩამოტვირთვა"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "რედაქტირება"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "წაშლა"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "უცნობი შეცდომა"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "ფაილი არ აიტვირთა. უცნობი შეცდომა"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "ჭოცდომა არ დაფიქსირდა, ფაილი წარმატებით აიტვირთა"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "ატვირთული ფაილი აჭარბებს upload_max_filesize დირექტივას php.ini ფაილში"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "ატვირთული ფაილი აჭარბებს  MAX_FILE_SIZE დირექტივას, რომელიც მითითებულია HTML ფორმაში"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "ატვირთული ფაილი მხოლოდ ნაწილობრივ აიტვირთა"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "ფაილი არ აიტვირთა"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "დროებითი საქაღალდე არ არსებობს"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "შეცდომა დისკზე ჩაწერისას"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "საცავში საკმარისი ადგილი არ არის"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "კონტაქტი"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "სხვა"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "სამსახური"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "სახლი"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "მობილური"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "ტექსტი"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "ხმა"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "მესიჯი"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "ფაქსი"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "ვიდეო"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "პეიჯერი"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "ინტერნეტი"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "ჯგუფები"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "კონტაქტის დამატება"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "მიმდინარე სურათის წაშლა"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "მიმდინარე სურათის რედაქტირება"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "ახალი სურათის ატვირთვა"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "აირჩიე სურათი ownCloud –იდან"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "სახელი"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "ჯგუფების არჩევა"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "ნიკნეიმი"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "სახელი"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "ორგანიზაცია"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "დაბადების დრე"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "ტელეფონი"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "იმეილი"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "მისამართი"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "შენიშვნა"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "კონტაქტის წაშლა"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "ქალაქი"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "ქვეყანა"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "აქტიური"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "გაზიარება"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "ექსპორტი"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "უფრო მეტი ინფორმაცია"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "პირველადი მისამართი (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "მისამართის წიგნები"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "ახალი მისამართების წიგნი"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "გვერდის დახასიათება"
diff --cc apps/contacts/l10n/ko/contacts.po
index 8b00134,0000000..f953ca3
mode 100644,000000..100644
--- a/apps/contacts/l10n/ko/contacts.po
+++ b/apps/contacts/l10n/ko/contacts.po
@@@ -1,1176 -1,0 +1,1176 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# aoiob4305 <aoiob4305 at gmail.com>, 2013
 +# aoiob4305 <aoiob4305 at gmail.com>, 2013
 +# 남자사람 <cessnagi at gmail.com>, 2012
 +# 남자사람 <cessnagi at gmail.com>, 2012
 +# Daisuke Deguchi <ddeguchi at is.nagoya-u.ac.jp>, 2012
 +# madeng <jongyoul at gmail.com>, 2013
 +# yunhye <limonade83 at gmail.com>, 2012
 +# chohy <chohy at yahoo.com>, 2013
 +# Shinjo Park <kde at peremen.name>, 2013
 +# Shinjo Park <kde at peremen.name>, 2012-2013
 +# ujuc Gang <potopro at gmail.com>, 2013
 +# ujuc Gang <potopro at gmail.com>, 2013
 +# tt yn <tetuyano+transi at gmail.com>, 2012
 +# tt yn <tetuyano+transi at gmail.com>, 2012
 +# yunhye <limonade83 at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ko\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "연락처"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "저장"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "업로드 중..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "가져오기중..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "주소록 추가 실패: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "주소록 불러오기 실패: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "주소록을 불러오는 중 복구할 수 없는 오류 발생: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "오류."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "추가... "
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "다음에서 삭제... "
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "그룹 추가... "
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "잘못된 URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "잘못된 이메일: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "사진 선택"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "취소"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "확인"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "업로드를 위한 파일이 선택되지 않았습니다. "
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "이 파일은 이 서버 파일 업로드 최대 용량을 초과 합니다. "
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "일부 연락처가 삭제 표시 되었으나 아직 삭제되지 않았습니다. 삭제가 끝날 때 까지 기다려 주세요."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "추가"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "연락처가 이미 이 그룹에 있습니다."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "연락처 목록을 가져올 수 없습니다."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "주소록 선택"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "가져오기"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "가져오기 완료"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "닫기"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "오류"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "디스플레이 이름은 비워둘 수 없습니다. "
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav 링크를 표시"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "읽기전용 VCF 링크 표시"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "다운로드"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "편집"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "삭제"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "더..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "그외..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "알려지지 않은 오류"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "알려지지 않은 IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{이름}의 생일"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "연락처 저장 중 오류가 발생했습니다."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCard 정보가 올바르지 않습니다. 페이지를 새로 고치십시오."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "파일 업로드에 성공하였습니다."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "php.ini 형식으로 업로드 된 이 파일은 MAX_FILE_SIZE를 초과하였다."
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "업로드한 파일 크기가 HTML 폼의 MAX_FILE_SIZE보다 큼"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "파일의 일부분만 업로드됨"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "파일이 업로드되지 않았음"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "임시 폴더가 없음"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "임시 이미지를 불러올 수 없습니다. "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "임시 이미지를 저장할 수 없습니다:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "사진 경로가 제출되지 않았습니다. "
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "파일이 존재하지 않습니다:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "로딩 이미지 오류입니다."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "임시 이미지를 생성 중 오류가 발생했습니다."
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "이미지를 자르던 중 오류가 발생했습니다."
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "이미지 크기 조정 중 오류가 발생했습니다."
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "사진 속성을 가져오는 중 오류가 발생했습니다. "
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "디스크에 쓰지 못했습니다"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "저장소가 용량이 충분하지 않습니다."
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "스토리지 에러 업로드 연락처."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "선호도를 설정할 수 없음: "
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "연락처"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "기타"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "작업"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "가정"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "휴대폰"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "텍스트"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "음성 번호"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "메세지"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "팩스 번호"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "영상 번호"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "호출기"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "인터넷"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "친구들"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "가족"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "그룹"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "단축키"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "네비게이션"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "목록에서의 다음 연락처"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "목록에서의 이전 연락처"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "현재 주소록을 확장/축소"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "다음 주소록"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "이전 주소록"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "작업"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "연락처 목록 새로 고침"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "새로운 연락처 추가"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "새로운 주소록 추가"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "현재 연락처 삭제"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "연락처 추가"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "현재 사진 삭제"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "현재 사진 편집"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "새로운 사진 업로드"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "ownCloud에서 사진 선택"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "이름"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "추가 이름"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "그룹 선택"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "별명"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "별명 입력"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "직위"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "조직"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "생일"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "전화 번호"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "이메일"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "인스턴트 메세지"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "주소"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "메모"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "웹 사이트"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "연락처 삭제"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "선호함"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "올바른 이메일 주소를 입력하세요."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "이메일 주소"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "이메일 주소 삭제"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "전화번호 입력"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "전화번호 삭제"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "웹 사이트로 가기"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "지도에서 보기"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "번지"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "우편 번호"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "도시"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "국가"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "인스턴트 메신저"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM 삭제"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "활성"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "공유"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "내보내기"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV 주소 동기화"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "더 많은 정보"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "기본 주소 (Kontact 등)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "주소록"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "새 주소록"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "종류"
diff --cc apps/contacts/l10n/lb/contacts.po
index 2caf090,0000000..46f3c13
mode 100644,000000..100644
--- a/apps/contacts/l10n/lb/contacts.po
+++ b/apps/contacts/l10n/lb/contacts.po
@@@ -1,1165 -1,0 +1,1165 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# llaera <llaera at outlook.com>, 2013
 +# Michel Weimerskirch <michel at weimerskirch.net>, 2013
 +# sim0n <sim0n at trypill.org>, 2013
 +# sim0n <sim0n at trypill.org>, 2011, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: sim0n <sim0n at trypill.org>\n"
 +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: lb\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakter"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Späicheren"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Upload..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Gett importéiert..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fehler."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Grupp bäisetzen..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Foto auswielen"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Ofbriechen"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Grupp bäisetzen"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# Gruppen"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Dobäisetzen"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "All"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoriten"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importeieren"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Zoumaachen"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Feeler"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Download"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editéieren"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Läschen"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Méi..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Manner..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Et ass en onbekannte Fehler opgetrueden"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} säi Gebuertsdag"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Feeler beim Späichere vum Kontakt."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informatioun iwwert vCard ass net richteg. Lued d'Säit wegl nei."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Keen Feeler, Datei ass komplett ropgelueden ginn"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Déi ropgelueden Datei ass méi grouss wei d'upload_max_filesize Eegenschaft an der php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an der HTML form uginn ass"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Et ass kee Fichier ropgeluede ginn"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Et feelt en temporären Dossier"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Et gouf kee Foto-Pfad iwwerdroen."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Fichier existéiert net:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Fehler beim lueden vum Bild."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Feeler beim Schneide vum Bild"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Feeler beim Redimensionnéiere vum Bild"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Feeler beim Luede vun der PHOTO-Eegeschaft."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Konnt net op den Disk schreiwen"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Aner"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Aarbecht"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Doheem"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "GSM"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "SMS"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voice"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Message"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Frënn"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Famill"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Neie Kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruppe Numm"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nei Grupp"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Gruppen"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Neie Kontakt bäisetzen"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Kontakt bäisetzen"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "D'Grupp läaschen"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "D'Grupp em-benennen"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Numm"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Virnumm"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Weider Nimm"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Famillje Numm"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Spëtznumm"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Gëff e Spëtznumm an"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Firma"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Gebuertsdaag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adress"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Note"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Web site"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kontakt läschen"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Telefonsnummer aginn"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Telefonsnummer läschen"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Op da Kaart uweisen"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Staat"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Deelen"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exporteieren"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDav Link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "méi Informatiounen"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primair address (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressbicher "
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Neit Adressbuch"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beschreiwung"
diff --cc apps/contacts/l10n/lt_LT/contacts.po
index 078f72d,0000000..5f3351c
mode 100644,000000..100644
--- a/apps/contacts/l10n/lt_LT/contacts.po
+++ b/apps/contacts/l10n/lt_LT/contacts.po
@@@ -1,1169 -1,0 +1,1169 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Dr. ROX <to.dr.rox at gmail.com>, 2011-2012
 +# Dr. ROX <to.dr.rox at gmail.com>, 2011, 2012
 +# fizikiukas <fizikiukas at gmail.com>, 2013
 +# Liudas Ališauskas <liudas.alisauskas at gmail.com>, 2013
 +# Liudas <liudas at aksioma.lt>, 2013
 +# mambuta <vspyshkin at gmail.com>, 2013
 +# mambuta <vspyshkin at gmail.com>, 2013
 +# fizikiukas <fizikiukas at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: lt_LT\n"
 +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontaktai"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Išsaugoti"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Įkeliama..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importuojama..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Ruošiama..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importuota {count} iš {total} kontaktų"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importuota {imported} kontaktų. {failed} nepavyko."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Adresų knyga pavadinimu {group} jau egzistuoja"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Nepavyko pridėti adresų knygos: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Nepavyko įkelti adresų knygų: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indeksuojami kontaktai"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Klaida."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Pridėti į..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Pašalinti iš..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Pridėti grupę..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Netinkamas URL\" „{url}“"
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Buvo klaida atveriant el. laiško redaktorių."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Netinkamas el. paštas"
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Suliejimas nepavyko. Nepavyksta rasti kontakto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Sulieti nepavyko."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Suliejimas nepavyko. Klaida saugant kontaktą."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Nurodykite nuotrauką"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Tinklo arba serverio klaida. Prašome informuoti administratorių."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Klaida pridedant į grupę."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Klaida pašalinant iš grupės."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Klaida nustatant {name} mėgstamu."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Sulieti kontaktus"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Atšaukti"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Pridėti grupę"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Gerai"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Nepavyko rasti kontakto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Nepažymėta jokių failų įkėlimui."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Įkeliamo failo dydis viršijo šio serverio maksimalų leistiną dydį."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Redaguoti profilio paveikslėlį"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Apkirpti nuotrauką"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Teisinga?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Klaida apdorojant datą: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupės"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Klaida nagrinėjant gimtadienį {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Keletas kontaktų buvo pažymėti ištrinimui, bet dar neištrinti. Prašome palaukti kol jie bus ištrinti."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Spauskite, kad atstatyti trynimą {num} kontaktų"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Atšauktas {num} kontaktų trynimas"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Pridėti"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontaktas jau yra grupėje."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontaktai jau yra grupėje."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Nepavyko gauti kontaktų sąrašo."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontaktas nėra šioje grupėje."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "KontaktaI nėra šioje grupėje."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Nepavyko pervadinti grupės: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Grupė pavadinimu {group} jau egzistuoja"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Galite tempti grupes, kad\nišrikiuoti jas kaip Jums reikia."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Nepavyko pridėti grupės: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Viskas"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Mėgstamiausi"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Bendrina {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Nesugrupuotas"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Nepavyko įkelti grupių: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Prašome pasirinkti adresų knygą"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importuoti į..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Klaida įkeliant importavimo ruošinį"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importuoti kontaktus"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importuoti"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importas baigas"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Užverti"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Klaida"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Rodomas vardas negali būti tuščias."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Rodyti CardDAV nuorodą"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Rodyti tik skaitymui VCF nuorodą"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Atsisiųsti"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Redaguoti"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Ištrinti"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Daugiau..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Mažiau..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Serverio klaida! Prašome informuoti administratorių"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Nepavyko įkelti nuotraukos: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Jūs neturite leidimo matyti šių kontaktų"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontaktas nerastas"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Jūs neturite leidimo matyti šiuos kontaktus"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Jūs neturite leidimų pridėti kontaktų į šią adresų knygutę"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Jūs neturite leidimų ištrinti šį kontaktą"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Neatpažinta klaida"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Jūs neturite leidimo atnaujinti šią adresų knygutę."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Jūs neturite leidimo ištrinti šią adresų knygutę."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adresų knygutė nerasta"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Jūs neturite leidimo matyti šį kontaktą"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Jūs neturite leidimo atnaujinti šį kontaktą"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Savybė nerasta"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Nežinomas IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} gimtadienis"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Klaida kuriant adresų knygutę"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Klaida atnaujinant adresų knygutę"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Jūs neturite leidimo ištrinti „%s“ adresų knygos"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Klaida trinant adresų knygutę"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Klaida kuriant kontaktą."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Klaida trinant kontaktą."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Klaida gaunant kontaktą."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Klaida išsaugant kontaktą."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Klaida paralinant kontaktą iš kitos adresų knygutės."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Nepavyko rasti kontakto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Nenustatytas savybės pavadinimas."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Nenustatyta savybės kontrolinė suma."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informacija apie vCard yra neteisinga. "
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Klaida atnaujinant kontaktą"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Klaida gaunant naudotojo nuotrauką"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Failai nebuvo įkelti dėl nežinomos priežasties"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Failas įkeltas sėkmingai, be klaidų"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Įkeliamo failo dydis viršija upload_max_filesize nustatymą php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Failas buvo įkeltas tik dalinai"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Nebuvo įkeltas joks failas"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Nėra laikinojo katalogo"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Nepavyko įkelti laikiną paveikslėlį:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Nepavyko išsaugoti laikiną paveikslėlį:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Nenurodytas nuotraukos kelias. "
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Failas neegzistuoja:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Klaida įkeliant nuotrauką."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Paveikslėlis pašalintas iš talpyklos"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Klaida kuriant laikiną paveikslėlį"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Klaida apkerpant paveikslėlį"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Klaida keičiant paveikslėlio dydį"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Klaida gaunant nuotraukos  savybes."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Nepateiktas grupės pavadinimas."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Klaida pridedant grupę."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Klaida pervadinant grupę."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Nepavyko įrašyti į diską"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nepakanka vietos serveryje"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Bandymas įkelti draudžiamą failą:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Klaida siunčiant kontaktus į saugyklą."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Klaida perkeliant failą į importavimų aplanką."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Jūs neturite leidimo importuoti į šią adresų knygutę."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "bandymas pasiekti draudžiamą failą:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Kontaktų nerasta:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Nepateiktas raktas."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Nepateikta vertė."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Nepavyko nustatyti:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontaktas"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Kita"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Namų puslapis"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internetinis skambutis"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Darbas"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Namų"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobilusis"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Žinučių"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Balso"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Žinutė"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faksas"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vaizdo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pranešimų gaviklis"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internetas"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Draugai"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Šeima"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Naujas kontaktas"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Grupės pavadinimas"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nauja grupė"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adresų knygos"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Rodyti vardą"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Pridėti adresų knygą"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Pasirinkti failą..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Nuimti pažymėjimą"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Išdėstymo tvarka"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Vardas- Pavardė"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Pavardė-, Vardas"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupės"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Mėgiamas"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Suliejimas pažymėtas"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Klaviatūros spartieji klavišai"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigacija"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Kitas kontaktas sąraše"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Ankstesnis kontaktas sąraše"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Išskleisti/sutraukti šią adresų knygutę"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Kita adresų knygutė"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Ankstesnė adresų knygutė"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Veiksmai"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Atnaujinti kontaktų sąrašą"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Pridėti naują kontaktą"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Pridėti naują adresų knygą"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Ištrinti šį kontaktą"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Jūs neturite kontaktų savo adresų knygoje, arba adresų knyga yra išjungta.</h3><p>Pridėkite naują kontaktą, arba importuokite turimus kontaktus iš VCF failo.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Pridėti kontaktą"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Trinti grupę"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Pervadinti grupę"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Sukurti el. laišką"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Ištrinti šią nuotrauką"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Redaguoti šią nuotrauką"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Įkelti naują foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Pasirinkite nuotrauką iš ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Pavadinimas"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Vardas"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Papildomi vardai"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Pavardė"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Pasirinkti grupes"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Parinkti adresų knygą"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Slapyvardis"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Įveskite slapyvardį"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Pavadinimas"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Įveskite pavadinimą"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizacija"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Įveskite organizaciją"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Gimtadienis"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Pastabos rašomo čia..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Eksportuoti kaip VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefonas"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "El. Paštas"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Tikralaikiai pokalbiai"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresas"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Pastaba"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Svetainė"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Ištrinti kontaktą"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Pageidautinas"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Prašome nurodyti tinkamą el. pašto adresą."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "kasnors at pavyzdys.lt"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Ištrinti el. pašto adresus"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Įveskite telefono numerį"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Ištrinti telefono numerį"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Eiti į svetainę"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Ištrinti URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Žiūrėti žemėlapyje"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Pašalinti adresą"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Gatvės adresas"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Pašto kodas"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Vašingtono apygarda"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Miestas"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Šalis ar provincija"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "JAV"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Šalis"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Momentinių žinučių klientas"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Ištrinti IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktyvus"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Dalintis"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Eksportuoti"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV nuoroda"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV sinchronizavimo adresai"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "daugiau informacijos"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Pirminis adresas"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adresų knygos"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nauja adresų knyga"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Aprašymas"
diff --cc apps/contacts/l10n/lv/contacts.po
index 439304c,0000000..b513a4d
mode 100644,000000..100644
--- a/apps/contacts/l10n/lv/contacts.po
+++ b/apps/contacts/l10n/lv/contacts.po
@@@ -1,1164 -1,0 +1,1164 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# CPDZ <aldis at udris.lv>, 2013
 +# jeanmarcgailis <jeanmarc.gailis at gmail.com>, 2013
 +# Rūdolfs Mazurs <rudolfs.mazurs at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: CPDZ <aldis at udris.lv>\n"
 +"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: lv\n"
 +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakti"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Saglabāt"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Augšupielādē..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importē..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Atcelt"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Labi"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Pievienot"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importēt"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Aizvērt"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Kļūda"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Lejupielādēt"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Rediģēt"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Dzēst"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Kļūda, saglabājot kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Netika augšupielādēta neviena datne. Nezināma kļūda"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Viss kārtībā, datne augšupielādēta veiksmīga"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Augšupielādētā datne pārsniedz MAX_FILE_SIZE norādi, kas ir norādīta HTML formā"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Augšupielādētā datne ir tikai daļēji augšupielādēta"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Neviena datne netika augšupielādēta"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Trūkst pagaidu mapes"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Nav iesniegts fotogrāfijas ceļš."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Datne neeksistē:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Kļūda, ielādējot attēlu."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Kļūda, apcērtot attēlu"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Kļūda, mainot attēla izmēru"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Kļūda, saņemot PHOTO īpašību."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Neizdevās saglabāt diskā"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nav pietiekami daudz vietas"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Cits"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Darbs"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Mājas"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Teksts"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupas"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nosaukums"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Izvēlieties grupas"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Nosaukums"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Dzimšanas diena"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-pasts"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adrese"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Piezīme"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktīvs"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Dalīties"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Eksportēt"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "vairāk informācijas"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primārā adrese"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Apraksts"
diff --cc apps/contacts/l10n/mk/contacts.po
index 41cc635,0000000..d18b983
mode 100644,000000..100644
--- a/apps/contacts/l10n/mk/contacts.po
+++ b/apps/contacts/l10n/mk/contacts.po
@@@ -1,1163 -1,0 +1,1163 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Miroslav Jovanovic <j.miroslav at gmail.com>, 2012
 +# miroj <jmiroslav at softhome.net>, 2012-2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: miroj <jmiroslav at softhome.net>\n"
 +"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: mk\n"
 +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Контакти"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Сними"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Подигнувам..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Увезувам..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Индексирање на контактите"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Грешка."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Додади на..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Отстрани од..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Додади група..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Спојувањето не беше успешно."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Одбери фотографија"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Грешки при додавањето во група."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Спои ги контактите"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Откажи"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Додади група"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Во ред"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Ниту еден фајл не е избран за вчитување."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Датотеката која се обидувате да ја префрлите ја надминува максималната големина дефинирана за пренос на овој сервер."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Уреди ја фотографијата за профилот"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Дали е ова во ред?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Додади"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Сите"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Омилени"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Споделени од {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Не групирани"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Ве молам изберете адресар"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Увези"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Затвори"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Грешка"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Прикажаното име не може да биде празно."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Преземи"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Уреди"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Избриши"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Повеќе..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Помалку..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Непозната грешка"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Адресарот не е пронајден"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Вредноста не е пронајдена"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr " Недостасува IM параметар за: "
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Непознат IM: "
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Роденден на {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Грешка при креирање на адресар."
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Грешка при осважување на адресар"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Грешка при бришење на адресар"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Грешка при креирање на контакт."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Греш при бришење на контакт."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Грешка при повлекување на контакт."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Грешка при снимање на контактите."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Грешка при бришење на контакт од друг адресар."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Не можев да го пронајдам контактот."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Грешка при спојување на контактите."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Информацијата за vCard не е точна. Ве молам превчитајте ја страницава."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ниту еден фајл не се вчита. Непозната грешка"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Датотеката беше успешно подигната."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Големината на датотеката ја надминува upload_max_filesize директивата во php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Големината на датотеката ја надминува MAX_FILE_SIZE директивата која беше специфицирана во HTML формата"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Датотеката беше само делумно подигната."
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Не беше подигната датотека."
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Недостасува привремена папка"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Не можеше да се вчита привремената фотографија:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Не можеше да се сними привремената фотографија:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Не беше поднесена патека за фотографија."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Не постои датотеката:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Грешка во вчитување на слика."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Грешка при креирањето на привремената фотографија"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Грешка при сечење на фотографијата"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Грешка при скалирање на фотографијата"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Грешка при утврдувањето на карактеристиките на фотографијата."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Неуспеав да запишам на диск"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Нема доволно слободен сториџ"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Грешка во снимање на контактите на диск."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Контакт"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Останато"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Работа"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Дома"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Мобилен"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Текст"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Глас"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Порака"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Факс"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Видео"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Пејџер"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Интернет"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Групи"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Додади контакт"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Избриши моментална фотографија"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Уреди моментална фотографија"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Подигни нова фотографија"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Изберете фотографија од ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Име"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Дополнителни имиња"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Прекар"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Внеси прекар"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Наслов"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Организација"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Роденден"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Телефон"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Е-пошта"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Адреса"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Забелешка"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Избриши го контактот"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Претпочитано"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Ве молам внесете правилна адреса за е-пошта."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Прати порака до адреса"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Избриши адреса за е-пошта"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Внесете телефонски број"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Избриши телефонски број"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Погледајте на мапа"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Град"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Држава"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Активно"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Сподели"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Извези"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Адреса за синхронизација со CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "повеќе информации"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Примарна адреса"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Адресари"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Нов адресар"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Опис"
diff --cc apps/contacts/l10n/ms_MY/contacts.po
index 7b2dba9,0000000..ecdc364
mode 100644,000000..100644
--- a/apps/contacts/l10n/ms_MY/contacts.po
+++ b/apps/contacts/l10n/ms_MY/contacts.po
@@@ -1,1166 -1,0 +1,1166 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Ahmed Noor Kader Mustajir Md Eusoff <sir.ade at gmail.com>, 2012
 +# Hadri Hilmi <hadri.hilmi at gmail.com>, 2012
 +# Hadri Hilmi <hadri.hilmi at gmail.com>, 2012
 +# Hafiz Ismail <mhbinet at gmail.com>, 2012
 +# Zulhilmi Rosnin <zulhilmi.rosnin at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 14:10+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ms_MY\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Hubungi "
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Simpan"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Pilih foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Batal"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Tiada fail dipilih untuk muatnaik."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Fail yang ingin dimuatnaik melebihi saiz yang dibenarkan."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Tambah"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Sila pilih buku alamat"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Import"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Tutup"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Ralat"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Nama paparan tidak boleh kosong"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Muat turun"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Sunting"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Padam"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Lagi..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Hari Lahir {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Ralat menyimpan kenalan."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Maklumat vCard tidak tepat. Sila reload semula halaman ini."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Tiada fail dimuatnaik. Ralat tidak diketahui."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Tiada ralat berlaku, fail berjaya dimuatnaik"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Saiz fail yang dimuatnaik melebihi upload_max_filesize yang ditetapkan dalam php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Saiz fail yang dimuatnaik melebihi MAX_FILE_SIZE yang ditetapkan dalam borang HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Fail yang dimuatnaik tidak lengkap"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Tiada fail dimuatnaik"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Direktori sementara hilang"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Tidak boleh membuka imej sementara: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Tidak boleh menyimpan imej sementara: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Tiada direktori gambar yang diberi."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Fail tidak wujud:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Ralat pada muatan imej."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Ralat mencipta imej sementara"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Ralat memotong imej"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Ralat mengubah saiz imej"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Ralat mendapatkan maklumat gambar."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Gagal untuk disimpan"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Ralat memuatnaik senarai kenalan."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Hubungan"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Lain"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Kerja"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Rumah"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mudah alih"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Teks"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Suara"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mesej"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Alat Kelui"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Kumpulan"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Buku alamat seterusnya"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Buku alamat sebelumnya"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Letak kenalan"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Padam foto semasa"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Ubah foto semasa"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Muatnaik foto baru"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Pilih foto dari ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nama"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Nama tambahan"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Nama Samaran"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Masukkan nama samaran"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Judul"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisasi"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Hari lahir"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Alamat"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Padam hubungan"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Pilihan"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Berikan alamat emel yang sah."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Hantar ke alamat"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Padam alamat emel"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Masukkan nombor telefon"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Padam nombor telefon"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Lihat pada peta"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "bandar"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Negara"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktif"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Kongsi"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Export"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "alamat selarian CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "maklumat lanjut"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Alamat utama"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Senarai Buku Alamat"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Buku Alamat Baru"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Keterangan"
diff --cc apps/contacts/l10n/nb_NO/contacts.po
index 5620b2a,0000000..1b0ab6c
mode 100644,000000..100644
--- a/apps/contacts/l10n/nb_NO/contacts.po
+++ b/apps/contacts/l10n/nb_NO/contacts.po
@@@ -1,1171 -1,0 +1,1171 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# anjar <ajarmund at gmail.com>, 2012
 +# Christer Eriksson <post at hceriksson.com>, 2012
 +# Daniel <i18n at daniel.priv.no>, 2012
 +# espenbye <espenbye at me.com>, 2013
 +# espenbye <espenbye at me.com>, 2012
 +# Hans Nesse <>, 2013
 +# hdalgrav <hdalgrav at gmail.com>, 2012
 +# owncloud <itssmail at yahoo.no>, 2012
 +# TheLugal <thelugal at gmail.com>, 2013
 +# Stein-Aksel Basma <stabasm at hotmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nb_NO\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakter"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Lagre"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Laster opp..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importerer..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importerte {count} av {total} kontakter"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "En adressebok med navn {name} finnes allerede"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indekserer kontakter"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Feil."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Legg til..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Fjern fra..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Legg til gruppe..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Ugyldig URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Ugyldig e-post: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Fletting feilet. Kan ikke finne kontakt: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Fletting feilet."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Velg bilde"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Flett kontakter"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Avbryt"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Legg til gruppe"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Ingen filer valgt for opplasting."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Filen du prøver å laste opp er for stor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Rediger profilbilde"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Er dette korrekt?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "Ant. grupper"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Legg til"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alle"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoritter"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Delt av {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Vennligst velg adressebok"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importer"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Lukk"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Feil"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Last ned"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Endre"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Slett"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mer..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Mindre..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}s bursdag"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Klarte ikke å lagre kontakt."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informasjonen om vCard-filen er ikke riktig. Last inn siden på nytt."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ingen filer ble lastet opp. Ukjent feil."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Pust ut, ingen feil. Filen ble lastet opp problemfritt"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Filen du prøvde å laste opp var større enn grensen upload_max_filesize i php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Filen du prøvde å laste opp var større enn grensen satt i MAX_FILE_SIZE i HTML-skjemaet."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Filen du prøvde å laste opp ble kun delvis lastet opp"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ingen filer ble lastet opp"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Mangler midlertidig mappe"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Kunne ikke laste midlertidig bilde:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Kunne ikke lagre midlertidig bilde:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Ingen filsti ble lagt inn."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Filen eksisterer ikke:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Klarte ikke å laste bilde."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Klarte ikke å lage et midlertidig bilde"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Klarte ikke å beskjære bildet"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Klarte ikke å endre størrelse på bildet"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Feil ved henting av foto verdi."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Klarte ikke å skrive til disk"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Ikke nok lagringsplass"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Klarte ikke å laste opp kontakter til lagringsplassen"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Kunne ikke sette preferanse:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Annet"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbeid"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Hjem"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Tekst"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Svarer"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Melding"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faks"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internett"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Venner"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familie"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Ny kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Ny gruppe"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adressebøker"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Velg fil"
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupper"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favoritt"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Tastatur snarveier"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigasjon"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Neste kontakt i listen"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Forrige kontakt i listen"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Vis/skjul adresseboken"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Neste adressebok"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Forrige adressebok"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Handlinger"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Oppdater kontaktliste"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Legg til ny kontakt"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Legg til ny adressebok"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Slett kontakten"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Ny kontakt"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Slett gruppe"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Fjern nåværende bilde"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Rediger nåværende bilde"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Last opp nytt bilde"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Velg bilde fra ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Navn"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Fornavn"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Ev. mellomnavn"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Etternavn"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Velg grupper"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Velg adressebok"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Kallenavn"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Skriv inn kallenavn"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Tittel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisasjon"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Bursdag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Eksporter som VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Epost"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notat"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Hjemmeside"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Slett kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Foretrukket"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Vennligst angi en gyldig e-postadresse."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Send e-post til adresse"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Fjern e-postadresse"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Skriv inn telefonnummer"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Fjern telefonnummer"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Se på kart"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Slett adresse"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "By"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Del"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Eksporter"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Synkroniseringsadresse for CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mer info"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primær adresse (kontakt osv)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressebøker"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Ny adressebok"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beskrivelse"
diff --cc apps/contacts/l10n/nl/contacts.po
index aa76d94,0000000..be92a7b
mode 100644,000000..100644
--- a/apps/contacts/l10n/nl/contacts.po
+++ b/apps/contacts/l10n/nl/contacts.po
@@@ -1,1174 -1,0 +1,1174 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# André Koot <meneer at tken.net>, 2012-2013
 +# isama <bart.formosus at gmail.com>, 2011
 +# bartv <transifex at thisnet.nl>, 2011
 +# diederikdehaas <didi.debian at cknow.org>, 2012
 +# Erik Bent <hj.bent.60 at gmail.com>, 2012
 +# gertvdw <gertvdw at gmail.com>, 2012
 +# Robin Appelman <icewind1991 at gmail.com>, 2012
 +# koenvervloesem <koen at vervloesem.eu>, 2012
 +# Len <lenny at weijl.org>, 2013
 +# Len <lenny at weijl.org>, 2012
 +# Richard Bos <radoeka at gmail.com>, 2012
 +# bartv <transifex at thisnet.nl>, 2012
 +# translatemonkey <translator at it-dept.eu>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: André Koot <meneer at tken.net>\n"
 +"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nl\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactpersonen"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Bewaren"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Uploading..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importeren..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Voorbereiden..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "{count} van {total} contactpersonen geïmporteerd"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} contactpersonen geïmporteerd. {failed} mislukt."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Er bestaat al een adresboek genaamd {name}"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Mislukt: toevoegen adresboek: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Mislukt: inladen adresboeken: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Bezig met indexeren van contactpersonen"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Onherstelbare fout bij het laden van adresboeken: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fout."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Toevoegen aan..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Verwijderen uit..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Nieuwe groep..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Ongeldige URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Er is iets misgegaan tijdens het openen van een email programma."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Ongeldige e-mail: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Samenvoegen mislukt. Kan contactpersoon {id} niet vinden "
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Samenvoeging mislukt."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Samenvoegen mislukt. Fout bij opslaan contactpersoon."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Selecteer een foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Netwerk- of serverfout. Neem contact op met de beheerder."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Fout bij het toevoegen aan de groep."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Fout bij het verwijderen uit de groep."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Fout bij instellen {name} als favoriet"
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Samenvoegen contactgegevens"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Annuleer"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Toevoegen groep"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kon contactpersoon niet vinden: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Geen bestanden geselecteerd voor upload."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Het bestand dat u probeert te uploaden overschrijdt de maximale bestand grootte voor bestand uploads voor deze server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Bewerk profielafbeelding"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Bijsnijden foto"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Is dit correct?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Fout bij lezen datum: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# groepen"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Fout bij interpreteren verjaardag {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Enkele contacten zijn gemarkeerd om verwijderd te worden, maar zijn nog niet verwijderd.  Wacht totdat ze zijn verwijderd."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klik om het verwijderen van {num} contactpersonen ongedaan te maken."
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Verwijderen van {num} contacten geannuleerd"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Toevoegen"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "De contactpersoon bevindt zich al in deze groep."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "De contactpersonen bevinden zich al in deze groep."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kan de contactenlijst niet ophalen."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "De contactpersoon bevindt zich niet in deze groep"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "De contactpersonen bevinden zich niet in deze groep"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Mislukt: hernoemen van groep: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Er bestaat al een groep {group}"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "U kunt groepen slepen\nom ze naar wens te rangschikken."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Mislukt: toevoegen groep: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alle"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favorieten"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Gedeeld door {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Niet gegroepeerd"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Mislukt: inladen groepen: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Kies een adresboek"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importeren naar..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Fout bij laden importsjabloon"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importeren contactpersonen"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importeer"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import uitgevoerd"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Sluit"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Fout"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Displaynaam mag niet leeg zijn."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Laat CardDav link zien"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Laat alleen lezen VCF link zien"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Downloaden"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Bewerk"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Verwijder"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Meer..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Minder..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Server fout! Neem contact op met de systeembeheerder"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Mislukt: inladen foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "U heeft geen permissie om deze contactpersonen te bekijken"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contact niet gevonden"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "U heeft geen permissie omdeze contactpersonen te bekijken"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "U heeft geen permissie om contactpersonen toe te voegen aan het adresboek."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "De backend voor dit adresboek heeft geen ondersteuning voor het toevoegen van contactpersonen"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "U heeft geen permissie om dit contact te verwijderen"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "De backend voor dit adresboek heeft geen ondersteuning voor het verwijderen van contactpersonen."
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Onbekende fout"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "De backend voor dit adresboek ondersteund geen bewerk acties."
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "U heeft geen permissie om dit adresboek te bewerken."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "U heeft geen permissie om dit adresboek te verwijderen."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adresboek niet gevonden"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "U heeft geen permissie om deze contactpersoon te bekijken"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "U heeft geen permissie om deze contactpersoon te bewerken"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "De backend voor deze contactpersoon heeft geen ondersteuning voor bewerk acties"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "De backend heeft geen ondersteuning voor het toevoegen van contactpersonen"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Eigenschap niet gevonden"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Ontbrekende IM parameter voor:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Onbekende IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}'s verjaardag"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Fout bij aanmaken adresboek"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Fout bij bijwerken adresboek"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "U hebt niet de permissies om het \"%s\" adresboek te verwijderen"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Fout bij verwijderen adresboek"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Fout bij aanmaken contactpersoon."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Fout bij verwijderen contactpersoon."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Fout bij ophalen contactpersonen."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Fout om contact op te slaan"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Fout bij verwijderen contactpersoon uit ander adresboek."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kon contactpersoon niet vinden."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Geen contactgegevens in aanvraag."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Fout bij samenvoegen bij contactpersoon."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Fout bij bewaren contactpersoon in backend."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Naam van eigenschap niet ingesteld."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Controlegetal van eigenschap niet ingesteld."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informatie over de vCard is onjuist. Herlaad de pagina."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Fout bij bijwerken contactpersoon"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Fout bij opslaan contactpersoongegevens baar backend"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Fout bij ophalen gebruikersfoto"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Er was geen bestand geladen.  Onbekende fout"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "De upload van het bestand is goedgegaan."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Het bestand overschrijdt de upload_max_filesize instelling in php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Het bestand overschrijdt de MAX_FILE_SIZE instelling dat is opgegeven in het HTML formulier"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Het bestand is gedeeltelijk geüpload"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Er is geen bestand geüpload"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Er ontbreekt een tijdelijke map"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Kan tijdelijk plaatje niet op laden:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Kan tijdelijk plaatje niet op slaan:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Geen fotopad opgestuurd."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Bestand bestaat niet: "
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Fout bij laden plaatje."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Afbeelding is verwijderd uit de cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Fout om een tijdelijk plaatje te maken"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Fout tijdens aanpassen plaatje"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Fout tijdens aanpassen plaatje"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Fout om PHOTO eigenschap te verkrijgen"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Geen groepsnaam opgegeven."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Fout bij toevoegen groep"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Geen groepsnaam opgegeven om vanaf te hernoemen."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Geen groepsnaam opgegeven om naar te hernoemen."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Fout bij het hernoemen van groep."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Groep ID niet opgegeven"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Groepsnaam niet aanwezig bij aanvraag."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Contact ID niet opgegeven"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Schrijven naar schijf mislukt"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Niet genoeg opslagruimte beschikbaar"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Poging om geblacklist bestand te uploaden:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Fout bij opslaan van contacten."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Fout bij verplaatsen bestand naar importmap."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "U heeft geen permissie om te importeren naar dit adresboek."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Bestandsnaam ontbreekt in aanvraag."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Voortgangssleutel ontbreekt in aanvraag."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Poging om geblacklist bestand te openen:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Geen contactpersonen gevonden in:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Geen sleutel verstrekt."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Geen waarde opgegeven."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Kan voorkeur niet opslaan:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contact"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Anders"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "HomePage"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet oproep"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Werk"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Thuis"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobiel"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Tekst"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Stem"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Bericht"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pieper"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Vrienden"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familie"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nieuw Contact"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Groepsnaam"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nieuwe Groep"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adresboeken"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Weergavenaam"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Toevoegen adresboek"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Selecteer bestand..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(De-)selecteer alle"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sorteer volgorde"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Voor- achternaam"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Achter-, Voornaam"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Groepen"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favoriet"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Geselecteerde items samenvoegen"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Sneltoetsen"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigatie"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Volgende contact in de lijst"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Vorige contact in de lijst"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Uitklappen / inklappen huidig adresboek"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Volgende adresboek"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Vorige adresboek"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Acties"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Vernieuw contact lijst"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Voeg nieuw contact toe"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Voeg nieuw adresboek toe"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Verwijder huidig contact"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>U hebt geen contactpersonen in uw adresboek of uw adresboek is uitgeschakeld.</h3><p>Voeg een nieuwe contactpersoon toe, of importeer bestaande contactpersonen vanuit een VCF bestand.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Contactpersoon toevoegen"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Verwijder groep"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Hernoem groep"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Bij welke contactpersoon moeten de gegevens worden samengevoegd?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Verwijder de andere(n) na een succesvolle samenvoeging?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Schrijf email"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Verwijdere huidige foto"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Wijzig huidige foto"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Upload nieuwe foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Selecteer foto uit ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Naam"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Voornaam"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Extra namen"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Achternaam"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Selecteer groepen"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Selecteer adresboek"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Roepnaam"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Voer roepnaam in"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Invoeren titel"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisatie"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Invoeren organisatie"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Verjaardag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Hier de notities..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exporteren als VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Toevoegen veld..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefoon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mailadres"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adres"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notitie"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Website"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Verwijder contact"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Voorkeur"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Geef een geldig email adres op."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "iemand at voorbeeld.nl"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Mail naar adres"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Verwijder email adres"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Voer telefoonnummer in"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Verwijdere telefoonnummer"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ga naar website"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Verwijder URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Bekijk op een kaart"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Verwijder adres"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "Dorpsstraat 1"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Adres"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "1234 AB"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postcode"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Ons Dorp"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Stad"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "Noord-Vlaanderen"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Staat of provincie"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "NL"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Verwijder IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Actief"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Delen"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exporteer"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV link"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV synchroniseert de adressen"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "meer informatie"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primary adres (voor Kontact en dergelijke)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adresboeken"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nieuw Adresboek"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beschrijving"
diff --cc apps/contacts/l10n/nn_NO/contacts.po
index 834dd79,0000000..e00496e
mode 100644,000000..100644
--- a/apps/contacts/l10n/nn_NO/contacts.po
+++ b/apps/contacts/l10n/nn_NO/contacts.po
@@@ -1,1165 -1,0 +1,1165 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# unhammer <unhammer+dill at mm.st>, 2013
 +# unhammer <unhammer+dill at mm.st>, 2011
 +# olealX <post at olealx.net>, 2012
 +# unhammer <unhammer+dill at mm.st>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nn_NO\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kotaktar"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Lagra"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Lastar opp …"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Avbryt"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Greitt"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Legg til"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importer"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Lukk"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Feil"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Last ned"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Endra"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Slett"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informasjonen om vCard-et er feil, ver venleg og last sida på nytt."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ingen filer lasta opp. Ukjend feil"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Ingen feil, fila vart lasta opp"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Den opplasta fila er større enn variabelen upload_max_filesize i php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Den opplasta fila er større enn variabelen MAX_FILE_SIZE i HTML-skjemaet"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Fila vart berre delvis lasta opp"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ingen filer vart lasta opp"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Manglar ei mellombels mappe"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Klarte ikkje skriva til disk"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Ikkje nok lagringsplass tilgjengeleg"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Anna"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbeid"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Heime"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Tekst"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Tale"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faks"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Personsøkjar"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupper"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Namn"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Vel grupper"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Tittel"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisasjon"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Bursdag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefonnummer"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-post"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresse"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Slett kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Føretrekt"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Stad"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Del"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Eksporter"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "meir info"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Hovudadresse (Kontact osb.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressebøker"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Ny adressebok"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Skildring"
diff --cc apps/contacts/l10n/oc/contacts.po
index 37ab71e,0000000..e2097b1
mode 100644,000000..100644
--- a/apps/contacts/l10n/oc/contacts.po
+++ b/apps/contacts/l10n/oc/contacts.po
@@@ -1,1161 -1,0 +1,1161 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: oc\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactes"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Enregistra"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Annula"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "D'accòrdi"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Ajusta"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importa"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr ""
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Error"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Avalcarga"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Escafa"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Amontcargament capitat, pas d'errors"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Lo fichièr amontcargat es tròp bèl per la directiva «upload_max_filesize » del php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Lo fichièr amontcargat es mai gròs que la directiva «MAX_FILE_SIZE» especifiada dins lo formulari HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Lo fichièr foguèt pas completament amontcargat"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Cap de fichièrs son estats amontcargats"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Un dorsièr temporari manca"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "L'escriptura sul disc a fracassat"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Autres"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Trabalh"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr ""
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr ""
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grops"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nom"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Títol"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Anniversari"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Corrièl"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr ""
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Actiu"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Parteja"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exporta"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mai d'entresenhes"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Adreiças primarias (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descripcion"
diff --cc apps/contacts/l10n/pa/contacts.po
index 459a9a7,0000000..7a1e831
mode 100644,000000..100644
--- a/apps/contacts/l10n/pa/contacts.po
+++ b/apps/contacts/l10n/pa/contacts.po
@@@ -1,1161 -1,0 +1,1161 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
- "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
- "POT-Creation-Date: 2013-10-29 04:34-0400\n"
- "PO-Revision-Date: 2013-10-28 10:42+0000\n"
++"Report-Msgid-Bugs-To: translations at owncloud.org\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pa\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "ਸੰਪਰਕ"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr ""
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
- #: js/app.js:678 js/app.js:1590
++#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
- #: js/app.js:1095
++#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
- #: js/app.js:1234 js/app.js:1238 templates/contacts.php:182
++#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
- #: js/app.js:1260 js/app.js:1313 js/settings.js:120 templates/contacts.php:321
++#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "ਰੱਦ ਕਰੋ"
 +
- #: js/app.js:1287 templates/contacts.php:163
++#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
- #: js/app.js:1291
++#: js/app.js:1300
 +msgid "OK"
 +msgstr "ਠੀਕ ਹੈ"
 +
- #: js/app.js:1391
++#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
- #: js/app.js:1437
++#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
- #: js/app.js:1447
++#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
- #: js/app.js:1548
++#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
- #: js/app.js:1552
++#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
- #: js/contacts.js:858
++#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
- #: js/contacts.js:1055
++#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
- #: js/contacts.js:1127
++#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
- #: js/contacts.js:2163
++#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
- #: js/contacts.js:2174
++#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
- #: js/contacts.js:2183
++#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr ""
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr ""
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr ""
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "ਗਲਤੀ"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "ਡਾਊਨਲੋਡ"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr ""
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "ਹਟਾਓ"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
- #: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:248
++#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "ਅਣਜਾਣ ਗਲਤੀ"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
- #: lib/contact.php:114 lib/contact.php:161
++#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
- #: lib/contact.php:263
++#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
- #: lib/contact.php:274
++#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
- #: lib/contact.php:292
++#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
- #: lib/contact.php:402 lib/contact.php:419
++#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
- #: lib/contact.php:467
++#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
- #: lib/contact.php:475
++#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
- #: lib/contact.php:788
++#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
- #: lib/utils/jsonserializer.php:104 lib/utils/properties.php:155
- #: lib/utils/properties.php:168 lib/utils/properties.php:175
- #: lib/utils/properties.php:190
++#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
++#: lib/utils/properties.php:173 lib/utils/properties.php:180
++#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr ""
 +
- #: lib/utils/jsonserializer.php:107
++#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
- #: lib/utils/properties.php:66
++#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
- #: lib/utils/properties.php:71
++#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
- #: lib/utils/properties.php:76
++#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
- #: lib/utils/properties.php:81
++#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
- #: lib/utils/properties.php:86
++#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
- #: lib/utils/properties.php:91
++#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
- #: lib/utils/properties.php:96
++#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
- #: lib/utils/properties.php:101
++#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
- #: lib/utils/properties.php:106
++#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
- #: lib/utils/properties.php:111
++#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
- #: lib/utils/properties.php:116
++#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
- #: lib/utils/properties.php:121
++#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
- #: lib/utils/properties.php:126
++#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
- #: lib/utils/properties.php:153 lib/utils/properties.php:161
- #: lib/utils/properties.php:172 lib/utils/properties.php:189
++#: lib/utils/properties.php:158 lib/utils/properties.php:166
++#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr ""
 +
- #: lib/utils/properties.php:154 lib/utils/properties.php:159
- #: lib/utils/properties.php:173
++#: lib/utils/properties.php:159 lib/utils/properties.php:164
++#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr ""
 +
- #: lib/utils/properties.php:160
++#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
- #: lib/utils/properties.php:162
++#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr ""
 +
- #: lib/utils/properties.php:163
++#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
- #: lib/utils/properties.php:164
++#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
- #: lib/utils/properties.php:165
++#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
- #: lib/utils/properties.php:166
++#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
- #: lib/utils/properties.php:167
++#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
- #: lib/utils/properties.php:174
++#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
- #: lib/utils/properties.php:187
++#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
- #: lib/utils/properties.php:188
++#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "ਗਰੁੱਪ"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
++#: templates/contacts.php:233 templates/settings.php:59
++msgid "Name"
++msgstr ""
++
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr ""
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr ""
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr ""
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr ""
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr ""
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "ਸਾਂਝਾ ਕਰੋ"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr ""
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr ""
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr ""
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr ""
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
- #: templates/settings.php:59
- msgid "Name"
- msgstr ""
- 
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr ""
diff --cc apps/contacts/l10n/pl/contacts.po
index 5832b29,0000000..ba69085
mode 100644,000000..100644
--- a/apps/contacts/l10n/pl/contacts.po
+++ b/apps/contacts/l10n/pl/contacts.po
@@@ -1,1175 -1,0 +1,1175 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# b13n1u <b13n1u at gmail.com>, 2013
 +# Bartek <bart.p.pl at gmail.com>, 2012
 +# Cyryl Sochacki <cyrylsochacki at gmail.com>, 2012
 +# Cyryl Sochacki <cyrylsochacki at gmail.com>, 2012-2013
 +# czarnystokrotek <czarnystokrotek at mailoo.org>, 2012
 +# orcio6 <orcio6 at o2.pl>, 2013
 +# paszczak000 <paszczak000 at gmail.com>, 2013
 +# Maciej Tarmas <maciej at tarmas.pl>, 2013
 +# Marcin Małecki <gerber at tkdami.net>, 2011-2012
 +# Michal Plichta <mplichta at gmail.com>, 2013
 +# Michal Plichta <mplichta at gmail.com>, 2012
 +# Paweł Ciecierski <pciecierski at gmail.com>, 2012
 +# Piotr Sokół <psokol at jabster.pl>, 2012
 +# urban <urban at fail.pl>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Cyryl Sochacki <cyrylsochacki at gmail.com>\n"
 +"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pl\n"
 +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakty"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Zapisz"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Wgrywanie...."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importowanie..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Przygotowuję..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Zaimportowano {count} z {total} kontaktów"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Zaimportowano {imported} kontaktów. {failed} nieudanych."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Książka adresowa o nazwie {name} już istnieje"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Nieudane dodanie książki: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Nieudane wczytywanie książek adresowych: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indeksuj kontakty"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Nieodwracalny błąd podczas ładowania książek adresowych: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Błąd."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Dodaj do..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Usuń z..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Dodaje grupę...."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Niepoprawny adres: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Wystąpił błąd podczas otwierania edytora."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Niepoprawny email: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Złączenie nieudane. Nie można znaleźć kontaktu: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Złączenie nieudane."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Złączenie nieudane. Błąd zapisu kontaktu."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Wybierz zdjęcie"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Błąd połączenia lub serwera. Skontaktuj sie z administratorem."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Błąd dodania do grupy."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Błąd usunięcia z grupy."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Błąd ustawienia {name} jako ulubione."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Połącz kontakty"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Anuluj"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Dodaj drupę"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Nie można znaleźć kontaktu: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Żadne pliki nie zostały zaznaczone do wysłania."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Plik, który próbujesz wysłać przekracza maksymalny rozmiar pliku przekazywania na tym serwerze."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Edytuj zdjęcie profilu"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Kadruj zdjęcie"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Jest to prawidłowe?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Błąd przetwarzania daty : {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupy"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Błąd przetwarzania urodzin {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Niektóre kontakty są zaznaczone do usunięcia, ale nie są usunięte jeszcze. Proszę czekać na ich usunięcie."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Kliknij aby cofnąć usunięcie {num} kontaktów"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Usunięcie Anulowane {num} kontaktów"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Dodaj"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt jest już w tej grupie."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakty są już w tej grupie."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Nie można pobrać listy kontaktów."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt nie jest w tej grupie."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakty nie sa w tej grupie."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Nie można zmienić nazwy grupy: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Nazwa grupy {group} już istnieje"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Można przeciągnąć grupy do\naby podzielić je jak chcesz."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Nieudane dodanie grupy: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Wszystkie"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Ulubione"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Udostępnione przez {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Nie zgrupowane"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Nieudane wczytanie grup: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Proszę wybrać książkę adresową"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importuj do..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Błąd przy importowaniu szablonu"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "importuj kontakty"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importuj"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import zakończony"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Zamknij"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Błąd"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Nazwa nie może być pusta."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Pokaż link CardDAV"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Pokaż tylko do odczytu łącze VCF"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Pobierz"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Edytuj"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Usuń"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Więcej..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Mniej..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Błąd serwera@ Skontaktuj się z administratorem"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Nieudane wczytanie zdjęcia: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Nie masz uprawnień do podglądania tego kontaktu"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontaktu nie znaleziono"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Nie masz uprawnień do podglądania tych kontaktów"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Nie masz uprawnień do dodawania kontaktów do tej książki adresowej"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Zaplecze dla tej książki nie obsługuje dodawanie kontaktów"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Nie masz uprawnień do usunięcia tego kontaktu"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Zaplecze dla tej książki nie obsługuje usuwania kontaktów"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Nieznany błąd"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Zaplecze dla tej książki nie obsługuje aktualizowania kontaktów"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Nie masz uprawnień do zmiany tej książki adresowej."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Nie masz uprawnień do usunięcia tej książki adresowej."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Nie znaleziono książki adresowej"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Nie masz uprawnień do podglądania tego kontaktu"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Nie masz uprawnień edytowania tego kontaktu."
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Zaplecze dla tego kontaktu nie obsługuje aktualizacji"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Te zaplecze nie obsługuje dodawania kontaktów"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Nie znaleziono właściwości"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Brak parametru komunikator dla:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Nieznany Komunikator"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} Urodzony"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Błąd przy tworzeniu książki adresowej"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Błąd przy edytowaniu książki adresowej"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Nie masz uprawnień do usunięcia \"%s\" książki adresowej."
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Błąd przy usuwaniu książki adresowej"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Błąd przy tworzeniu kontaktu"
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Błąd przy usuwaniu kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Błąd zapisu kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Błąd zapisu kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Błąd usuwania kontaktu z innej książki adresowej."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Nie mogę znaleźć kontaktu."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Błąd złączenia kontaktów"
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Wystąpił błąd podczas zapisywania kontaktu."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Nazwa właściwości nie jest ustawiona"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Właściwości checksum-y nie ustawione."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Błąd uaktualnienia kontaktu"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Błąd pobrania zdjęcia użytkownika"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Żaden plik nie został załadowany. Nieznany błąd"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Nie było błędów, plik wysłano poprawnie."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Załadowany plik przekracza wielkość upload_max_filesize w php.ini "
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Wysłany plik przekracza wielkość dyrektywy MAX_FILE_SIZE określonej w formularzu HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Załadowany plik został wysłany tylko częściowo."
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Nie wysłano żadnego pliku"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Brak folderu tymczasowego"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Nie można wczytać obrazu tymczasowego: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Nie można zapisać obrazu tymczasowego: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Ścieżka do zdjęcia nie została podana."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Plik nie istnieje:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Błąd ładowania obrazu."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Obraz został usunięty z pamięci podręcznej"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Błąd utworzenia obrazu tymczasowego"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Błąd przycinania obrazu"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Błąd zmiany rozmiaru obrazu"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Błąd uzyskiwania właściwości ZDJĘCIA."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Nie nadano nazwy grupy."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Błąd dodania grupy."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Błąd zmiany nazwy grupy."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Brakuje wymaganego ID grupy"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Brakuje wymaganej nazwy grupy"
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Brakuje wymaganego ID kontaktu "
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Błąd zapisu na dysk"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Za mało dostępnego miejsca"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Próba wgrania pliku na czarną listę:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Wystąpił błąd podczas wysyłania kontaktów do magazynu."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Nie masz uprawnień do importu do tej książki adresowej."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Brakuje wymaganej nazwy pliku kontaktu "
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Nie znaleziono kontaktów w:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Kucz nie jest podany."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Wartość nie jest podana."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Nie można ustawić preferencji: "
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Inne"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Strona domowa"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internet połączenie"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GG"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Zawodowe"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Dom"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Komórka"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Połączenie tekstowe"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Połączenie głosowe"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Wiadomość"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faks"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Połączenie wideo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Przyjaciele"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Rodzina"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nowy kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nazwa grupy"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nowa grupa"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Książki adresowe"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Wyświetlana nazwa"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Dodaj książkę adresową"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Wybierz plik..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Odznacz wszystkie"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Kolejność sortowania"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Imię - Nazwisko"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Nazwisko - imię"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupy"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Ulubione"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Połącz zaznaczone"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Skróty klawiatury"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Nawigacja"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Następny kontakt na liście"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Poprzedni kontakt na liście"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Rozwiń/Zwiń bieżącą książkę adresową"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Następna książka adresowa"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Poprzednia książka adresowa"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Akcje"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Odśwież listę kontaktów"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Dodaj nowy kontakt"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Dodaj nowa książkę adresową"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Usuń obecny kontakt"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Dodaj kontakt"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Usuń grupę"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Zmień nazwę grupy"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Usunąć inny(e) po udanym złączeniu?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Tworzenie wiadomości"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Usuń aktualne zdjęcie"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Edytuj aktualne zdjęcie"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Wczytaj nowe zdjęcie"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Wybierz zdjęcie z ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nazwa"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Imię"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Dodatkowe nazwy"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Nazwisko"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Wybierz grupy"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Wybierz książkę adresową"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Nazwa"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Wpisz nazwę"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Tytuł"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Wpisz nazwę"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizacja"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Wpisz organizację"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Urodziny"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notatki kliknij tutaj..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Eksportuj jako VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Dodaj pole..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Komunikator"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adres"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Uwaga"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Strona www"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Usuwa kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferowane"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Określ prawidłowy adres e-mail."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "twójmail at twojadomena.pl"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Mail na adres"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Usuń adres mailowy"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Wpisz numer telefonu"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Usuń numer telefonu"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Idż do strony www"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Usuń URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Zobacz na mapie"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Usuń adres"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Ulica"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Kod pocztowy"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Miasto"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Województwo "
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Kraj"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Komunikator"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Usuń Komunikator"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktywna"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Udostępnij"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Eksportuj"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Link CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "adres do synchronizacji CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "więcej informacji"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Podstawowy adres"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Książki adresowe"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nowa książka adresowa"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Opis"
diff --cc apps/contacts/l10n/pt_BR/contacts.po
index 5ffbcb2,0000000..20994ae
mode 100644,000000..100644
--- a/apps/contacts/l10n/pt_BR/contacts.po
+++ b/apps/contacts/l10n/pt_BR/contacts.po
@@@ -1,1172 -1,0 +1,1172 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# bjamalaro <bjamalaro at yahoo.com.br>, 2013
 +# Flávio Veras <flaviove at gmail.com>, 2013
 +# Schopfer <glauber.guimaraes at poli.ufrj.br>, 2012
 +# Guilherme Maluf Balzana <guimalufb at gmail.com>, 2012
 +# sedir <philippi.sedir at gmail.com>, 2012
 +# Rodrigo Tavares <rodrigost23 at gmail.com>, 2013
 +# sedir <philippi.sedir at gmail.com>, 2013
 +# targinosilveira <targinosilveira at gmail.com>, 2012
 +# Thiago Vicente <thiagovice at gmail.com>, 2012
 +# tuliouel, 2013
 +# Van Der Fran <transifex at vanderland.com>, 2011, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Flávio Veras <flaviove at gmail.com>\n"
 +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pt_BR\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contatos"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Guardar"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Enviando..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importando..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Preparando..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importado {count} de {total} contatos"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importado {imported} contatos. {failed} falhou."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Um livro de endereços chamado {name} já existe"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Falha na adição ao livro de endereços: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Falha no carregamento do livro de endereços: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexando contatos"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Erro irrecuperável carregando o livros de endereços: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Erro."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Adicionar a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Remover de..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Adicionar grupo..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL inválida:\"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Houve um erro ao abrir um editor de correio."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Email inválido:\"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "A mesclagem falhou. Não foi possível encontrar o contato: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "A mesclagem falhou."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "A mesclagem falhou. Erro salvando o contato."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Selecione foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Erro no servidor ou rede. Por favor, informe o administrador."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Erro ao adicionar ao grupo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Erro ao remover do grupo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Erro configurando {name} como favorito."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Mesclar contatos"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancelar"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Adicionar grupo"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Não foi possível encontrar o contato:{id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Nenhum arquivo selecionado para carregar."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "O arquivo que você está tentando carregar excede o tamanho máximo para este servidor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Editar imagem do perfil"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Recortar foto"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Isto está certo?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Erro na data de análise: {data}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupos"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Erro passando data do aniversário {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Alguns contatos foram marcados para remoção, mas não foram removidos ainda. Por favor aguarde a remoção desses contatos."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Clique para desfazer a exclusão de {num} contatos"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Cancelada a eliminação de {num} contatos"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Adicionar"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "O contato já pertence ao grupo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Os contatos já pertencem ao grupo."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Não foi possível obter lista de contatos."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "O contato não está neste grupo."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Os contatos não estão neste grupo."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Falha renomeando grupo:{error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Já existe um grupo com o nome {group}"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Você pode arrastar grupos\npara ordená-los como quiser."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Falha adicionando grupo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Todos"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoritos"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Compartilhado por {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Não agrupado"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Falha carregando grupos:{error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Por favor, selecione uma agenda de endereços"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importando..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Erro carregando a importação de modelo"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importar contatos"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importar"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importação concluída"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Fechar"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Erro"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Nome de exibição não pode ficar em branco."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostrar link CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostrar link VCF somente-leitura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Baixar"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Excluir"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mais..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menos..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Erro no servidor. Por favor, informe o administrador."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Falha carregando foto: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Você não tem permissão para ver este contatos"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contato não encontrado"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Você não tem permissão para ver esses contatos"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Você não tem permissão para adicionar contatos no catálogo de endereços"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "O final deste catálogo de endereços não suporta a adição de contatos"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Você não tem permissão para excluir esse contato"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "O final deste catálogo de endereços não suporta a exclusão de contatos"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Erro desconhecido"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "O final deste catálogo de endereços não suporta a atualização"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Você não tem permissão para atualizar o catálogo de endereços."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Você não tem permissões para excluir o livro de endereços."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Nenhum livro de endereço encontrado"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Você não tem permissão para ver este contato"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Você não tem permissão para atualizar esse contato"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "O final deste contato não suporta atualização"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Este final não suporta adicionar contatos"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Propriedade não encontrada"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Falta parâmetro IM para:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM desconhecido:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Aniversário de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Erro criando livro de endereço"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Erro atualizando o livro de endereço"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Você não tem permissão para excluir o livro de endereços \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Erro excluindo livro de endereço"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Erro criando contato."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Erro excluindo conato."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Erro recuperando contato."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Erro ao salvar contato."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Erro removendo contato de outro livro de endereço."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Não foi possível encontrar o contato."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Não há dados de contato no pedido."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Erro mesclando contato."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Erro salvando contato no final."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Nome da propriedade não está definida."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Verificação de propriedade não está definida."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informações sobre vCard é incorreta. Por favor, recarregue a página."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Erro ao atualizar o contato"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Erro salvando contato no final."
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Erro obtendo a foto do usuário"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Nenhum arquivo foi enviado. Erro desconhecido"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Sem erros, o arquivo foi enviado com sucesso"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "O arquivo enviado excede a diretiva upload_max_filesize em php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "O arquivo carregado excede o argumento MAX_FILE_SIZE especificado no formulário HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "O arquivo foi parcialmente enviado"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Nenhum arquivo enviado"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Pasta temporária não encontrada"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Não foi possível carregar a imagem temporária:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Não foi possível salvar a imagem temporária:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Nenhum caminho para foto foi submetido."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Arquivo não existe:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Erro ao carregar imagem."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Imagem foi removida do cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Erro ao criar imagem temporária"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Erro ao recortar imagem"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Erro ao modificar tamanho da imagem"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Erro ao obter propriedade da FOTO."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Nenhum nome de grupo foi fornecido."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Erro ao adicionar grupo."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Nenhum nome de grupo para renomear foi fornecido."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Nenhum nome de grupo para renomear foi fornecido."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Erro renomeando grupo."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "O ID do grupo requisitado não foi encontrado."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Nome do grupo ausente da requisição."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "O ID do contato requisitado não foi encontrado."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Falha ao escrever no disco"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Espaço de armazenamento insuficiente"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Tente fazer o envio do arquivo de lista negra:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Erro enviando contatos para armazenamento."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Erro ao mover arquivo para a pasta de importações."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Você não tem permissão para importar para este livro de endereços."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Nome do arquivo ausente da requisção."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Chave de progresso faltando no pedido."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Tentando acessar o arquivo de lista negra:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Nenhum contato encontrado em:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Nenhuma chave foi fornecida."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Nenhum valor foi fornecido."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Não foi possível definir preferência:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contato"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Outro"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Página Inicial"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Chamada da Internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Trabalho"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Home"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Móvel"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Texto"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voz"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mensagem"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vídeo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amigos"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Família"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Novo Contato"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Nome do grupo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Novo Grupo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Livros de Endereços"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Nome de exibição"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Adicionar Livro de Endereço"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Selecionar arquivo..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Des)selecionar tudo"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Ordenar"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Nome- Sobrenome"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Sobrenome-, Nome"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupos"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorito"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Mesclar selecionado"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Atalhos do teclado"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navegação"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Próximo contato na lista"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contato anterior na lista"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Expandir/recolher agenda atual"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Próxima agenda"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Agenda anterior"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Ações"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Atualizar lista de contatos"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Adicionar novo contato"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Adicionar nova agenda"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Remover contato atual"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Você não possui contatos na agenda.</h3><p>Adicione um novo contato ou importe contatos existentes de um arquivo VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Adicionar contatos"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Excluir grupo"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Renomear grupo"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Quais os dados de contato que devem ser incorporados?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Eliminar os outros após o sucesso da mesclagem?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Escrever e-mail"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Deletar imagem atual"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editar imagem atual"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Carregar nova foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Selecionar foto do OwnCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nome"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Primeiro nome"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Segundo Nome"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Sobrenome"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Selecionar grupos"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Selecionar livro de endereços"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Apelido"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Digite o apelido"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Título"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Insira o título"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organização"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Insira a organização"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Aniversário"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Observações aqui..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportar como VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Adicionar um campo..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefone"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Mensagem Instantânea"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Endereço"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Web site"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Apagar contato"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferido"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Por favor, especifique um email válido."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "alguem at exemplo.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Correio para endereço"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Remover endereço de email"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Digite um número de telefone"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Remover número de telefone"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ir para web site"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Excluir URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Visualizar no mapa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Excluir endereço"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Endereço da rua"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Código postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Cidade"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Estado ou província"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "País"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Mensageiro Instantâneo"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Delete IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Ativo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Compartilhar"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportar"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Link CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Sincronizando endereços CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mais informações"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Endereço primário (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Agendas de Endereço"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nova agenda"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descrição"
diff --cc apps/contacts/l10n/pt_PT/contacts.po
index f93095c,0000000..69f331b
mode 100644,000000..100644
--- a/apps/contacts/l10n/pt_PT/contacts.po
+++ b/apps/contacts/l10n/pt_PT/contacts.po
@@@ -1,1174 -1,0 +1,1174 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# carlosamp <carlos.am.pereira at hotmail.com>, 2013
 +# Mouxy <daniel at mouxy.net>, 2012-2013
 +# Mouxy <daniel at mouxy.net>, 2013
 +# Duarte Velez Grilo <duartegrilo at gmail.com>, 2013
 +# Duarte Velez Grilo <duartegrilo at gmail.com>, 2012
 +# moura232 <moura232 at gmail.com>, 2013
 +# rlameiro <geral at ricardolameiro.pt>, 2012
 +# Gontxi <goncalo.baiao at gmail.com>, 2013
 +# Helder Meneses <helder.meneses at gmail.com>, 2011
 +# Helder Meneses <helder.meneses at gmail.com>, 2012-2013
 +# amgomesdionisio, 2013
 +# PapiMigas Migas <papimigas at gmail.com>, 2013
 +# rjgpp1994 <rjgpp.1994 at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: PapiMigas Migas <papimigas at gmail.com>\n"
 +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pt_PT\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contactos"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Guardar"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "A enviar..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "A importar..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importado {contagem} de {totais} contactos"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importou {imported} contactos. Falharam {failed}."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "O livro de endereços {name} já existe"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Não foi possível adicionar o livro de endereços: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Não foi possível carregar o livro de endereços: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "A indexar os contactos"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Erro irrecuperável enquanto tentava carregar os livros de endereço: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Erro."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Adicionar a..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Remover de..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Adicionar grupo..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL inválido: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Houve um erro a abrir o editor de e-mail."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Correio eletrónico inválido: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Falhou a junção. Não se encontrou o contacto: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Junção falhou."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Junção falhou. Erro ao guardar contacto."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Selecione uma fotografia"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Erro de rede ou do servidor. Por favor, informe o administrador."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Erro a adicionar ao grupo."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Erro a remover do grupo."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Erro ao marcar {name} como favorito."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Juntar contactos"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Cancelar"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Adicionar grupo"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Não foi possível encontrar o contacto: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Nenhum ficheiro selecionado para enviar."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "O tamanho do ficheiro que está a tentar carregar ultrapassa o limite máximo definido para ficheiros no servidor."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Editar a fotografia de perfil."
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Cortar foto"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Isto está correcto?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupos"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Alguns contactos forma marcados para apagar, mas ainda não foram apagados. Por favor espere que ele sejam apagados."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Clique para desfazer a eliminar de {num} contactos"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Adicionar"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "O contacto já está neste grupo."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Os contactos já estão neste grupo"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Não foi possível ler a lista de contactos"
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "O contacto não está neste grupo"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Os contactos não estão neste grupo"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Erro ao tentar renomear o grupo: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Um grupo com o nome {group} já existe"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Pode arrastar grupos para\ncolocá-los como desejar."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Erro ao adicionar o grupo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Todos"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoritos"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Partilhado por {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Não agrupados"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Erro ao carregar grupos: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Por favor seleccione o livro de endereços"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importar"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Importação terminada"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Fechar"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Erro"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Displayname não pode ser vazio"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Mostrar ligação CardDAV"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Mostrar ligações VCF só de leitura"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Transferir"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editar"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Eliminar"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mais..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menos..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Erro no servidor! Por favor informe o Administrador do Sistema"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Erro ao carregar fotografia: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Não tem permissões para ver este contacto"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Contacto não encontrado"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Não tem permissões para ver estes contactos"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Não tem permissões para adicionar contactos ao livro de endereços"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "O bastidor para este livro de endereços não suporta o adicionar de contactos"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Não tem permissões para apagar este contacto."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "O bastidor para este livro de endereços não suporta o apagar de contactos"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Erro Desconhecido"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "O suporte deste  livro de endereços não suporta atualizações"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Não tem permissões para atualizar este livro de endereços"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Não tem permissões para apagar este livro de endereços."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Nenhum livro de endereços encontrado."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Não tem permissões para ver este contacto"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Não tem permissões para atualizar este contacto"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "O suporte deste contacto não suporta atualizações"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "O suporte não aceita contactos adicionais"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Propriedade não encontrada"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Falta o parâmetro de mensagens instantâneas para:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Mensagens instantâneas desconhecida (IM)"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Aniversário de {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Erro ao criar livro de endereços"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Erro ao atualizar o livro de endereços"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Erro ao apagar o livro de endereços"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Erro a criar contacto."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Erro ao apagar contacto."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Erro a guardar contacto."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Erro a guardar o contacto."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Erro ao remover o contacto do livro de endereços."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Não é possível encontrar o contacto."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Erro ao adicionar detalhes ao contacto."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Erro ao guardar o contacto no suporte."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "O nome da propriedade não está definido,"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "A informação sobre o vCard está incorreta. Por favor recarregue a página"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Erro ao actualizar o contacto"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Nenhum ficheiro foi carregado. Erro desconhecido"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Não ocorreram erros, o ficheiro foi submetido com sucesso"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "O ficheiro enviado excede a directiva upload_max_filesize no php. ini\n "
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "O tamanho do ficheiro carregado ultrapassa o valor MAX_FILE_SIZE definido no formulário HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "O ficheiro selecionado  foi apenas carregado parcialmente"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Nenhum ficheiro foi submetido"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Está a faltar a pasta temporária"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Não é possível carregar a imagem temporária: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Não foi possível guardar a imagem temporária: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Nenhum caminho da foto definido."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Ficheiro não existe:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Erro a carregar a imagem."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Erro a criar a imagem temporária"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Erro a recorar a imagem"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Erro a redimensionar a imagem"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Erro a obter a propriedade Foto"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Grupo sem nome."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Erro a adicionar o grupo"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Não foi dado um novo nome ao grupo recebido."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Não foi dado um novo nome ao grupo dado."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Erro ao renomear grupo."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Falta o ID do grupo no pedido"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Nome de grupo em falta."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Falta o ID do contacto no pedido"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Falhou a escrita no disco"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Não há espaço suficiente em disco"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Erro a carregar os contactos para o armazenamento."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Nenhum contacto encontrado em:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Não foi possível definir as preferências :"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contacto"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Outro"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Página Inicial"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Emprego"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Casa"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Telemóvel"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Texto"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voz"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mensagem"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Vídeo"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Amigos"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familia"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Novo Contacto"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Grupo"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Novo Grupo"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Livro de endereços"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Mostrar nome"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Adicionar Livro de Endereços"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Seleccionar ficheiro..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Des)seleccionar todos"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupos"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorito"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Atalhos de teclado"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navegação"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Próximo contacto na lista"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contacto anterior na lista"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Expandir/encolher o livro de endereços atual"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Próximo livro de endereços"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Livro de endereços anterior"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Ações"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Recarregar lista de contactos"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Adicionar novo contacto"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Adicionar novo Livro de endereços"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Apagar o contacto atual"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Adicionar contacto"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Eliminar grupo"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Escrever e-mail."
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Eliminar a foto actual"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editar a foto actual"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Carregar nova foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Selecionar uma foto da ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nome"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Primeiro Nome"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Nomes adicionais"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Ultimo Nome"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Seleccionar grupos"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Alcunha"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Introduza alcunha"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Título "
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Introduza o título"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organização"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Aniversário"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "As notas ficam aqui:"
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportar como VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefone"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Mensagens Instantâneas"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Endereço"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Nota"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Página web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Apagar contacto"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferido"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Por favor indique um endereço de correio válido"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "alguem at exemplo.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Enviar correio para o endereço"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Eliminar o endereço de correio"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Insira o número de telefone"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Eliminar o número de telefone"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Ir para página web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Eliminar Endereço (URL)"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Ver no mapa"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Eliminar endereço"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Endereço da Rua"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Código Postal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Cidade"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "EUA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "País"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Mensageiro instantâneo"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Apagar mensageiro instantâneo (IM)"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Activo"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Partilhar"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportar"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV a sincronizar endereços"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mais informação"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Endereço principal (Kontact et al.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Livros de endereços"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Novo livro de endereços"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descrição"
diff --cc apps/contacts/l10n/ro/contacts.po
index bc610da,0000000..184aa68
mode 100644,000000..100644
--- a/apps/contacts/l10n/ro/contacts.po
+++ b/apps/contacts/l10n/ro/contacts.po
@@@ -1,1166 -1,0 +1,1166 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Claudiu, 2011, 2012
 +# Dimon Pockemon <>, 2012
 +# Eugen Mihalache <eugemjj at gmail.com>, 2012
 +# g.ciprian <g.ciprian at osn.ro>, 2012
 +# inaina <ina.c.ina at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ro\n"
 +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Contacte"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Salvează"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Încărcare"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "a importa"
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "contactele importate . esuat."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "numele exista deja in agenda"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "adaugarea agendei a esuat"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "adaugarea agendei a esuat.eroare"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "indexarea contactelor"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "agenda este irecuperabila.mesaj"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "eroare"
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "adaugat in..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "eliminat din..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "adaoga grup"
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "URL invalid.localizator uniform de resurse"
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "s-a inregistrat o eroare in deschiderea adresei"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "email invalid"
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Anulare"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Adaugă"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importă"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Închide"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Eroare"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Arată legătură CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Descarcă"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Editează"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Șterge"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mai multe..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Ziua de naștere a {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "eroare in salvarea contactului"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informațiile cărții de vizită sunt incorecte. Te rog reîncarcă pagina."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Nici un fișier nu a fost încărcat. Eroare necunoscută"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Nu a apărut nici o eroare, fișierul a fost încărcat cu succes"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Fișierul are o dimensiune mai mare decât cea specificată în variabila upload_max_filesize din php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Fișierul are o dimensiune mai mare decât variabile MAX_FILE_SIZE specificată în formularul HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Fișierul a fost încărcat doar parțial"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Nu a fost încărcat nici un fișier"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Lipsește un director temporar"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "nu se poate incarca imaginea temporara"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Nu s-a putut salva imaginea temporară"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Nici o adresă către fotografie nu a fost transmisă"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Fișierul nu există:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Eroare la încărcarea imaginii."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "eroare la alegerea imaginii temporare"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "eroare la alegerea imaginii"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "eroare la redimensionarea imaginii"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "eroare in gasirea proprietatilor fotografiei"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Eroare la scriere pe disc"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nu este suficient spațiu disponibil"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Eroare la "
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "nu se pot seta preferinte"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Contact"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Altele"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Servicu"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Acasă"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Voce"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Mesaj"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupuri"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Scurtături din tastatură"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigare"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Următorul contact din listă"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Contactul anterior din listă"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Acțiuni"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Adaugă contact nou"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Șterge contactul curent"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Adaugă contact"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Șterge poza curentă"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Editează poza curentă"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Încarcă poză nouă"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Selectează poză din ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Nume"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Pseudonim"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Introdu pseudonim"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Titlu"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizație"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Zi de naștere"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresă"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notă"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Site web"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Șterge contact"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Preferat"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Te rog să specifici un e-mail corect"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Trimite mesaj la e-mail"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Șterge e-mail"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Specifică numărul de telefon"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Șterge numărul de telefon"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Vizitează site-ul"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Vezi pe hartă"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Adresa"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Codul poștal"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Oraș"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Țară"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Activ"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Partajează"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportă"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mai multe informații"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Adresa primară (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Agende"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Agendă nouă"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Descriere"
diff --cc apps/contacts/l10n/ru/contacts.po
index 2d32052,0000000..7094844
mode 100644,000000..100644
--- a/apps/contacts/l10n/ru/contacts.po
+++ b/apps/contacts/l10n/ru/contacts.po
@@@ -1,1185 -1,0 +1,1185 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Alexander Savchenko <>, 2013
 +# Alexander Shashkevych <alex at stunpix.com>, 2013
 +# Denis <reg.transifex.net at demitel.ru>, 2012
 +# Dmitry <linuxsquirrel.dev at gmail.com>, 2013
 +# ideamk <ideamk at gmail.com>, 2012
 +# jekader <jekader at gmail.com>, 2013
 +# jekader <jekader at gmail.com>, 2012
 +# Yaroslav Petrov <lankme at gmail.com>, 2012
 +# Mihail Vasiliev <mickvav at gmail.com>, 2012
 +# mPolr <mpolr21 at gmail.com>, 2012
 +# Nick Homolibere <homolibere at gmail.com>, 2012
 +# sam002 <semen at sam002.net>, 2012
 +# eurekafag <rkfg at rkfg.me>, 2013
 +# eurekafag <rkfg at rkfg.me>, 2013
 +# m4rkell <sergey at markevich.ru>, 2013
 +# adol <sharov3 at gmail.com>, 2013
 +# skoptev <skoptev at ukr.net>, 2012
 +# tonymc <tony.mccourin at gmail.com>, 2011
 +# Victor Bravo <>, 2012
 +# VicDeo <victor.dubiniuk at gmail.com>, 2012
 +# not_your_conscience <hex.void at gmail.com>, 2013
 +# navigator666 <yuriy.malyovaniy at gmail.com>, 2013
 +# Vyacheslav Muranov <s at neola.ru>, 2013
 +# Langaru <langaru at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:40+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: not_your_conscience <hex.void at gmail.com>\n"
 +"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ru\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"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Контакты"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Сохранить"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Загрузка..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Импортирую..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Готовимся..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Импортировано {count} из {total} контактов"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Импортировано {imported} контактов. {failed} неудачно."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Адресная книга {name} уже существует"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Не удалось добавить адресную книгу: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Ошибка загрузки адресных книг: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Индексация контактов"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Невосстановимая ошибка загрузки адресных книг: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Ошибка."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Добавить в..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Удалить из..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Добавить группу..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Неверный URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Произошла ошибка при открытии почтовой программы."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Неправильная электронная почта: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Объединение не удалось. Не найден контакт: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Объединение не удалось."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Объединение не удалось. Ошибка сохранения контакта."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Выберите фото"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Ошибка сети или сервера. Пожалуйста, сообщите администратору."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Ошибка добавления в группу."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Ошибка удаления из группы."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Ошибка установки {name} избранным."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Объединить контакты"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Отменить"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Добавить группу"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "ОК"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Не удалось найти контакт: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Нет выбранных файлов для загрузки."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Файл, который вы пытаетесь загрузить превышать максимальный размер загружаемых файлов на этом сервере."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Редактировать изображение профиля"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Обрезать фото"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Это верно?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Ошибка формата даты: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# группы"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Ошибка добавления дня рождения {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Некоторые контакты помечены на удаление, но ещё не удалены. Подождите, пока они удаляются."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Нажмите для отмены удаления {num} контактов"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Отмена удаления {num} контактов"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Добавить"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Контакт уже находятся в этой группе."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Контакты уже находятся в этой группе."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Не удалось получить список контактов."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Контакт не в этой группе."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Контакты не в этой группе."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Ошибка переименования группы: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Группа с названием {group} уже существует"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Вы можете перетаскивать группы\nчтобы расставить их как Вам нравится."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Ошибка добавления группы: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Все"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Избранное"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Доступ открыл {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Без группы"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Ошибка загрузки групп: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Выберите адресную книгу"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Импорт в..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Ошибка загрузки шаблона импорта"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Импортировать контакты"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Импорт"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Импорт завершен"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Закрыть"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Ошибка"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Отображаемое имя не может быть пустым."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Показать ссылку CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Показать нередактируемую ссылку VCF"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Скачать"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Редактировать"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Удалить"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Ещё..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Меньше..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Ошибка сервера! Пожалуйста, уведомите об этом системного администратора"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Ошибка загрузки фото: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "У Вас нет разрешений просматривать этот контакт."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Контакт не найден"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "У Вас нет разрешений просматривать эти контакты"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "У Вас нет разрешений добавлять контакты в эту адресную книгу."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Реализация этой адресной книги не поддерживает добавление контактов."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "У Вас нет разрешений удалять этот контакт."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Реализация этой адресной книги не поддерживает удаление контактов."
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Неизвестная ошибка"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Реализация этой адресной книги не поддерживает обновление"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "У Вас нет разрешений обновлять эту адресную книгу."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "У Вас нет разрешений удалять эту адресную книгу."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Адресная книга не найдена"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "У Вас нет разрешений просматривать этот контакт"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "У Вас нет разрешений обновлять этот контакт"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Реализация этого контакта не поддерживает обновления"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Реализация не поддерживает добавление контактов"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Свойство не найдено"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Отсутствует параметр IM для:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Неизвестный IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "День рождения {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Ошибка создания адресной книги"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Ошибка обновления адресной книги"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "У вас нет прав удалять адресную книгу \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Ошибка удаления адресной книги"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Ошибка создания контакта."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Ошибка удаления контакта."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Ошибка получения контакта."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Ошибка при сохранении контактов."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Ошибка удаления контакта из другой адресной книги."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Не удалось найти контакт."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Контактные данные в запросе отсутствуют."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Ошибка объединения в контакт."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Ошибка сохранения контакта в бэкенд."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Не установлено имя свойства."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Не установлена контрольная сумма свойства."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Информация о vCard некорректна. Пожалуйста, обновите страницу."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Ошибка при обновлении контакта"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Ошибка сохранения контакта в бэкенд"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Ошибка загрузки фото пользователя"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Файл не был загружен. Неизвестная ошибка"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Файл загружен успешно."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Загружаемый файл первосходит значение переменной upload_max_filesize, установленно в php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Загружаемый файл превосходит значение переменной MAX_FILE_SIZE, указанной в форме HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Файл загружен частично"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Файл не был загружен"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Отсутствует временная папка"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Не удалось загрузить временное изображение:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Не удалось сохранить временное изображение:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Нет фото по адресу."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Файл не существует:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Ошибка загрузки картинки."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Изображение удалено из кеша"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Ошибка создания временных изображений"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Ошибка обрезки изображений"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Ошибка изменения размера изображений"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Ошибка при получении ФОТО."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Не задано имя группы."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Ошибка добавления группы."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Не указано имя группы для переименования из выбранного."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Не указано имя группы для переименования в выбранное."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Ошибка переименования группы."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "В запросе отсутствует ID группы."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Имя группы отсутствует в запросе."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "ID контакта из запроса отсутствует."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Ошибка записи на диск"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Недостаточно доступного места в хранилище"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Попытка загрузки файла черного списка:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Ошибка загрузки контактов в хранилище."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Ошибка перемещения файла в папку импорта"
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "У Вас нет разрешений импортировать в эту адресную книгу."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Имя файла из запроса отсутствует."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Ключ прогреса из запроса отсутствует."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Попытка доступа к файлу черного списка:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Не найдено ни одного контакта:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Не задан ключ."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Не задано значение."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Не удалось установить предпочтение:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Контакт"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Другое"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Домашняя страница"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Интернет вызов"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Рабочий"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Домашний"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Мобильный"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Текст"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Голос"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Сообщение"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Факс"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Видео"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Пейджер"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Интернет"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Друзья"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Семья"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Новый контакт"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Имя группы"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Новая группа"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Адресная книга"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Отобразить имя"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Добавить адресную книгу"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Выбрать файл..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Отменить) отметить все"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Порядок сортировки"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Имя Фамилия"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Имя, Фамилия"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Группы"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Избранное"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Объединить выбранное"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Горячие клавиши"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Навигация"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Следующий контакт в списке"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Предыдущий контакт в списке"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Развернуть/свернуть текущую адресную книгу"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Следующая адресная книга"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Предыдущая адресная книга"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Действия"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Обновить список контактов"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Добавить новый контакт"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Добавить новую адресную книгу"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Удалить текущий контакт"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>В вашей адресной книге нет контактов, либо ваша адресная книга отключена.</h3><p>Добавьте новый контакт или импортируйте контакты из файла VCF.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Добавить контакт"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Удалить группу"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Переименовать группу"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "В какой контакт следует объединить данные?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Удалить другой(ие) после успешного объединения?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Написать письмо"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Удалить текущую фотографию"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Редактировать текущую фотографию"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Загрузить новую фотографию"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Выбрать фотографию из ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Имя"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Имя"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Отчество"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Фамилия"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Выбрать группы"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Выбрать адресную книгу"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Псевдоним"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Введите псевдоним"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Заголовок"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Введите название"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Организация"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Введите организацию"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "День рождения"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Здесь будут заметки..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Экспорт в VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Добавить поле..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Телефон"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-mail"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Быстрые сообщения"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Адрес"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Заметка"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Веб-сайт"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Удалить контакт"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Предпочитаемый"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Укажите правильный адрес электронной почты."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Написать по адресу"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Удалить адрес электронной почты"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Введите номер телефона"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Удалить номер телефона"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Перейти на веб-сайт"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Удалить URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Показать на карте"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Удалить адрес"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Пенсильвания авеню, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Улица"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Почтовый индекс"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Киев, Украина"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Город"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "Округ Колумбия"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Область или район"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "США"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Страна"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Удалить IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Активно"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Открыть доступ"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Экспорт"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Ссылка CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Синхронизация адресов CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "подробнее"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Основной адрес (Kontact и др.)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Адресные книги"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Новая адресная книга"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Описание"
diff --cc apps/contacts/l10n/ru_RU/contacts.po
index 1980e77,0000000..18e42ca
mode 100644,000000..100644
--- a/apps/contacts/l10n/ru_RU/contacts.po
+++ b/apps/contacts/l10n/ru_RU/contacts.po
@@@ -1,1163 -1,0 +1,1163 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# AnnaSch <cdewqazxsqwe at gmail.com>, 2013
 +# AnnaSch <cdewqazxsqwe at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:10+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: masensio <masensio at solidgear.es>\n"
 +"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ru_RU\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"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Контакты"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Сохранить"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Отмена"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr ""
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr ""
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr ""
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Ошибка"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Загрузка"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr ""
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr ""
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr ""
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr ""
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr ""
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr ""
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr ""
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Выбрать группы"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr ""
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr ""
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr ""
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr ""
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr ""
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Сделать общим"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr ""
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr ""
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr ""
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr ""
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr ""
diff --cc apps/contacts/l10n/si_LK/contacts.po
index 9307df7,0000000..65b1dc4
mode 100644,000000..100644
--- a/apps/contacts/l10n/si_LK/contacts.po
+++ b/apps/contacts/l10n/si_LK/contacts.po
@@@ -1,1164 -1,0 +1,1164 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Anushke Guneratne <anushke at gmail.com>, 2012
 +# Chamara Disanayake <chamara at nic.lk>, 2012
 +# Thanoja <thanojar at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: si_LK\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "සබඳතා"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "සුරකින්න"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "උඩුගත කෙරේ..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "ආයාත කරමින් පවති..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "එපා"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "හරි"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "උඩුගත කිරීමට ගොනු තෝරා නැත"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "ඔබ උඩුගත කිරීමට තැත් කරන ගොනුව, සේවාදායකයාට උඩුගත කළ හැකි උපරිම ගොනු විශාලත්වයට වඩා වැඩිය"
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "සමහර සම්බන්ධතා මකන ලෙස ලකුණු කොට ඇත. කරුණාකර ඒවා මැකෙන තෙක් සිටින්න"
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "එකතු කරන්න"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "කරුණාකර ලිපින පොත තෝරන්න"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "ආයාත කරන්න"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "ආයාත කිරීම අවසන්"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "වසන්න"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "දෝෂයක්"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "පෙන්වන නම හිස්ව තිබිය නොහැක"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "බාන්න"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "සකසන්න"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "මකා දමන්න"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "තවත්..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "අඩුවෙන්..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}ගේ උපන්දිනය"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "සම්බන්ධතාව සුරැකිමේදී දෝෂයක්"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCard පිළිබඳ තොරතුරු අසත්‍යයි. කරුණාකර පිටුව නැවත බාගත කරන්න."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "ගොනුවක් උඩුගත නොවුනි. නොහැඳිනු දෝෂයක්"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "දෝෂයක් නොමැත. සාර්ථකව ගොනුව උඩුගත කෙරුණි"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "php.ini හි upload_max_filesize නියමයට වඩා ගොනුව විශාලය"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "උඩුගත කළ ගොනුවේ විශාලත්වය HTML පෝරමයේ නියම කළ ඇති MAX_FILE_SIZE විශාලත්වයට වඩා වැඩිය"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "උඩුගත කළ ගොනුවේ කොටසක් පමණක් උඩුගත විය"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "ගොනුවක් උඩුගත නොවුණි"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "තාවකාලික ෆොල්ඩරයක් අතුරුදහන්"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "තාවකාලික රූපය සුරැකීමට නොහැකි විය"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "ගොනුව නොපවතී"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "රූපය පූරණය දෝෂ සහිතයි."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "තාවකාලික ඡායාරූපයක් තැනීමේ දෝෂයක්"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "තැටිගත කිරීම අසාර්ථකයි"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "ගබඩාවට පුද්ගල විස්තර උඩුගත කිරීමේ දෝෂයක්"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "සබඳතාව"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "වෙනත්"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "කාර්යය"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "නිවස"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "ජංගම"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "පෙළ"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "හඬ"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "පණිවිඩය"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "ෆැක්ස්"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "වීඩියෝව"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "පේජරය"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "අන්තර්ජාලය"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "කණ්ඩායම්"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "මෙයට පසු ලිපින පොත"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "මෙයට පෙර ලිපින පොත"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "සම්බන්ධතාවක් එකතු කරන්න"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "වර්තමාන ඡායාරූපය මකන්න"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "වර්තමාන ඡායාරූපය සංස්කරණය කරන්න"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "නව ඡායාරූපයක් උඩුගත කරන්න"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "නම"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "වෙනත් නම්"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "පටබැඳි නම"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "පටබැඳි නම ඇතුලත් කරන්න"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "මාතෘකාව"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "ආයතනය"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "උපන් දිනය"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "දුරකථන"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "විද්‍යුත් තැපෑල"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "ලිපිනය"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "නෝට්ටුවක්"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "වෙබ් අඩවිය"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "සබඳතාව මකන්න"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "රුචි"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "වලංගු විද්‍යුත් තැපැල් ලිපිනයක් ලබා දෙන්න"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "තැපැල් එවිය යුතු ලිපිනය"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "විද්‍යුත් තැපැල් ලිපිනය මකන්න"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "දුරකථන අංකයක් දෙන්න"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "දුරකථන අංකය මකන්න"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "වෙබ් අඩවියට යන්න"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "සිතියමේ පෙන්වන්න"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "නගරය"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "රට"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "සක්‍රීය"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "බෙදා හදා ගන්න"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "නිර්යාත කරන්න"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "තව විස්තර"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "ප්‍රාථමික ලිපිනය(හැම විටම සම්බන්ධ කරගත හැක)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "ලිපින පොත්"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "නව ලිපින පොතක් "
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "විස්තරය"
diff --cc apps/contacts/l10n/sk_SK/contacts.po
index f913b21,0000000..37a403f
mode 100644,000000..100644
--- a/apps/contacts/l10n/sk_SK/contacts.po
+++ b/apps/contacts/l10n/sk_SK/contacts.po
@@@ -1,1169 -1,0 +1,1169 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# intense <intense.feel at gmail.com>, 2012
 +# Lubbzor <l.grejtak at gmail.com>, 2013
 +# mhh <marian.hvolka at stuba.sk>, 2013
 +# martinb <martin.babik at gmail.com>, 2012
 +# Roman Priesol <roman at priesol.net>, 2012
 +# martin, 2013
 +# martin, 2012-2013
 +# zixo <zixo at zixo.sk>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: mhh <marian.hvolka at stuba.sk>\n"
 +"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sk_SK\n"
 +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakty"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Uložiť"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Nahrávam..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importujem..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Pripravujem..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Naimportovaných {count} z celkovo {total} kontaktov"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Naimportovaných {imported} kontaktov. {failed} zlyhalo."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Adresár s názvom {name} už existuje"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Pridanie adresára zlyhalo: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Načítanie adresára zlyhalo: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexovanie kontaktov"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Neodstrániteľná chyba pri načítaní adresára: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Chyba."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Pridať do..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Odstrániť z..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Pridať skupinu..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Chybná URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Vyskytla sa chyba pri otváraní nástroja na tvorbu pošty."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Chybný email: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Zlúčenie zlyhalo. Nemožno nájsť kontakt: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Zlúčenie zlyhalo."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Zlúčenie zlyhalo. Chyba pri ukladaní kontaktu."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Vybrať fotku"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Chyba sieťe alebo servra. Informujte prosím administrátora."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Chyba pri pridávaní do skupiny."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Chyba pri odstraňovaní zo skupiny."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Chyba pri nastavení {name} medzi obľúbené."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Zlúčiť kontakty"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Zrušiť"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Pridať skupinu"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Nemožno nájsť kontakt: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Žiadne súbory neboli vybrané k nahratiu"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Súbor, ktorý sa pokúšate nahrať, presahuje maximálnu povolenú veľkosť."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Upraviť profilový avatar"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Orezať fotku"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Je to správne?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Chyba pri parsovaní dátumu: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# skupiny"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Chyba parsovania narodenín {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Počkajte prosím do skončenia mazania kontaktov označených na mazanie."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Kliknite pre odvrátenie operácie zmazania {num} kontaktov."
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Zrušené vymazanie {num} kontaktov"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Pridať"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakt sa už nachádza v danej skupine."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakty sa už nachádzajú v danej skupine."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Nemožno získať kontaktný list."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakt nie je v danej skupine."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakty nie sú v danej skupine."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Chyba pri premenovávaní skupiny: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Skupina pomenovaná ako {group} už existuje."
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Môžete presúvať skupiny pre\njednoduché zoradenie podľa vašich potrieb."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Pridanie skupiny sa nepodarilo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Všetky"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Obľúbené"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Zdieľa {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Bez skupiny"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Načítanie skupín sa nepodarilo: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Prosím zvolte adresár"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Import z..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Chyba pri nahrávaní šablóny importu"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importovať kontakty"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Import"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import ukončený"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Zavrieť"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Chyba"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Zobrazované meno nemôže byť prázdne"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Zobraz odkaz pre CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Zobraz VCF odkaz len na čítanie"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Sťahovanie"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Upraviť"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Zmazať"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Viac..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Menej..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Chyba servera! Informujte vášho administrátora"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Načítanie fotografie sa nepodarilo: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Nemáte oprávnenie na prezeranie týchto kontaktov"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakt nenájdený"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Nemáte oprávnenie na prezeranie týchto kontaktov"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Nemáte oprávnenie na pridávanie kontaktov do adresára"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Úložisko tohto adresára nepodporuje pridávanie kontaktov"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Nemáte oprávnenie na vymazanie tohto kontaktu"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Úložisko tohto adresára nepodporuje vymazanie kontaktov"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Neznáma chyba"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Úložisko tohto adresára nepodporuje jeho aktualizáciu"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Nemáte oprávnenie na aktualizáciu tohto adresára."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Nemáte oprávnenie na vymazanie tohto adresára."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adresár nenájdený"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Nemáte oprávnenie na zobrazenie tohto kontaktu"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Nemáte oprávnenie na aktualizáciu tohto kontaktu"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Úložisko tohto kontaktu nepodporuje jeho aktualizáciu"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Toto úložisko nepodporuje pridávanie kontaktov"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Vlastnosť nenájdená"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr " Chýba IM parameter pre: "
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Neznáme IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Narodeniny {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Chyba pri vytváraní adresára"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Chyba pri aktualizácii adresára"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Nemáte oprávnenie pre zmazanie zoznamu kontaktov \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Chyba pri vymazávaní adresára"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Chyba pri vytváraní kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Chyba pri vymazávaní kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Chyba pri otváraní kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Chyba počas ukladania kontaktu."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Chyba pri vymazávaní kontaktu z iného adresára."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kontakt sa nenašiel."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Neobsahuje požadované kontaktné údaje."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Chyba pri zlučovaní do kontaktu."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Chyba pri ukladaní kontaktu do úložiska."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Údaj Meno nie je nastavené."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Údaj Kontrolný súčet nie je nastavený."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Informácie o vCard sú neplatné. Prosím obnovte stránku."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Chyba pri ukladaní zmien kontaktu"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Chyba pri zápise kontaktu do úložiska"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Chyba pri získavaní používateľovej fotky"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Žiaden súbor nebol odoslaný. Neznáma chyba"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Nenastala žiadna chyba, súbor bol úspešne nahraný"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Nahrávaný súbor prekračuje nastavenie upload_max_filesize v php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Nahrávaný súbor prekračuje nastavenie MAX_FILE_SIZE z volieb HTML formulára"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Nahrávaný súbor sa nahral len čiastočne"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Žiadny súbor nebol nahraný"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Chýba dočasný priečinok"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Nemôžem načítať dočasný obrázok: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Nemôžem uložiť dočasný obrázok: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Žiadna fotka nebola odoslaná."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Súbor neexistuje:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Chyba pri načítaní obrázka."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Obrázok bol odstránený z medzipamäte"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Chyba počas vytvárania dočasného obrázka."
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Chyba počas orezávania obrázka."
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Chyba počas zmeny veľkosti obrázka."
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Chyba počas získavania vlastností fotky."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Názov skupiny nie je zadaný."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Chyba vytvárania danej skupiny."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Názov skupiny na premenovanie nie je zadaný."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Nový názov skupiny nie je zadaný."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Chyba pri premenovávaní skupiny."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Chýbajúce skupinové ID pri požiadavke."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "V požiadavke chýba názov skupiny."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Chýbajúce kontaktné ID pri požiadavke."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Zápis na disk sa nepodaril"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Nedostatok dostupného úložného priestoru"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Pokus o nahratie zakázaného súboru:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Chyba pri nahrávaní kontaktov do úložiska."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Chyba pri presune súboru do priečinka importov"
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Nemáte oprávnenie na import do tohto adresára."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "V požiadavke chýba názov súboru."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "V požiadavke chýba položka priebehu."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Pokus o prístup k zakázanému súboru:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Žiadne kontakty v:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Kľúč nie je zadaný."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Hodnota nie je zadaná."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Nemožno nastaviť voľbu:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Iné"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Domovská stránka"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Volanie cez internet"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Práca"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Domov"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Odkazová schránka"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Správa"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pager"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Priatelia"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Rodina"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nový kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Názov skupiny"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nová skupina"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adresár"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Zobrazované meno"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Pridať adresár"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Vybrať súbor..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Ne-)vybrať všetky"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Zoradiť podľa"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Meno - Priezvisko"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Priezvisko - Meno"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Skupiny"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Obľúbené"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Zlúčiť vybrané"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Klávesové skratky"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigácia"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Ďalší kontakt v zozname"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Predchádzajúci kontakt v zozname"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Roztiahnuť/stiahnuť aktuálny adresár"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Ďalší adresár"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Predošlý adresár"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Akcie"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Obnov zoznam kontaktov"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Pridaj nový kontakt"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Pridaj nový adresár"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Vymaž súčasný kontakt"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Váš adresár je buď vypnutý, alebo prázdny.</h3><p>Vložte nový kontakt, alebo ho naimportujete z VCF súboru.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Pridať kontakt"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Odstrániť skupinu"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Premenovať skupinu"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Do ktorého kontaktu sa majú údaje zlúčiť?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Zmazať ostatné po úspešnom zlúčení?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Napísať poštu"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Odstrániť súčasnú fotku"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Upraviť súčasnú fotku"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Nahrať novú fotku"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Vybrať fotku z ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Názov"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Krstné meno"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Ďalšie mená"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Priezvisko"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Vybrať skupinu"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Vybrať adresár"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Prezývka"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Zadajte prezývku"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Názov"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Vložiť názov"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizácia"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Vložiť organizáciu"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Narodeniny"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Poznámky idú sem..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Export ako VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Vložiť pole..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefón"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Okamžité správy IM"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adresa"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Poznámka"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Web stránka"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Odstrániť kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Uprednostňované"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Prosím zadajte platnú e-mailovú adresu."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "niekto at niečo.sk"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Odoslať na adresu"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Odstrániť e-mailové adresy"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Zadajte telefónne číslo"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Odstrániť telefónne číslo"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Navštíviť web"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Odstrániť URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Zobraziť na mape"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Odstrániť adresu"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Ulica"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "PSČ"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Mesto"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Štát alebo oblasť"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Krajina"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Okamžité správy IM"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Zmazať IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktívny"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Zdieľať"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Export"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV linka"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Adresy pre synchronizáciu s CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "viac informácií"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primárna adresa"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adresáre"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nový adresár"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Popis"
diff --cc apps/contacts/l10n/sl.php
index 59c964c,0000000..2944085
mode 100644,000000..100644
--- a/apps/contacts/l10n/sl.php
+++ b/apps/contacts/l10n/sl.php
@@@ -1,231 -1,0 +1,259 @@@
 +<?php $TRANSLATIONS = array(
 +"Contacts" => "Stiki",
 +"Save" => "Shrani",
 +"Uploading..." => "Poteka pošiljanje ...",
 +"Importing..." => "Uvažanje ...",
++"Preparing..." => "Poteka pripravljanje ...",
 +"Imported {count} of {total} contacts" => "Uvoženih je bilo {count} od skupno {total} stikov",
 +"An address book called {name} already exists" => "Imenik z imenom {name} že obstaja",
 +"Failed adding address book: {error}" => "Dodajanje imenika je spodletelo: {error}",
 +"Failed loading address books: {error}" => "Nalaganje imenikov je spodletelo: {error}",
 +"Indexing contacts" => "Ustvarjanje kazala stikov",
 +"Unrecoverable error loading address books: {msg}" => "Prišlo je do nepopravljive napake pri nalaganju imenikov: {msg}",
 +"Error." => "Napaka",
 +"Add to..." => "Dodaj v ...",
 +"Remove from..." => "Odstrani iz ...",
 +"Add group..." => "Dodaj skupino ...",
 +"Invalid URL: \"{url}\"" => "Neveljaven internetni naslov: \"{url}\"",
 +"There was an error opening a mail composer." => "Med odpiranjem sestavljalnika pošte je prišlo do napake.",
 +"Invalid email: \"{url}\"" => "Neveljaven elektronski naslov: \"{url}\"",
 +"Merge failed. Cannot find contact: {id}" => "Spajanje ni uspelo. Stika ni bilo mogoče najti: {id}",
 +"Merge failed." => "Spajanje je spodletelo.",
 +"Merge failed. Error saving contact." => "Spajanje je spodletelo. Stik ni bil shranjen.",
 +"Select photo" => "Izbor slike",
 +"Network or server error. Please inform administrator." => "Napaka omrežja ali strežnika. Prosimo, če o tem obvestite administratorja.",
 +"Error adding to group." => "Napaka pri dodajanju v skupino.",
 +"Error removing from group." => "Napaka pri odstranjevanju iz skupine.",
 +"Error setting {name} as favorite." => "Napaka pri nastavitvi  {name} kot priljubljenega.",
 +"Merge contacts" => "Spoji stike",
 +"Cancel" => "Prekliči",
 +"Add group" => "Dodaj skupino",
 +"OK" => "V redu",
 +"Could not find contact: {id}" => "Stika ni bilo mogoče najti: {id}",
 +"No files selected for upload." => "Ni izbrane datoteke za nalaganje.",
 +"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteka, ki jo poskušate naložiti, presega največjo dovoljeno velikost za pošiljanje na tem strežniku.",
 +"Edit profile picture" => "Uredi fotografijo profila",
++"Crop photo" => "Obreži sliko",
 +"Is this correct?" => "Ali je to pravilno?",
++"Error parsing date: {date}" => "Napaka razčlenjevanja datuma: {date}",
 +"# groups" => "# skupine",
++"Error parsing birthday {bday}: {error}" => "Napaka razčlenjevanja datuma rojstva {bday}: {error}",
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Nekateri stiki so označeni za izbris, vendar še niso izbrisani. Počakajte na izbris.",
 +"Click to undo deletion of {num} contacts" => "Klikni za preklic izbrisa {num} stikov",
 +"Add" => "Dodaj",
 +"Contact is already in this group." => "Stik je že v tej skupini.",
 +"Contacts are already in this group." => "Stiki so že v tej skupini.",
 +"Couldn't get contact list." => "Ne morem dobiti seznama stikov.",
 +"Contact is not in this group." => "Stik ni v tej skupini",
 +"Contacts are not in this group." => "Stiki niso v tej skupini.",
 +"Failed renaming group: {error}" => "Napaka pri preimenovanju skupine: {error}",
 +"A group named {group} already exists" => "Skupina z imenom {group} že obstaja.",
 +"Failed adding group: {error}" => "Dodajanje skupine ni uspelo: {error}",
 +"All" => "Vsi",
 +"Favorites" => "Priljubljene",
 +"Shared by {owner}" => "V souporabo dal {owner}",
 +"Failed loading groups: {error}" => "Nalaganje skupine ni uspelo: {error}",
 +"Please choose the addressbook" => "Izberite imenik",
 +"Import into..." => "Uvozi v...",
++"Error loading import template" => "Napaka nalaganja predloge uvoza",
++"Import contacts" => "Uvozi stike",
 +"Import" => "Uvozi",
 +"Import done" => "Uvoz je končan",
 +"Close" => "Zapri",
 +"Error" => "Napaka",
 +"Displayname cannot be empty." => "Prikazno ime ne sme biti prazno.",
 +"Show CardDav link" => "Pokaži povezavo CardDav",
 +"Show read-only VCF link" => "Pokaži povezavo VCF samo za branje",
 +"Download" => "Prejmi",
 +"Edit" => "Uredi",
 +"Delete" => "Izbriši",
 +"More..." => "Več ...",
 +"Less..." => "Manj ...",
++"Server error! Please inform system administator" => "Napaka strežnika! Stopite v stik s skrbnikom sistema.",
 +"Failed loading photo: {error}" => "Napaka pri nalaganju slike: {error}",
 +"You do not have permissions to see this contacts" => "Nimate pravic za ogled teh stikov.",
++"Contact not found" => "Stika ni mogoče najti",
 +"You do not have permissions to see these contacts" => "Nimate ustreznih pravic za ogled teh stikov.",
 +"You do not have permissions add contacts to the address book" => "Nimate ustreznih pravic za dodajanje stikov v imenik.",
 +"The backend for this address book does not support adding contacts" => "Zaledje tega imenika ne omogoča dodajanja stikov.",
 +"You do not have permissions to delete this contact" => "Nimate ustreznih pravic za brisanje tega stika",
 +"The backend for this address book does not support deleting contacts" => "Zaledje tega imenika ne omogoča brisanje stikov",
 +"Unknown error" => "Neznana napaka",
 +"The backend for this address book does not support updating" => "Zaledje tega imenika ne omogoča posodobitev",
 +"You don't have permissions to update the address book." => "Nimate ustreznih pravic za posodobitev imenika.",
 +"You don't have permissions to delete the address book." => "Nimate ustreznih pravic za brisanje imenika.",
 +"Address book not found" => "Imenika ni bilo mogoče najti",
 +"You do not have permissions to see this contact" => "Nimate ustreznih pravic za ogled tega stika",
++"Property not found" => "Lastnosti ni mogoče najti",
++" Missing IM parameter for: " => "Manjka parameter IM za:",
 +"Unknown IM: " => "Neznan IM:",
 +"{name}'s Birthday" => "{name} - rojstni dan",
 +"Error creating address book" => "Napaka pri ustvarjanju imenika",
 +"Error updating address book" => "Napaka pri posodabljanju imenika",
++"You do not have permissions to delete the \"%s\" address book" => "Ni ustreznih dovoljenj za brisanje imenika \"%s\"",
 +"Error deleting address book" => "Napaka pri brisanju imenika",
 +"Error creating contact." => "Napaka pri ustvarjanju stika.",
 +"Error deleting contact." => "Napaka pri brisanju stika.",
++"Error retrieving contact." => "Napaka pridobivanja stika.",
 +"Error saving contact." => "Napaka med shranjevanjem stika.",
 +"Error removing contact from other address book." => "Napaka pri brisanju stika iz drugega imenika.",
 +"Couldn't find contact." => "Stika ni bilo mogoče najti.",
++"No contact data in request." => "Ni zahtevanih podatkov stika.",
 +"Error merging into contact." => "Napaka pri spajanju podatkov v stik.",
 +"Error saving contact to backend." => "Napaka pri shranjevanju stika.",
++"Property name is not set." => "Ime lastnosti ni nastavljeno.",
 +"Information about vCard is incorrect. Please reload the page." => "Podrobnosti kartice vCard niso pravilne. Ponovno naložite stran.",
++"Error updating contact" => "Napaka posodabljanja stika",
++"Error saving contact to backend" => "Napaka shranjevanja stika v hrbtišče sistema",
++"Error getting user photo" => "Napaka pridobivanja fotografije uporabnika",
 +"No file was uploaded. Unknown error" => "Ni poslane datoteke. Neznana napaka.",
 +"There is no error, the file uploaded with success" => "Datoteka je uspešno naložena.",
 +"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Naložena datoteka presega velikost, ki jo določa parameter upload_max_filesize v datoteki php.ini",
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Poslana datoteka presega velikost, ki jo določa parameter največje dovoljene velikosti v obrazcu HTML.",
 +"The uploaded file was only partially uploaded" => "Poslan je le del datoteke.",
 +"No file was uploaded" => "Ni poslane datoteke",
 +"Missing a temporary folder" => "Manjka začasna mapa",
 +"Couldn't load temporary image: " => "Začasne slike ni mogoče naložiti: ",
 +"Couldn't save temporary image: " => "Začasne slike ni mogoče shraniti: ",
 +"No photo path was submitted." => "Pot slike ni poslana.",
 +"File doesn't exist:" => "Datoteka ne obstaja:",
 +"Error loading image." => "Napaka med nalaganjem slike.",
++"Image has been removed from cache" => "Slika je odstranjena iz predpomnilnika",
 +"Error creating temporary image" => "Napaka med ustvarjanjem začasne slike",
 +"Error cropping image" => "Napaka med obrezovanjem slike",
 +"Error resizing image" => "Napaka med spreminjanjem velikosti slike",
 +"Error getting PHOTO property." => "Napaka med pridobivanjem lastnosti fotografije.",
 +"No group name given." => "Niste navedli imena skupine.",
 +"Error adding group." => "Napaka pri dodajanju skupine.",
 +"Error renaming group." => "Napaka pri preimenovanju skupine.",
 +"Group ID missing from request." => "V zahtevku manjka ID skupine.",
 +"Contact ID missing from request." => "V zahtevku manjka ID stika.",
 +"Failed to write to disk" => "Pisanje na disk je spodletelo",
 +"Not enough storage available" => "Na voljo ni dovolj prostora",
 +"Error uploading contacts to storage." => "Napaka med nalaganjem stikov v hrambo.",
++"Error moving file to imports folder." => "Napaka premikanja datoteke v mapo uvoza.",
 +"You do not have permissions to import into this address book." => "Nimate ustreznih pravic za uvoz v ta imenik.",
 +"File name missing from request." => "V zahtevi manjka ime datoteke.",
 +"No contacts found in: " => "Nobenega stika ni bilo mogoče najti v:",
- "Could not set preference: " => "Ne morem nastaviti lastnosti:",
++"No key is given." => "Ni podanega ključe.",
++"No value is given." => "Ni podane vrednosti.",
++"Could not set preference: " => "Ni mogoče nastaviti lastnosti:",
 +"Contact" => "Stik",
 +"Other" => "Drugo",
 +"HomePage" => "Domača stran",
 +"Jabber" => "Jabber",
 +"Internet call" => "Internetni klic",
 +"AIM" => "AIM",
 +"MSN" => "MSN",
 +"Twitter" => "Twitter",
 +"GoogleTalk" => "GoogleTalk",
 +"Facebook" => "Facebook",
 +"XMPP" => "XMPP",
 +"ICQ" => "ICQ",
 +"Yahoo" => "Yahoo",
 +"Skype" => "Skype",
 +"QQ" => "QQ",
 +"GaduGadu" => "GaduGadu",
 +"Work" => "Delo",
 +"Home" => "Osebna mapa",
 +"Mobile" => "Mobilni telefon",
 +"Text" => "Besedilo",
 +"Voice" => "Glas",
 +"Message" => "Sporočilo",
 +"Fax" => "Faks",
 +"Video" => "Video",
 +"Pager" => "Pozivnik",
 +"Internet" => "Internet",
 +"Friends" => "Prijatelji",
 +"Family" => "Družina",
 +"New Contact" => "Nov stik",
 +"Group name" => "Ime skupine",
 +"New Group" => "Nova skupina",
 +"Address books" => "Imeniki",
 +"Display name" => "Ime za prikaz",
 +"Add Address Book" => "Dodaj imenik",
 +"Select file..." => "Izberi dokument...",
 +"(De-)select all" => "(Od-)izberi vse",
 +"Sort order" => "Vrstni red razvrščanja",
 +"First- Lastname" => "Ime-Priimek",
 +"Last-, Firstname" => "Ime,Priimek",
 +"Groups" => "Skupine",
 +"Favorite" => "Priljubljen",
++"Merge selected" => "Združi izbrano",
 +"Keyboard shortcuts" => "Bližnjice na tipkovnici",
 +"Navigation" => "Krmarjenje",
 +"Next contact in list" => "Naslednji stik na seznamu",
 +"Previous contact in list" => "Predhodni stik na seznamu",
 +"Expand/collapse current addressbook" => "Razširi/Skrči trenutni imenik",
 +"Next addressbook" => "Naslednji imenik",
 +"Previous addressbook" => "Predhodni imenik",
 +"Actions" => "Dejanja",
 +"Refresh contacts list" => "Osveži seznam stikov",
 +"Add new contact" => "Dodaj nov stik",
 +"Add new addressbook" => "Dodaj nov imenik",
 +"Delete current contact" => "Izbriši trenutni stik",
 +"Add contact" => "Dodaj stik",
 +"Delete group" => "Izbriši skupino",
 +"Rename group" => "Preimenuj skupino",
 +"Compose mail" => "Sestavi mail",
 +"Delete current photo" => "Izbriši trenutno sliko",
 +"Edit current photo" => "Uredi trenutno sliko",
 +"Upload new photo" => "Naloži novo sliko",
 +"Select photo from ownCloud" => "Izberi sliko iz ownCloud",
 +"Name" => "Ime",
 +"First name" => "Ime",
 +"Additional names" => "Druga imena",
 +"Last name" => "Priimek",
 +"Select groups" => "Izberi skupine",
 +"Select address book" => "Izberi imenik",
 +"Nickname" => "Vzdevek",
 +"Enter nickname" => "Vnos vzdevka",
 +"Title" => "Naslov",
 +"Enter title" => "Vnesi naziv",
 +"Organization" => "Ustanova",
 +"Enter organization" => "Vnesi organizacijo",
 +"Birthday" => "Rojstni dan",
 +"Notes go here..." => "Prostor za opombe ...",
 +"Export as VCF" => "Izvozi kot VCF",
++"Add field..." => "Dodaj polje ...",
 +"Phone" => "Telefon",
 +"Email" => "Elektronski naslov",
 +"Instant Messaging" => "Hipno sporočanje",
 +"Address" => "Naslov",
 +"Note" => "Opomba",
 +"Web site" => "Spletna stran",
 +"Delete contact" => "Izbriši stik",
 +"Preferred" => "Prednostno",
 +"Please specify a valid email address." => "Navesti je treba veljaven elektronski poštni naslov.",
 +"someone at example.com" => "nekdo at primer.com",
 +"Mail to address" => "Elektronski naslov prejemnika",
 +"Delete email address" => "Izbriši elektronski poštni naslov",
 +"Enter phone number" => "Vpiši telefonsko številko",
 +"Delete phone number" => "Izbriši telefonsko številko",
 +"Go to web site" => "Pojdi na spletno stran",
 +"Delete URL" => "Izbriši URL",
 +"View on map" => "Pokaži na zemljevidu",
 +"Delete address" => "Izbriši imenik",
++"1600 Pennsylvania Avenue, NW" => "1600 Pennsylvania Avenue, NW",
 +"Street address" => "Naslov ulice",
++"20500" => "20500",
 +"Postal code" => "Poštna številka",
++"Washington, DC" => "Washington, DC",
 +"City" => "Mesto",
++"District of Columbia" => "District of Columbia",
++"USA" => "ZDA",
 +"Country" => "Država",
 +"Instant Messenger" => "Hipni sporočilnik",
 +"Delete IM" => "Izbriši IM",
 +"Active" => "Dejavno",
 +"Share" => "Souporaba",
 +"Export" => "Izvozi",
 +"CardDAV link" => "Povezava CardDAV",
 +"CardDAV syncing addresses" => "Naslovi CardDAV za usklajevanje",
 +"more info" => "več podrobnosti",
 +"Primary address (Kontact et al)" => "Osnovni naslov (za stik)",
 +"iOS/OS X" => "iOS/OS X",
 +"Addressbooks" => "Imeniki",
 +"New Address Book" => "Nov imenik",
 +"Description" => "Opis"
 +);
diff --cc apps/contacts/l10n/sl/contacts.po
index bb5b101,0000000..f190e32
mode 100644,000000..100644
--- a/apps/contacts/l10n/sl/contacts.po
+++ b/apps/contacts/l10n/sl/contacts.po
@@@ -1,1168 -1,0 +1,1168 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mateju <>, 2013
 +# mateju <>, 2012
 +# barbarak <barbarak at arnes.si>, 2013
 +# mateju <>, 2013
 +# Peter Peroša <peter.perosa at gmail.com>, 2012
 +# Peter Peroša <peter.perosa at gmail.com>, 2012
 +# urossolar <urossolar at hotmail.com>, 2011
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
- "Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-15 20:56+0000\n"
++"Last-Translator: mateju <>\n"
 +"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sl\n"
 +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Stiki"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Shrani"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Poteka pošiljanje ..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Uvažanje ..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
- msgstr ""
++msgstr "Poteka pripravljanje ..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Uvoženih je bilo {count} od skupno {total} stikov"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "Imenik z imenom {name} že obstaja"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Dodajanje imenika je spodletelo: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Nalaganje imenikov je spodletelo: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Ustvarjanje kazala stikov"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Prišlo je do nepopravljive napake pri nalaganju imenikov: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Napaka"
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Dodaj v ..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Odstrani iz ..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Dodaj skupino ..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Neveljaven internetni naslov: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Med odpiranjem sestavljalnika pošte je prišlo do napake."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Neveljaven elektronski naslov: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Spajanje ni uspelo. Stika ni bilo mogoče najti: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Spajanje je spodletelo."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Spajanje je spodletelo. Stik ni bil shranjen."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Izbor slike"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Napaka omrežja ali strežnika. Prosimo, če o tem obvestite administratorja."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Napaka pri dodajanju v skupino."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Napaka pri odstranjevanju iz skupine."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Napaka pri nastavitvi  {name} kot priljubljenega."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Spoji stike"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Prekliči"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Dodaj skupino"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "V redu"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Stika ni bilo mogoče najti: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Ni izbrane datoteke za nalaganje."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Datoteka, ki jo poskušate naložiti, presega največjo dovoljeno velikost za pošiljanje na tem strežniku."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Uredi fotografijo profila"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
- msgstr ""
++msgstr "Obreži sliko"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Ali je to pravilno?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
- msgstr ""
++msgstr "Napaka razčlenjevanja datuma: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# skupine"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
- msgstr ""
++msgstr "Napaka razčlenjevanja datuma rojstva {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Nekateri stiki so označeni za izbris, vendar še niso izbrisani. Počakajte na izbris."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klikni za preklic izbrisa {num} stikov"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Dodaj"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Stik je že v tej skupini."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Stiki so že v tej skupini."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Ne morem dobiti seznama stikov."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Stik ni v tej skupini"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Stiki niso v tej skupini."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Napaka pri preimenovanju skupine: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Skupina z imenom {group} že obstaja."
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Dodajanje skupine ni uspelo: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Vsi"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Priljubljene"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "V souporabo dal {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Nalaganje skupine ni uspelo: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Izberite imenik"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Uvozi v..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
- msgstr ""
++msgstr "Napaka nalaganja predloge uvoza"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
- msgstr ""
++msgstr "Uvozi stike"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Uvozi"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Uvoz je končan"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Zapri"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Napaka"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Prikazno ime ne sme biti prazno."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Pokaži povezavo CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Pokaži povezavo VCF samo za branje"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Prejmi"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Uredi"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Izbriši"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Več ..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Manj ..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
- msgstr ""
++msgstr "Napaka strežnika! Stopite v stik s skrbnikom sistema."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Napaka pri nalaganju slike: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Nimate pravic za ogled teh stikov."
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
- msgstr ""
++msgstr "Stika ni mogoče najti"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Nimate ustreznih pravic za ogled teh stikov."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Nimate ustreznih pravic za dodajanje stikov v imenik."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Zaledje tega imenika ne omogoča dodajanja stikov."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Nimate ustreznih pravic za brisanje tega stika"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Zaledje tega imenika ne omogoča brisanje stikov"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Neznana napaka"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Zaledje tega imenika ne omogoča posodobitev"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Nimate ustreznih pravic za posodobitev imenika."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Nimate ustreznih pravic za brisanje imenika."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Imenika ni bilo mogoče najti"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Nimate ustreznih pravic za ogled tega stika"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
- msgstr ""
++msgstr "Lastnosti ni mogoče najti"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
- msgstr ""
++msgstr "Manjka parameter IM za:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Neznan IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} - rojstni dan"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Napaka pri ustvarjanju imenika"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Napaka pri posodabljanju imenika"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
- msgstr ""
++msgstr "Ni ustreznih dovoljenj za brisanje imenika \"%s\""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Napaka pri brisanju imenika"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Napaka pri ustvarjanju stika."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Napaka pri brisanju stika."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
- msgstr ""
++msgstr "Napaka pridobivanja stika."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Napaka med shranjevanjem stika."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Napaka pri brisanju stika iz drugega imenika."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Stika ni bilo mogoče najti."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
- msgstr ""
++msgstr "Ni zahtevanih podatkov stika."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Napaka pri spajanju podatkov v stik."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Napaka pri shranjevanju stika."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
- msgstr ""
++msgstr "Ime lastnosti ni nastavljeno."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Podrobnosti kartice vCard niso pravilne. Ponovno naložite stran."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
- msgstr ""
++msgstr "Napaka posodabljanja stika"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
- msgstr ""
++msgstr "Napaka shranjevanja stika v hrbtišče sistema"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
- msgstr ""
++msgstr "Napaka pridobivanja fotografije uporabnika"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ni poslane datoteke. Neznana napaka."
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Datoteka je uspešno naložena."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Naložena datoteka presega velikost, ki jo določa parameter upload_max_filesize v datoteki php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Poslana datoteka presega velikost, ki jo določa parameter največje dovoljene velikosti v obrazcu HTML."
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Poslan je le del datoteke."
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ni poslane datoteke"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Manjka začasna mapa"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Začasne slike ni mogoče naložiti: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Začasne slike ni mogoče shraniti: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Pot slike ni poslana."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Datoteka ne obstaja:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Napaka med nalaganjem slike."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
- msgstr ""
++msgstr "Slika je odstranjena iz predpomnilnika"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Napaka med ustvarjanjem začasne slike"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Napaka med obrezovanjem slike"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Napaka med spreminjanjem velikosti slike"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Napaka med pridobivanjem lastnosti fotografije."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Niste navedli imena skupine."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Napaka pri dodajanju skupine."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Napaka pri preimenovanju skupine."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "V zahtevku manjka ID skupine."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "V zahtevku manjka ID stika."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Pisanje na disk je spodletelo"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Na voljo ni dovolj prostora"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Napaka med nalaganjem stikov v hrambo."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
- msgstr ""
++msgstr "Napaka premikanja datoteke v mapo uvoza."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Nimate ustreznih pravic za uvoz v ta imenik."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "V zahtevi manjka ime datoteke."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Nobenega stika ni bilo mogoče najti v:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
- msgstr ""
++msgstr "Ni podanega ključe."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
- msgstr ""
++msgstr "Ni podane vrednosti."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
- msgstr "Ne morem nastaviti lastnosti:"
++msgstr "Ni mogoče nastaviti lastnosti:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Stik"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Drugo"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Domača stran"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internetni klic"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Delo"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Osebna mapa"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobilni telefon"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Besedilo"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Glas"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Sporočilo"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faks"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Pozivnik"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Prijatelji"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Družina"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Nov stik"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Ime skupine"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nova skupina"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Imeniki"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Ime za prikaz"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Dodaj imenik"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Izberi dokument..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Od-)izberi vse"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Vrstni red razvrščanja"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "Ime-Priimek"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Ime,Priimek"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Skupine"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Priljubljen"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
- msgstr ""
++msgstr "Združi izbrano"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Bližnjice na tipkovnici"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Krmarjenje"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Naslednji stik na seznamu"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Predhodni stik na seznamu"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Razširi/Skrči trenutni imenik"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Naslednji imenik"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Predhodni imenik"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Dejanja"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Osveži seznam stikov"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Dodaj nov stik"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Dodaj nov imenik"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Izbriši trenutni stik"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Dodaj stik"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Izbriši skupino"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Preimenuj skupino"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Sestavi mail"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Izbriši trenutno sliko"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Uredi trenutno sliko"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Naloži novo sliko"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Izberi sliko iz ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Ime"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Ime"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Druga imena"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Priimek"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Izberi skupine"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Izberi imenik"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Vzdevek"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Vnos vzdevka"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Naslov"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Vnesi naziv"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Ustanova"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Vnesi organizacijo"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Rojstni dan"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Prostor za opombe ..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Izvozi kot VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
- msgstr ""
++msgstr "Dodaj polje ..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Elektronski naslov"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Hipno sporočanje"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Naslov"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Opomba"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Spletna stran"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Izbriši stik"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Prednostno"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Navesti je treba veljaven elektronski poštni naslov."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "nekdo at primer.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Elektronski naslov prejemnika"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Izbriši elektronski poštni naslov"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Vpiši telefonsko številko"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Izbriši telefonsko številko"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Pojdi na spletno stran"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Izbriši URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Pokaži na zemljevidu"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Izbriši imenik"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
- msgstr ""
++msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Naslov ulice"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
- msgstr ""
++msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Poštna številka"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
- msgstr ""
++msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Mesto"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
- msgstr ""
++msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
- msgstr ""
++msgstr "ZDA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Država"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Hipni sporočilnik"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Izbriši IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Dejavno"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Souporaba"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Izvozi"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "Povezava CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "Naslovi CardDAV za usklajevanje"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "več podrobnosti"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Osnovni naslov (za stik)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Imeniki"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Nov imenik"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Opis"
diff --cc apps/contacts/l10n/sr/contacts.po
index bc1fe91,0000000..9b72a27
mode 100644,000000..100644
--- a/apps/contacts/l10n/sr/contacts.po
+++ b/apps/contacts/l10n/sr/contacts.po
@@@ -1,1163 -1,0 +1,1163 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# beloica.b <beloica.b at mfkv.rs>, 2012
 +# Slobodan Terzić <githzerai06 at gmail.com>, 2011, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sr\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"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Контакти"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Сачувај"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Отпремам…"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Откажи"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "У реду"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Додај"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Увези"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Затвори"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Грешка"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Преузми"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Уреди"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Обриши"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Подаци о вКарти су неисправни. Поново учитајте страницу."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ниједна датотека није отпремљена услед непознате грешке"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Није дошло до грешке. Датотека је успешно отпремљена."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Послати фајл превазилази директиву upload_max_filesize из "
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Отпремљена датотека прелази смерницу MAX_FILE_SIZE која је наведена у HTML обрасцу"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Датотека је делимично отпремљена"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Датотека није отпремљена"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Недостаје привремена фасцикла"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Не могу да пишем на диск"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Нема довољно простора"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Контакт"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Друго"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Посао"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Кућа"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Мобилни"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Текст"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Глас"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Факс"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Видео"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Пејџер"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Групе"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Име"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Наслов"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Организација"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Рођендан"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Телефон"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Е-пошта"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Адреса"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Обриши контакт"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Пожељан"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Град"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Земља"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Активан"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Дели"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Извези"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "више информација"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr ""
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Адресар"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Нови адресар"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Опис"
diff --cc apps/contacts/l10n/sv/contacts.po
index 02db6b0,0000000..9b63aff
mode 100644,000000..100644
--- a/apps/contacts/l10n/sv/contacts.po
+++ b/apps/contacts/l10n/sv/contacts.po
@@@ -1,1176 -1,0 +1,1176 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Lokal_Profil <lokal_profil at hotmail.com>, 2013
 +# Christer Eriksson <post at hceriksson.com>, 2012
 +# Daniel Sandman <revoltism at gmail.com>, 2012-2013
 +# Gunnar Norin <blittan at xbmc.org>, 2013
 +# Gustav Smedberg <shadow.elf at hotmail.com>, 2013
 +# Jan Busk, 2013
 +# medialabs, 2013
 +# Magnus Höglund <magnus at linux.com>, 2012-2013
 +# Magnus Höglund <magnus at linux.com>, 2012
 +# medialabs, 2013
 +# Daniel Sandman <revoltism at gmail.com>, 2011, 2012
 +# SBH1, 2013
 +# Stefan Gagner <stefan at mei-ya.se>, 2013
 +# tsarkon <tg at osswriter.com>, 2013
 +# tscooter <tscooter at hotmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: Gustav Smedberg <shadow.elf at hotmail.com>\n"
 +"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sv\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontakter"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Spara"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Laddar upp..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Importerar..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Förbereder..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "Importerade {count} av {total} kontakter"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "Importerade {imported} kontakter. {failed} misslyckades."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "En adressbok vid namn {name} finns redan"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Kan inte lägga till adressbok: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Misslyckades ladda adressböcker: {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Indexerar kontakter"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Irreparabelt fel när adressböckerna skulle laddas: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Fel."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Lägga till..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Ta bort från..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Lägg till grupp..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Felaktig URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Fel uppstod när e-postklient skulle öppnas."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Felaktig e-post: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Sammanslagning misslyckades. Kan inte hitta kontakt: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Sammanslagning misslyckades."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Sammanslagning misslyckades: Fel vid sparande av kontakt."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Välj foto"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Nätverk eller serverfel. Informera administratören."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Fel vid tillägg i grupp."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Fel vid radering från grupp."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "Fel när {name} skulle läggas till favoriter."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Sammanfoga kontakter"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Avbryt"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Lägg till grupp"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kunde inte hitta kontakt: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Inga filer valda för uppladdning"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Filen du försöker ladda upp är större än den maximala storleken för filöverföring på denna server."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Anpassa profilbild"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Beskär bild"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Är detta korrekt?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Fel vid läsning av datum: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# grupper"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "Fel uppstod under inläsning av födelsedag {bday}: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Vissa kontakter är markerade för radering, men är inte raderade än. Vänta tills att de har raderats."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Klicka för att ångra radering av {num} kontakter"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "Avbruten radering av {num} kontakter"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Lägg till"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kontakten finns redan i denna grupp."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kontakterna finns redan i denna grupp."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kunde inte hämta kontaktlista."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kontakten är inte i denna grupp."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kontakterna är inte i denna grupp."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Det gick inte att ändra namn på gruppen: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "En grupp men namnet {group} finns redan"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Du kan dra och släppa grupper⏎\nför att arrangera dem som du vill."
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Det gick inte att lägga till gruppen :{error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Alla"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoriter"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Delad av {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Inte grupperad."
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Kan inte ladda grupper: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Vänligen välj adressboken"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "Importera till..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "Fel uppstod under import av mall"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Importera kontakter"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Importera"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Import klar"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Stäng"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Fel"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Visningsnamn får inte vara tomt."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Visa CardDav-länk"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Visa skrivskyddad VCF-länk"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Ladda ner"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Redigera"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Radera"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Mer..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Mindre..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Serverfel! Vänligen Informera administratören."
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Kan inte ladda foton:{error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Du saknar behörighet för att se denna kontakt"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Kontakten kunde inte hittas"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Du saknar behörighet för att kunna se dessa kontakter."
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Du saknar behörighet för att lägga till kontakter i denna adressbok."
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Gränssnittet för denna adressbok saknar stöd för att lägga till kontakter."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Du saknar behörighet att ta bort denna kontakt"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Gränssnittet för denna adressbok saknar stöd för att ta bort kontakter. "
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Okänt fel"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Gränssnittet för denna adressbok saknar stöd för uppdateringar"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Du saknar behörighet att uppdatera adressboken."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Du saknar behörighet att ta bort adressboken."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Kan inte hitta adressboken."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Du saknar behörighet att se denna kontakt"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Du har inte behörighet att uppdatera denna kontakt"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Gränssnittet för denna kontakt saknar stöd för uppdatering av den."
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Detta gränssnitt saknar stöd för att lägga till kontakter"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Egenskap kunde inte hittas"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "IM-parametrar saknas för:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Okänt IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}'s födelsedag"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Fel vid skapandet av adressbok"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Fel vid uppdatering av adressbok"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "Du har inte behörighet att radera \"%s\" adressbok"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Fel när adressbok skulle raderas"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Fel vid skapandet av kontakt"
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Fel när kontakt skulle raderas."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Fel när kontakt skulle hämtas."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Fel vid spara kontakt."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Fel vid borttagning av kontakt från den andra adressboken."
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kunde inte hitta kontakt."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Ingen kontakt data i efterfrågan."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Fel vid sammanslagning till kontakt"
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Fel när kontakt ska sparas till server."
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Namn för egenskap ej definierat"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Kontrollsumma för objekt ej definierat."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Information om vCard är felaktigt. Vänligen ladda om sidan."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Fel uppstod när kontakt skulle uppdateras"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Fel när kontakt skulle sparas till server"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Fel uppstod under hämtning av användarbild"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Ingen fil har laddats upp. Okänt fel"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Inga fel har uppstått. Filen har laddats upp utan problem."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Den uppladdade filen överskrider värdet för upload_max_filesize i php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Den uppladdade filen överskrider värdet för MAX_FILE_SIZE som har angivits i HTML-formuläret"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Den uppladdade filen har endast delvis laddats upp"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Ingen fil har laddats upp"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Temporär-mapp saknas"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Kan inte ladda tillfällig bild:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Kan inte spara tillfällig bild:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Ingen sökväg till foto angavs."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Filen finns inte:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Fel vid laddning av bild."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Bild har tagits bort från cache"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Fel vid skapa tillfällig bild"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Fel vid beskärning av bilden"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Fel vid storleksförändring av bilden"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Fel vid hämtning av egenskaper för FOTO."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Inget gruppnamn angivet."
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Fel uppstod när grupp skulle läggas till."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Inget gruppnamn att byta från angivet."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Inget gruppnamn att byta till angivet."
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Fel vid omdöpning av grupp."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "Grupp-ID fattas från anrop."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "Gruppnamn saknas från begäran."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "Kontakt-ID fattas från anrop."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Misslyckades att spara till disk"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Det finns inte tillräckligt med lagringsutrymme"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Försök att ladda upp svartlistad fil:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Fel uppstod när kontakter sparades."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Fel uppstod när fil skulle flyttas till importmappen."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Du har inte behörighet att importera denna adressbok."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "Filnamn saknas från begäran."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "Progress-nyckel saknas från begäran."
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Försök att komma åt svartlistad fil:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Hittade inga kontakter i:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Ingen nyckel angavs."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Inget värde angavs."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Kan inte ange inställning:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kontakt"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Annat"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Hemsida"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "Internetsamtal"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Arbete"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Hem"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Text"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Röst"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Meddelande"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Personsökare"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Vänner"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Familj"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Ny kontakt"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Gruppnamn"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Ny grupp"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adressböcker"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Visningsnamn"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Lägg till adressbok"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Välj fil..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Av-)markera alla"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sorteringsordning"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "För- Efternamn"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Efter-, Förnamn"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Grupper"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Favorit"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Slå ihop valda"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Kortkommandon"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigering"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Nästa kontakt i listan"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Föregående kontakt i listan"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Visa/dölj aktuell adressbok"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Nästa adressbok"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Föregående adressbok"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Åtgärder"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Uppdatera kontaktlistan"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Lägg till ny kontakt"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Lägg till ny adressbok"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Radera denna kontakt"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Du har antingen inga kontakter i din adressbok eller så är din adressboken inaktiverad.</h3><p>Lägg till en ny kontakt eller importera befintliga kontakter från en VCF-fil.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Lägg till en kontakt"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Radera grupp"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Döp om grupp"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Vilken kontakt ska informationen slås ihop med?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Radera dom andra efter lyckad sammanslagning?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Skapa e-post"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Ta bort aktuellt foto"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Redigera aktuellt foto"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Ladda upp ett nytt foto"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Välj foto från ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Namn"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Förnamn"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Mellannamn"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Efternamn"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Välj grupper"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Välj adressbok"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Smeknamn"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Ange smeknamn"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Rubrik"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Ange titel"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organisation"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Ange organisation"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Födelsedag"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Noteringar här..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "Exportera som VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Lägg till fält..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "E-post"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adress"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Notering"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Webbplats"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Radera kontakt"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Föredragen"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Vänligen ange en giltig e-postadress."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "någon at exempel.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Posta till adress."
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Ta bort e-postadress"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Ange telefonnummer"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Ta bort telefonnummer"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Gå till webbplats"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Radera URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Visa på karta"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Radera adress"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 Pennsylvania Avenue, NW"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Gatuadress"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Postnummer"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "Washington, DC"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Stad"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "District of Columbia"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Stat eller provins"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "USA"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Land"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Radera IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktiv"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Dela"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Exportera"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV-länk"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV synkningsadresser"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "mer information"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Primary address (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adressböcker"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Ny adressbok"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Beskrivning"
diff --cc apps/contacts/l10n/ta_LK/contacts.po
index 672a33f,0000000..34ef88d
mode 100644,000000..100644
--- a/apps/contacts/l10n/ta_LK/contacts.po
+++ b/apps/contacts/l10n/ta_LK/contacts.po
@@@ -1,1162 -1,0 +1,1162 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# suganthi <suganthi at nic.lk>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ta_LK\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "தொடர்புகள்"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "சேமிக்க "
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "பதிவேற்றல்..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "தொடர்புகளை அட்டவணையிடுதல்"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "இற்கு சேர்க்கப்பட்டது..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "இலிருந்து அகற்றுக..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "குழுவிற்கு சேர்க்க..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "மின்னஞ்சல் செய்தியாக்குகையை திறப்பதில் வழு."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "படத்தை தெரிக"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "வ​லைய​மைப்பு அல்லது சேவையக வழு. தயவுசெய்து நிர்வாகிக்கு தெரியப்படுத்தவும்."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "குழுவில் சேர்ப்பதில் வழு."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "குழுவிலிருந்து அகற்றுவதிலிருந்து வழு."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "இரத்து செய்க"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "குழுவில் சேர்க்க"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "சரி "
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "பதிவேற்றுவதற்கு கோப்புகள் தெரிவுசெய்யப்படவில்லை"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்பானது இந்த சேவையகத்தில் பதிவேற்றக்கூடிய கோப்பின் ஆகக்கூடிய அளவைவிட கூடியது. "
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "விபரக்கோவை படத்தை தொகுக்க "
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "இது சரியா?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "சில தொடர்புகள் அழிப்பதற்காக அடையாளப்படுத்தப்பட்டுள்ளது, ஆனால் இன்னும் அழிக்கவில்லை. தயவுசெய்து அது அழியும் வரை காத்திருக்கவும்."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "தொடர்புகள் நீக்கியதை முன் செயல் நீக்கம் {num} செய்வதற்கு சொடக்குக"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "சேர்க்க"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "தொடர்பு ஏற்கனவே இந்த குழுவில் உள்ளது."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "தொடர்புகள் ஏற்கனவே இந்த குழுவில் உள்ளது."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "தொடர்பு பட்டியலை பெறமுடியாதுள்ளது."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "தொடர்பு இந்த குழுவில் இல்லை."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "தொடர்புகள் இந்த குழுவில் இல்லை"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "ஒரு குழு பெயர் {குழு} ஏற்கனவே உள்ளது"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "எல்லாம்"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "விருப்பங்கள்"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "பகிரப்பட்டது {சொந்தகாரர்}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "தயவுசெய்து முகவரி புத்தகத்தை தெரிவுசெய்க"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "இறக்குமதி"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "மூடுக"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "வழு"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "காட்சிப்பெயர் வெறுமையாக இருக்கமுடியாது.வாவா"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav இணைப்பை காட்டவும்"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "வாசிக்கக்கூடிய VCF இணைப்பை மட்டும் காட்டுக"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "பதிவிறக்குக"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "தொகுக்க"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "நீக்குக"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "மேலதிக..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "குறைவு..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "அறியப்படாத IM"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{பெயர்} இன் பிறந்தநாள்"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "தொடர்பை சேமிப்பதில் வழு"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCard பற்றிய தகவல்கள் தவறானது. தயவுசெய்து பக்கத்தை மீள்ளேற்றுக"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "ஒரு கோப்பும் பதிவேற்றப்படவில்லை. அறியப்படாத வழு"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "இங்கு வழு இல்லை, கோப்பு வெற்றிகரமாக பதிவேற்றப்பட்டது"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "பதிவேற்றப்பட்ட கோப்பானது php.ini இலுள்ள upload_max_filesize  directive ஐ விட கூடியது"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "பதிவேற்றப்பட்ட கோப்பானது HTML  படிவத்தில் குறிப்பிடப்பட்டுள்ள MAX_FILE_SIZE  directive ஐ விட கூடியது"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "பதிவேற்றப்பட்ட கோப்பானது பகுதியாக மட்டுமே பதிவேற்றப்பட்டுள்ளது"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "எந்த கோப்பும் பதிவேற்றப்படவில்லை"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "தற்காலிக படத்தை ஏற்றமுடியாது"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "தற்காலிக படத்தை சேமிக்கமுடியாது"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "படத்திற்கான பாதை சமர்ப்பிக்கப்படவில்லை"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "கோப்பு ஏற்கனவே இல்லை"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "படங்களை ஏற்றுவதில் வழு"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "தற்காலிக படத்தை உருவாக்குவதில் வழு"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "படத்தை செதுக்குவதில் வழு"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "படத்தின் அளவை மாற்றுவதில் வழு"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "பட தொகுப்பை பெறுவதில் வழு"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "குழுவை சேர்ப்பதில் வழு"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "வேண்டுகோளில் குழு ID விடுபட்டுள்ளது."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "வேண்டுகோளில் தொடர்பு ID விடுபட்டுள்ளது."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "வட்டில் எழுத முடியவில்லை"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "சேமிப்பகத்தில் தொடர்புகளை பதிவேற்றுவதில் வழு"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "விருப்பங்களை அமைக்கமுடியவில்லை:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "தொடர்பு"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "மற்றவை"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "தொடக்க பக்கம்"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "வேலை"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "அகம்"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "இடமாற்றக்கூடிய"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "உரை"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "குரல்"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "செய்தி"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "தொலை நகல்"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "நிகழ்படம்"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "தொலை அழைப்பான்"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "இணையம்"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "நண்பர்கள்"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "குடும்பம்"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "புதிய தொடர்பு"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "புதிய குழு"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "எல்லாவற்றையும் தெரிவுசெய்க (செய்யாதிக-)"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "குழுக்கள்"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "விருப்பமான"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "விசைப்பலகை குறுக்குவழிகள்"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "வழிசெலுத்தல்"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "பட்டியலில் உள்ள அடுத்த தொடர்பு"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "பட்டியலில் முந்தைய தொடர்பு"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "தற்போதைய முகவரி புத்தகத்தை விரிவாக்குக/தகர்த்துக"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "அடுத்த முகவரி புத்தகம்"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "முந்தைய முகவரி புத்தகம்"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "செயல்கள்"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "தொடர்பு பட்டியலை மீள் ஏற்றுக"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "புதிய தொடர்பை சேர்க்க"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "புதிய முகவரி புத்தகத்தை சேர்க்க"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "தற்போதைய தொடர்பை நீக்குக"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "தொடர்பை சேர்க்க"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "குழுக்களை நீக்குக"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "மின்னஞ்சல் செய்தியாக்குகை"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "தற்போதைய படத்தை நீக்குக"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "தற்போதைய படத்தை தொகுக்க"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "புதிய படத்தை பதிவேற்றுக"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "ownCloud இலிருந்து படத்தை தெரிவுசெய்க"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "பெயர்"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "முதல் பெயர்"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "மேலதிக பெயர்கள்"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "கடைசிப் பெயர்"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "பட்டப்பெயர்"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "பட்டப்பெயரை நுழைக்க"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "தலைப்பு"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "நிறுவனம்"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "பிறந்த நாள்"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "குறிப்புகள் இங்கே இருக்கின்றன..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "தொலைப்பேசி"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "மின்னஞ்சல்"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "முகவரி"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "குறிப்பு"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "வலைய தளம்"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "தொடர்பை நீக்குக"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "விரும்பிய"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "தயவுசெய்து செல்லுபடியான மின்னஞ்சல் முகவரியை குறிப்பிடுக."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "மின்னஞ்சல் முகவரி"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "மின்னஞ்சல் முகவரியை நீக்குக"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "தொலைப்பேசி இலக்கத்தை நுழைக்க"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "தொலைப்பேசி இலக்கத்தை நீக்குக"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "வலைய தளத்திற்கு செல்க"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "URL ஐ நீக்குக"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "வரைப்படத்தில் காண்க"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "முகவரியை நீக்குக"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "வீதி முகவரி"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "தபால் குறியீடு"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "நகரம்"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "நாடு"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM ஐ நீக்குக"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "இயங்கும்"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "பகிர்வு"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "ஏற்றுமதி"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "முகவரிகளை cardDAV ஒத்திசைக்கின்றன"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "மேலதிக தகவல்"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "முதன்மை முகவரி (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "முகவரி புத்தகங்கள்"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "புதிய முகவரி புத்தகம்"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "விவரிப்பு"
diff --cc apps/contacts/l10n/templates/contacts.pot
index 89d5884,0000000..77e12f9
mode 100644,000000..100644
--- a/apps/contacts/l10n/templates/contacts.pot
+++ b/apps/contacts/l10n/templates/contacts.pot
@@@ -1,1161 -1,0 +1,1161 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 +#
 +#, fuzzy
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud contacts 5.0.0\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\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"
 +"Language: \n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=CHARSET\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr ""
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr ""
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr ""
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr ""
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr ""
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr ""
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr ""
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr ""
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr ""
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr ""
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr ""
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr ""
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr ""
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr ""
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr ""
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr ""
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr ""
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr ""
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr ""
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr ""
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr ""
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr ""
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr ""
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr ""
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr ""
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr ""
diff --cc apps/contacts/l10n/th_TH/contacts.po
index b4e759f,0000000..17b2f36
mode 100644,000000..100644
--- a/apps/contacts/l10n/th_TH/contacts.po
+++ b/apps/contacts/l10n/th_TH/contacts.po
@@@ -1,1163 -1,0 +1,1163 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# AriesAnywhere Anywhere <ariesanywhere at gmail.com>, 2012-2013
 +# AriesAnywhere Anywhere <ariesanywhere at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: th_TH\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "ข้อมูลผู้ิติดต่อ"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "บันทึก"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "กำลังอัพโหลด..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "กำลังนำเข้าข้อมูล..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "จัดทำสารบัญรายชื่อผู้ติดต่อ"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "เพิ่มเข้าไปที่..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "ลบออกจาก..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "เพิ่มกลุ่ม..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "เกิดข้อผิดพลาดในการระหว่างการเปิดหน้าเครื่องมือเขียนอีเมล"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "เลือกรูปถ่าย"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "เครือข่ายหรือเซิร์ฟเวอร์ เกิดข้อผิดพลาด กรุณาติดต่อผู้ดูแลระบบ"
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "เกิดข้อผิดพลาดในการเพิ่มเข้าไปยังกลุ่ม"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "เกิดข้อผิดพลาดในการลบออกจากกลุ่ม"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "ยกเลิก"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "เพิ่มกลุ่ม"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "ตกลง"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "ยังไม่ได้เลือกไฟล์ำสำหรับอัพโหลด"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "ไฟล์ที่คุณกำลังพยายามที่จะอัพโหลดมีขนาดเกินจำนวนสูงสุดที่สามารถอัพโหลดได้สำหรับเซิร์ฟเวอร์นี้"
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "แก้ไขรูปภาพหน้าโปรไฟล์"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "คุณแน่ใจแล้วหรือว่าถูกต้อง?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "ข้อมูลผู้ติดต่อบางรายการได้ถูกทำเครื่องหมายสำหรับลบทิ้งเอาไว้, แต่ยังไม่ได้ถูกลบทิ้ง, กรุณารอให้รายการดังกล่าวถูกลบทิ้งเสียก่อน"
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "คลิกเพื่อเลิกทำ การลบรายชื่อผู้ติดต่อ {num} รายการ"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "เพิ่ม"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "รายชื่อผู้ติดต่อมีอยู่ในกลุ่มนี้อยู่แล้ว"
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "รายชื่อผู้ติดต่อดังกล่าวมีอยู่แล้วในกลุ่มนี้"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "ไม่สามารถดึงรายชื่อผู้ติดต่อได้"
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "รายชื่อผู้ติดต่อไม่มีอยู่ในกลุ่มนี้"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "รายชื่อผู้ติดต่อดังกล่าวไม่มีอยู่ในกลุ่มนี้"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "ชื่อกลุ่มดังกล่าว {group} มีอยู่แล้ว"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "ทั้งหมด"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "รายการโปรด"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "ถูกแชร์โดย {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "กรุณาเลือกสมุดบันทึกที่อยู่"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "นำเข้า"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "เสร็จสิ้นการนำเข้าข้อมูล"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "ปิด"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "ข้อผิดพลาด"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "ชื่อที่ใช้แสดงไม่สามารถเว้นว่างได้"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "แสดงลิงก์ CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "แสดงลิงก์ VCF สำหรับอ่านเท่านั้น"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "ดาวน์โหลด"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "แก้ไข"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "ลบ"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "เพิ่มเติม..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "ย่อ..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "IM ไม่ทราบชื่อ:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "วันเกิดของ {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "เกิดข้อผิดพลาดในการบันทึกข้อมูลผู้ติดต่อ"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "ข้อมูลเกี่ยวกับ vCard ไม่ถูกต้อง กรุณาโหลดหน้าเวปใหม่อีกครั้ง"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "ไม่พบข้อผิดพลาดใดๆ, ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหญ่เกินจำนวนที่กำหนดไว้ในคำสั่ง upload_max_filesize ที่อยู่ในไฟล์ php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหญ่เกินจำนวนที่กำหนดไว้ในคำสั่ง MAX_FILE_SIZE ที่ถูกระบุไว้ในรูปแบบของ HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "ไฟล์ถูกอัพโหลดได้เพียงบางส่วนเท่านั้น"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "ไม่มีไฟล์ที่ถูกอัพโหลด"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "โฟลเดอร์ชั่วคราวเกิดการสูญหาย"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "ไม่สามารถโหลดรูปภาพชั่วคราวได้: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "ไม่สามารถบันทึกรูปภาพชั่วคราวได้: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "ไม่พบตำแหน่งพาธของรูปภาพ"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "ไม่มีไฟล์ดังกล่าวอยู่ในระบบ"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "เกิดข้อผิดพลาดในการโหลดรูปภาพ"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "เกิดข้อผิดพลาดในการสร้างรูปภาพชั่วคราว"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "เกิดข้อผิดพลาดในการครอบตัดภาพ"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "เกิดข้อผิดพลาดในการปรับขนาดรูปภาพ"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "เกิดข้อผิดพลาดในการดึงคุณสมบัติของรูปภาพ"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "เกิดข้อผิดพลาดในการเพิ่มกลุ่ม"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "รหัสกลุ่มที่ร้องขอเกิดการสูญหาย"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "รหัสรายชื่อผู้ติดต่อที่ร้องขอเกิดการสูญหาย"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "เกิดข้อผิดพลาดในการอัพโหลดข้อมูลการติดต่อไปยังพื้นที่จัดเก็บข้อมูล"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "ไม่สามารถกำหนดการตั้งค่าส่่วนตัว:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "ข้อมูลการติดต่อ"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "อื่นๆ"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "หน้าแรก"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "ที่ทำงาน"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "บ้าน"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "มือถือ"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "ข้อความ"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "เสียงพูด"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "ข้อความ"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "โทรสาร"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "วีดีโอ"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "เพจเจอร์"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "อินเทอร์เน็ต"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "เพื่อน"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "ครอบครัว"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "สร้างรายชื่อผู้ติดต่อใหม่"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "สร้างกลุ่มใหม่"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "ยกเลิกการเลือกทั้งหมด"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "กลุ่ม"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "รายการโปรด"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "ปุ่มลัด"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "ระบบเมนู"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "ข้อมูลผู้ติดต่อถัดไปในรายการ"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "ข้อมูลผู้ติดต่อก่อนหน้าในรายการ"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "ขยาย/ย่อ สมุดบันทึกที่อยู่ปัจจุบัน"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "สมุดบันทึกที่อยู่ถัดไป"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "สมุดบันทึกที่อยู่ก่อนหน้า"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "การกระทำ"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "รีเฟรชรายชื่อผู้ติดต่อใหม่"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "เพิ่มข้อมูลผู้ติดต่อใหม่"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "เพิ่มสมุดบันทึกที่อยู่ใหม่"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "ลบข้อมูลผู้ติดต่อปัจจุบัน"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "เพิ่มชื่อผู้ติดต่อ"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "ลบกลุ่ม"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "เขียนอีเมล"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "ลบรูปภาพปัจจุบัน"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "แก้ไขรูปภาพปัจจุบัน"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "อัพโหลดรูปภาพใหม่"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "เลือกรูปภาพจาก ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "ชื่อ"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "ชื่อจริง"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "ชื่ออื่นๆ"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "นามสกุลจริง"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "เลือกกลุ่ม"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "ชื่อเล่น"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "กรอกชื่อเล่น"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "ชื่อ"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "หน่วยงาน"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "วันเกิด"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "เขียนบันทึกกำกับตรงนี้..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "โทรศัพท์"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "อีเมล"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "ส่งข้อความโต้ตอบแบบทันที"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "ที่อยู่"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "หมายเหตุ"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "เว็บไซต์"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "ลบข้อมูลการติดต่อ"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "พิเศษ"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "กรุณาระบุที่อยู่อีเมลที่ถูกต้อง"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "ส่งอีเมลไปที่"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "ลบที่อยู่อีเมล"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "กรอกหมายเลขโทรศัพท์"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "ลบหมายเลขโทรศัพท์"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "ไปที่เว็บไซต์"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "ลบที่อยู่ URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "ดูบนแผนที่"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "ลบที่อยู่"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "ที่อยู่"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "รหัสไปรษณีย์"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "เมือง"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "ประเทศ"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "โปรแกรมรับส่งข้อความ"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "ลบ IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "เปิดใช้"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "แชร์"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "ส่งออก"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "ที่อยู่ที่ใช้เชื่อมข้อมูลกับ CardDAV"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "ข้อมูลเพิ่มเติม"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "ที่อยู่หลัก (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "สมุดบันทึกที่อยู่"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "สร้างสมุดบันทึกข้อมูลการติดต่อใหม่"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "คำอธิบาย"
diff --cc apps/contacts/l10n/tr/contacts.po
index 51112bf,0000000..11ae1c6
mode 100644,000000..100644
--- a/apps/contacts/l10n/tr/contacts.po
+++ b/apps/contacts/l10n/tr/contacts.po
@@@ -1,1172 -1,0 +1,1172 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Aranel Surion <aranel at aranelsurion.org>, 2011, 2012
 +# Caner BAŞARAN <basaran.caner at gmail.com>, 2012
 +# otefenli <otefenli at gmail.com>, 2013
 +# alpere <info at beyboo.de>, 2012
 +# ismail yenigül <ismail.yenigul at surgate.com>, 2013
 +# mesutgungor <mesutgungor at iyte.edu.tr>, 2012
 +# Murat Bişkin <mbiskin at gmail.com>, 2012
 +# tridinebandim, 2013
 +# Necdet Yücel <necdetyucel at gmail.com>, 2012
 +# volkangezer <volkangezer at gmail.com>, 2013
 +# KAT.RAT12 <spanish.katerina at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: volkangezer <volkangezer at gmail.com>\n"
 +"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: tr\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Kontaklar"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Kaydet"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Yükleniyor..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "İçeri aktarılıyor..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr "Hazırlanıyor..."
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "{total} kişinin {count} tanesi içeri aktarıldı"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "{imported} kişi içeri aktarıldı.  {failed} başarısız oldu."
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "{name} isimli adres defteri zaten var."
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "Adres defteri eklenemedi: {error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "Adres defterleri yüklenirken başarısız olundu: : {error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Bağlantılar listeleniyor"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "Adres defterleri yüklenirken düzeltilemeyen hata oluştu: {msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "Hata."
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Ekle..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Sil..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Grup ekle..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "Geçersiz URL: \"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Bir posta düzenleyicisi açarken hata oluştu."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "Geçersiz eposta: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "Birleştirme başarısız. Kişi bulunamadı: {id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "Birleştirme başarısız."
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "Birleştirme başarısız. Kişi kaydedilirken hata oluştu."
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Fotograf seç"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Ağ veya sunucu hatası. Lütfen sistem yöneticisini bilgilendirin."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Gruba eklerken hata."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Gruptan çıkarırken hata."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "{name} favori olarak ayarlanırken hata oluştu."
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "Kişileri birleştir"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "İptal"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Grup ekle"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "Kişi bulunamadı: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Yükleme için dosya seçilmedi."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Yüklemeye çalıştığınız dosya sunucudaki dosya yükleme maksimum boyutunu aşmaktadır. "
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Profil fotografını düzenle"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "Fotoğrafı kırp"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Doğru mu?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "Tarih ayıklanırken hata: {date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# gruplar"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr "{bday} doğum günü ayıklanırken hata: {error}"
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Bazı kişiler silinmek için işaretlendi, hala silinmedi. Silinmesi için bekleyin."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "{num} kişinin silinmesini geri almak için tıklayın"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "{num} kişinin silinmesi iptal edildi"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Ekle"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Kişi zaten bu grupta."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Kişiler zaten bu gruptalar."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Kişi listesi alınamadı."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Kişi bu grupta değil."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Kişiler bu grupta değiller."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "Grup adını değiştirme başarısız: {error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "{group} isimli bir grup zaten var"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "Groupları sürükleyerek\nistediğiniz gibi düzenleyebilirsiniz"
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "Grup ekleme başarısız: {error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Tümü"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Favoriler"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "{owner} tarafından paylaşılmış"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "Gruplanmadı"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "Grup yüklemesi başarısız: {error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Yeni adres defterini seç"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "İçe aktar:"
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "İçe aktarım şablonu yüklenirken hata"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "Kişileri içe aktar"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "İçe aktar"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "İçe aktarma tamamlandı"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Kapat"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Hata"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "GörünenAd boş olamaz."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "CardDav bağlantısı göster"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Salt-okur VCF bağlantısı göster"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "İndir"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Düzenle"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Sil"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Devamı..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "daha küçük"
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr "Sunucu hatası! Lütfen sistem yöneticisini bilgilendirin"
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "Foto yüklemesi başarısız: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "Bu kişileri görmek için izniniz yok"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "Bağlantı bulunamadı."
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "Bu kişileri görmek için izniniz yok"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "Adres defterine kişi eklemek için izniniz yok"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "Bu adres defterinin geri plandaki mekanizması kişi eklemeyi desteklemiyor."
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "Bu kişiyi silmek için izniniz yok."
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "Bu adres defterinin arka plandaki mekanizması kişi silmeyi desteklemiyor"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Bilinmeyen hata"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "Bu adres defterinin geri plandaki mekanizması güncellemeyi desteklemiyor."
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "Bu adres defterini güncellemek için yetkiniz yok."
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "Bu adres defterini silmek için izniniz yok."
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "Adres defteri bulunamadı."
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "Bu kişileri görmek için izniniz yok"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "Bu kişi bilgilerini güncellemek için izniniz yok."
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "Bu kişinin geri plandaki mekanizması güncellemeyi desteklemiyor."
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "Bu geri plan mekanizması kişi eklemeyi desteklemiyor."
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "Özellik bulunamadı"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "Şunun için eksik IM parametresi:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Bilinmeyen IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}'nin Doğumgünü"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "Adres defteri oluşturma hatası"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "Adres defteri güncelleme hatası"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "\"%s\" adres defterini silmek için izniniz yok"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "Adres defteri silme hatası"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "Kişi oluşturmada hata."
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "Kişi silmede hata."
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "Kişi bilgilerini çekmede hata."
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Bağlantıyı kaydederken hata"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "Kişiyi diğer adres defterinden silmede hata"
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "Kişi bulunamadı."
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr "Kişi veri alım isteği yok."
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "Kişileri birleştirmede hata."
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "Kişiyi  geri plan mekanizmasına kaydetmede hata"
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "Özellik adı atanmadı."
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "Özellik için checksum atanmadı."
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "Kişi güncellenirken hata"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "Kişi arka uca kaydedilirken hata"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "Kullanıcı fotoğrafı alınırken hata"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Dosya yüklenmedi. Bilinmeyen hata"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Dosya başarıyla yüklendi, hata oluşmadı"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Dosyanın boyutu php.ini dosyasındaki upload_max_filesize limitini aşıyor"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Yüklenecek dosyanın boyutu HTML formunda belirtilen MAX_FILE_SIZE limitini aşıyor"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Dosya kısmen karşıya yüklenebildi"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Hiç dosya gönderilmedi"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Geçici dizin eksik"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Geçici resmi yükleyemedi :"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Geçici resmi saklayamadı : "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Fotoğraf girilmedi."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Dosya mevcut değil:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "İmaj yükleme hatası."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "Resim önbellekten silindi"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Geçici resim oluştururken hata oluştu"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Görüntü kırpılamadı."
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Görüntü yeniden boyutlandırılamadı."
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Resim özelleğini alırken hata oluştu."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "Grup adı belirtilmedi"
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Grup ekleme hatası."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "Değiştirmek için bir grup adı belirtilmedi."
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "Değiştimek için bir grup adı verilmedi"
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "Grup adını değiştirirken hata oluştu."
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "İstekde grup IS eksik."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "İstekde grup adı belirtilmedi."
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "İstekde Contact ID yok."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Diske yazılamadı"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Yeterli disk alanı yok"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "Karalistede bulunan dosya yükleme girişimi:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Bağlantıları depoya yükleme hatası"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr "Dosyalar içe aktarım klasörüne taşınırken hata oluştu."
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "Bu adres defterine ekleme yetkiniz yok."
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "İstekte dosya adı eksik."
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "İstekte süreç anahtarı eksik"
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "Karaliste dosyasına erişim girişimi:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "Şurada hiçbir kişi bulunamadı:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "Hiçbir anahtar belirtilmedi."
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "Hiçbir değer belirtilmedi."
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Özellik atanamadı:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Kişi"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Diğer"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Ana Sayfa"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "İnternet araması"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "İş"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Ev"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Mobil"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Metin"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Ses"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "mesaj"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Faks"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Sayfalayıcı"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "İnternet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Arkadaşlar"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Aile"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Yeni Kişi"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "Grup adı"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Yeni Grup"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "Adres defterleri"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "Görünen ad"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "Adres defteri ekle"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "Dosya seç..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "Hepsini seç(me)"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "Sıralama şekli"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "İsim Soyisim"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "Soyisim, İsim"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Gruplar"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Sık Kullanılanlar"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "Seçileni birleştir"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Klavye kısayolları"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Dolaşım"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Listedeki sonraki kişi"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Listedeki önceki kişi"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Şuanki adres defterini genişlet/daralt"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Sonraki adresdefteri"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Önceki adresdefteri"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Eylemler"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Kişi listesini tazele"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Yeni kişi ekle"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Yeni adres defteri ekle"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Şuanki kişiyi sil"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>Adres defterinizde hiç bağlantınız yok veya adres defteriniz devre dışı.</h3><p>Yeni bir bağlantı ekleyin veya mevcut kişileri bir VCF dosyasından içe aktarın.</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Bağlatı ekle"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Grubu sil"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "Grup adını değştir"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "Veri hangi kişi ile birleştirilmeli?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "Başarılı bir şekilde birleştirme yaptıktan sonra diğer(ler)i silinsin mi?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Posta oluştur"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Mevcut fotoğrafı sil"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Mevcut fotoğrafı düzenle"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Yeni fotoğraf yükle"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "ownCloud'dan bir fotoğraf seç"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "İsim"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "İsim"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "İlave isimler"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Soyisim"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Grupları seç"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "Adres defteri seç"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Takma ad"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Takma adı girin"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Başlık"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "Başlık girin"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Organizasyon"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "Organizasyonu girin"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Doğum günü"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Notları buraya ekleyin."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "VCF olarak dışa aktar"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr "Alan ekle..."
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Telefon"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Eposta"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Anında Mesajlaşma"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Adres"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Not"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Web sitesi"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Kişiyi sil"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Tercih edilen"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Lütfen geçerli bir eposta adresi belirtin."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "biri@örnek.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Eposta adresi"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Eposta adresini sil"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Telefon numarasını gir"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Telefon numarasını sil"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Web sitesine git"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "URL'yi sil"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Haritada gör"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Adresi sil"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "1600 4. Levent"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Sokak adresi"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Posta kodu"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr "İstanbul"
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Şehir"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr "Marmara Bölgesi"
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "Eyalet"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "Türkiye"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Ülke"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "IM Sil"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Aktif"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Paylaş"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Dışa aktar"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV bağlantısı"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV adresleri eşzamanlıyor"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "daha fazla bilgi"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Öncelikli adres"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Adres defterleri"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Yeni Adres Defteri"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Tanımlama"
diff --cc apps/contacts/l10n/ug/contacts.po
index a15c5b7,0000000..53d4403
mode 100644,000000..100644
--- a/apps/contacts/l10n/ug/contacts.po
+++ b/apps/contacts/l10n/ug/contacts.po
@@@ -1,1161 -1,0 +1,1161 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Uighur (http://www.transifex.com/projects/p/owncloud/language/ug/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ug\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "ئالاقەداشلار"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "ساقلا"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "يۈكلەۋاتىدۇ…"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "ۋاز كەچ"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "جەزملە"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "قوش"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "ئەكىر"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "ياپ"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "خاتالىق"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "چۈشۈر"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "تەھرىر"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "ئۆچۈر"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "يوچۇن خاتالىق"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "ھېچقانداق ھۆججەت يۈكلەنمىدى. يوچۇن خاتالىق"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "ھېچقانداق ھۆججەت يۈكلەنمىدى"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "ۋاقىتلىق قىسقۇچ كەم."
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "دىسكىغا يازالمىدى"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "يېتەرلىك ساقلاش بوشلۇقى يوق"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "باشقا"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "ئىش"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr ""
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "قىسقا ئۇچۇر"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "گۇرۇپپا"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "ئاتى"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "ماۋزۇ"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "تۇغۇلغان كۈن"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "تورخەت"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "ئادرېس"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "ئاكتىپ"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "ھەمبەھىر"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "چىقار"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "تېخىمۇ كۆپ ئۇچۇرلار"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "ئاساسىي ئادرېس (ئالاقە ئۇچۇرى قاتارلىق)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "چۈشەندۈرۈش"
diff --cc apps/contacts/l10n/uk/contacts.po
index 1d3b5ba,0000000..3529f9b
mode 100644,000000..100644
--- a/apps/contacts/l10n/uk/contacts.po
+++ b/apps/contacts/l10n/uk/contacts.po
@@@ -1,1166 -1,0 +1,1166 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# skoptev <skoptev at ukr.net>, 2012
 +# Soul Kim <warlock.rf at gmail.com>, 2012
 +# VicDeo <victor.dubiniuk at gmail.com>, 2012
 +# volodya327 <volodya327 at gmail.com>, 2012-2013
 +# volodya327 <volodya327 at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: uk\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"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Контакти"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Зберегти"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "Вивантаження..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Імпортування..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Індексування контактів"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Додати до..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Видалити з..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Додати групу..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Виникла помилка при відкриванні поштової програми."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Оберіть фото"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Мережева або серверна помилка. Будь ласка, проінформуйте адміністратора."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Помилка при додаванні у групу."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Помилка при видаленні з групи."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Відмінити"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Додати групу"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Не обрано файлів для завантаження."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Файл, який Ви намагаєтесь завантажити перевищує максимальний розмір файлу, що дозволено завантажувати на даний сервер."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Редагувати зображення облікового запису"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Це вірно?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Деякі контакти помічено для видалення, але ще не видалені. Будь ласка, зачекайте, доки вони будуть видалені."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Натисніть для відміни видалення {num} контактів"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Додати"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Контакт вже у даній групі."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Контакти вже у даній групі."
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Не вдалося отримати список контактів."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Контакт не в даній групі."
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Контакти не в даній групі."
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Група з назвою {group} вже існує"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Всі"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Улюблені"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Опублікував {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Будь ласка, оберіть адресну книгу"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Імпорт"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Імпортування виконано"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Закрити"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Помилка"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Ім'я для відображення не може бути порожнім."
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Показати посилання CardDav"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Показати VCF посилання тільки для читання"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Завантажити"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Редагувати"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Видалити"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "Більше..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "Менше..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Невідома помилка"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Невідомий IM: "
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "День народження {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Помилка при збереженні контакту."
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Інформація про vCard помилкова. Будь ласка, перезавантажте сторінку."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Не завантажено жодного файлу. Невідома помилка"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Файл успішно вивантажено без помилок."
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Розмір відвантаженого файлу перевищує директиву upload_max_filesize в php.ini"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Розмір відвантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Файл відвантажено лише частково"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Не відвантажено жодного файлу"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Відсутній тимчасовий каталог"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Не вдалося завантажити тимчасове зображення: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Неможливо зберегти тимчасовий образ: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Не надано шлях до зображення."
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Файл не існує:"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Помилка завантаження зображення."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Помилка при створенні тимчасового зображення"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Помилка обрізки зображення"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Помилка при зміні розміру зображення"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Помилка при отриманні ФОТО властивості."
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Помилка при додаванні групи."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "В запиті відсутній ID групи."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "В запиті відсутній ID контакту."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Невдалося записати на диск"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Місця більше немає"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Помилка завантаження контактів у сховище."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Не вдалося встановити важливість: "
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Контакт"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Інше"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Домашня Сторінка"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Робота"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Домашня адреса"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Мобільний"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Текст"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Голос"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Повідомлення"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Факс"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Відео"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "Пейджер"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Інтернет"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Друзі"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Сім'я"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Новий контакт"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Нова група"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Відміна) виділення усіх"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Групи"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Улюблений"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Сполучення клавіш"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Навігація"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Наступний контакт у списку"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Попередній контакт у списку"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Розгорнути/згорнути поточну адресну книгу"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Наступна адресна книга"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Попередня адресна книга"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Дії"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Оновити список контактів"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Додати новий контакт"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Додати нову адресну книгу"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Видалити даний контакт"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Додати контакт"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Видалити групу"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Написати листа"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Видалити поточне фото"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Редагувати поточне фото"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Завантажити нове фото"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Обрати фото з ownCloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Ім'я"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Ім'я"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Додаткові імена"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Прізвище"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Оберіть групи"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Прізвисько"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Ввести прізвисько"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Назва"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Організація"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "День народження"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Тут будуть примітки..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Телефон"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Ел.пошта"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Instant Messaging"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Адреса"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Примітка"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Веб-сайт"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Видалити контакт"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Пріоритетний"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Будь ласка, вкажіть вірну адресу електронної пошти."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Написати листа за адресою"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Видалити адресу електронної пошти"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Ввести номер телефону"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Видалити номер телефону"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Перейти на веб-сайт"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Видалити URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Переглянути на карті"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Видалити адресу"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Адреса"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Поштовий індекс"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Місто"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Країна"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Instant Messenger"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Видалити IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Активний"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Поділитися"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Експорт"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV синхронізує адреси"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "більше інформації"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Початкова адреса"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Адресні книги"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Нова адресна книга"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Опис"
diff --cc apps/contacts/l10n/vi/contacts.po
index 8b56dee,0000000..c62a722
mode 100644,000000..100644
--- a/apps/contacts/l10n/vi/contacts.po
+++ b/apps/contacts/l10n/vi/contacts.po
@@@ -1,1167 -1,0 +1,1167 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Tuấn Kiệt Hồ <hotuankiet_2000 at yahoo.com>, 2013
 +# khanhnd <khanhnd at kenhgiaiphap.vn>, 2012
 +# mattheu_9x <mattheu.9x at gmail.com>, 2012
 +# mattheu_9x <mattheu.9x at gmail.com>, 2012
 +# saosangm <saosangmo at yahoo.com>, 2013
 +# Sơn Nguyễn <sonnghit at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: vi\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "Danh bạ"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "Lưu"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "tải lên..."
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "Đang nhập vào..."
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "Chỉ mục địa chỉ liên lạc"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "Thêm đến..."
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "Xóa từ..."
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "Thêm nhóm..."
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "Lỗi mở phần soạn email."
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "Chọn ảnh"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "Mạng hoặc máy chủ lỗi. Vui lòng liên hệ người quản trị."
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "Lỗi thêm vào nhóm."
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "Lỗi xóa khỏi nhóm."
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "Hủy"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "Thêm nhóm"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "Chấp nhận"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "Không có tập tin nào được chọn để tải lên."
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "Các tập tin bạn đang cố gắng tải lên vượt quá kích thước tối đa cho tập tin tải lên trên máy chủ."
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "Chỉnh sửa hồ sơ ảnh"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "Bạn có chắc điều này là đúng không?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "Một số địa chỉ liên lạc được đánh dấu để xóa, nhưng chưa bị xóa . Hãy đợi đến khi họ xóa."
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "Nhấn vào đây để  quay lại thao tác xóa {num} địa chỉ liên lạc"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "Thêm"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "Liên lạc đã có trong nhóm này."
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "Thông tin liên lạc đã có trong nhóm"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "Không thể nhận được danh dách liên lạc."
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "Không có Liên hệ trong nhóm này"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "Thông tin liên lạc không có trong nhóm"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "Tên nhóm {group} đã tồn tại"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "Tất cả"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "Ưa thích"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "Được chia sẽ bởi {owner}"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "Chọn sổ địa chỉ"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "Nhập vào"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "Thực hiện import"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "Đóng"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "Lỗi"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "Tên hiển thị không được để trống :"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "Hiển thị CardDav "
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "Hiển thị liên kết VCF chỉ đọc"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "Tải về"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "Sửa"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "Xóa"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "nhiều hơn..."
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr " ít hơn..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "Lỗi chưa biết"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "Không biết IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "Sinh nhật của {name}"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "Lỗi khi lưu liên lạc"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "Thông tin vCard không chính xác. Vui lòng tải lại trang."
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "Không có tập tin nào được tải lên. Lỗi không xác định"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "Không có lỗi, các tập tin đã được tải lên thành công"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "Dung lượng file tải lên vượt quá giới hạn upload_max_filesize cho phép."
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "Tập tin được tải lên vượt quá MAX_FILE_SIZE được quy định trong mẫu HTML"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "Các tập tin được tải lên chỉ tải lên được một phần"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "Chưa có file nào được tải lên"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "Không tìm thấy thư mục tạm"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "Không thể tải hình ảnh tạm thời:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "Không thể lưu ảnh tạm thời:"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "Đường dẫn hình ảnh bị thiếu"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "Tập tin không tồn tại"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "Lỗi khi tải hình ảnh."
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "Lỗi khi tạo tệp tin tạm"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "Lỗi khi cắt ảnh"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "Lỗi khi chỉnh kích thước ảnh"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "Lỗi lấy thuộc tính ảnh"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "Lỗi thêm nhóm."
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "ID nhóm không tìm thấy."
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "ID liên lạc không tìm thấy."
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "Không thể ghi "
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "Không đủ không gian lưu trữ"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "Lỗi tải lên danh sách địa chỉ để lưu trữ."
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "Không thể thiết lập ưu tiên:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "Liên lạc"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "Khác"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "Trang chủ"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "Công việc"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "Nhà"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "Di động"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "Văn bản"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "Giọng nói"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "Tin nhắn"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "Fax"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "Video"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "số trang"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "Mạng internet"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "Bạn bè"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "Gia đình"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "Liên lạc mới"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "Nhóm mới"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(Hủy) chọn tất cả"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "Nhóm"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "Ưu thích"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "Phím tắt"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "Navigation"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "Liên lạc tiếp theo"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "Liên lạc trước"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "Đóng/mở sổ địa chỉ"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "Tới addressbook"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "Lùi lại addressbook"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "Actions"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "Làm mới danh sách liên lạc"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "Thêm liên lạc mới"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "Thêm sổ địa chỉ mới"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "Xóa liên lạc hiện tại"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "Thêm liên lạc"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "Xóa nhóm"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "Soạn email"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "Xóa hình ảnh hiện tại"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "Sửa hình ảnh hiện tại"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "Tải hình ảnh mới"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "Chọn hình đã tải lên Kcloud"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "Tên"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "Tên"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "Tên bổ sung"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "Họ"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "Chọn nhóm"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "Biệt danh"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "Nhập nickname"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "Tiêu đề"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "Tổ chức"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "Ngày sinh nhật"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "Chú ý vào đây..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "Điện thoại"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "Email"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "Hệ thống tin nhắn khẩn cấp"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "Địa chỉ"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "Ghi chép"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "Web site"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "Xóa liên lạc"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "Được ưu tiên"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "Vui lòng nhập địa chỉ Email hợp lệ."
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "Gửi email"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "Xóa Email"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "Nhập số điện thoại"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "Xóa số điện thoại"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "Đi tới website"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "Xóa URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "Xem trên bản đồ"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "Xóa địa chỉ"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "Địa chỉ nhà"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "Mã bưu chính"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "Thành phố"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "Quốc gia"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "Tin nhắn khẩn cấp"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "Xóa IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "Kích hoạt"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "Chia sẻ"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "Xuất ra"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV đồng bộ địa chỉ"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "Thông tin thêm"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "Địa chỉ chính (Kontact et al)"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "Sổ địa chỉ"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "Sổ địa chỉ mới"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "Mô tả"
diff --cc apps/contacts/l10n/zh_CN/contacts.po
index b32603c,0000000..3cceb96
mode 100644,000000..100644
--- a/apps/contacts/l10n/zh_CN/contacts.po
+++ b/apps/contacts/l10n/zh_CN/contacts.po
@@@ -1,1179 -1,0 +1,1179 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# hanfeng <appweb.cn at gmail.com>, 2013
 +# hanfeng <appweb.cn at gmail.com>, 2012
 +# ccb <ccb3275 at gmail.com>, 2013
 +# houqp <dave2008713 at gmail.com>, 2012
 +# dtsang29 <dtsang29 at hotmail.com>, 2013
 +# Dianjin Wang <1132321739qq at gmail.com>, 2012-2013
 +# heyinglong <heyinglong at hotmail.com>, 2013
 +# fkj <fengkaijia at gmail.com>, 2013
 +# marguerite su <i at marguerite.su>, 2013
 +# Phoenix Nemo <mrphoenixlzx at gmail.com>, 2012
 +# leonfeng <rainofchaos at gmail.com>, 2012
 +# waterone <suiy02 at gmail.com>, 2013
 +# waterone <suiy02 at gmail.com>, 2012
 +# tonnie <supertonnie at hotmail.com>, 2012
 +# modokwang <modokwang at gmail.com>, 2013
 +# Xuetian Weng <wengxt at gmail.com>, 2013
 +# Xuetian Weng <wengxt at gmail.com>, 2011, 2012
 +# zhangmin <zm1990s at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: zh_CN\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "联系人"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "保存"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "上传中……"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "导入中"
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "已从{total}个联系人导入{count}个"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "已导入{imported}联系人。{failed}失败。"
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "名为{name}的地址薄已存在"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "添加地址薄失败:{error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "加载地址薄失败:{error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "联系人索引中"
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "加载地址薄时遇到无法恢复的错误:{msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "错误"
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "添加到"
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "从…删除"
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "添加分组…"
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "无效URL:\"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "打开邮件撰写器时出错。"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "无效的电子邮件: \"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "合并失败。无法找到联系人:{id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "合并失败"
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "合并失败。保存联系人出错。"
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "选择图片"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "网络或服务器错误。请通知管理员。"
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "添加到组时出错。"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "从组删除时出错。"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "无法将{name}设为喜欢。"
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "合并联系人"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "取消"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "添加分组"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "OK"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "不能找到联系人: {id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "没有选择文件以上传"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "您试图上传的文件超出了该服务器的最大文件限制"
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "编辑配置图片"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "这正确吗?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "解析日期出错:{date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "#群组"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "一些联系人已被标注为删除,但是尚未完成,请稍候。"
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "点击以撤销删除这{num}个联系人"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "增加"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "联系人已经在此分组中。"
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "联系人都已经在这个组中。"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "无法获取联系人列表。"
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "联系人不在此分组中。"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "联系人都不在此分组中。"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "重命名分组失败:{error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "分组{group}已存在。"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "您可以通过拖拽分组的方式来按您喜欢的方式摆放他们。"
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "添加分组失败:{error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "全部"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "收藏"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "由{owner}共享"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "未分组"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "加载分组失败:{error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr "请选择地址簿"
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "导入至..."
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr "加载导入模板出错"
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr "导入联系人"
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "导入"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr "导入完毕"
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "关闭"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "错误"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "显示名称不能为空"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "显示CardDav连接"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "显示只读VCF连接"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "下载"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "编辑"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "删除"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "更多"
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "更少..."
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "加载照片失败:{error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "你没有权限查看此联系人"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "联系人未找到"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "您没有权限查看这些联系人"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "您没有权限添加联系人到此地址簿"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "此地址簿的后端不支持添加联系人"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "你没有权限删除此联系人"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "此地址簿的后端不支持删除联系人"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "未知错误"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "此地址簿的后端不支持更新"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "你没有权限更新地址簿"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "您没有权限删除地址簿"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "地址簿未找到"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "你没有权限查看此联系人"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "你没有权限更新此联系人"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "此地址簿的后端不支持更新它"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "此后端不支持添加联系人"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "属性未找到"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "这些缺少IM参数:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "未知即时通讯服务:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name} 的生日"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "创建地址薄出错"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "更新地址簿出错"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "你没有权限删除地址簿“%s”"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "删除地址薄出错"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "创建联系人出错。"
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "删除联系人出错。"
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "检索联系人出错。"
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "保存联系人时出错。"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "从其他地址簿移除联系人出错。"
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "无法找到联系人。"
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "合并到联系人出错。"
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "保存联系人到后台出错。"
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "属性名称未设置。"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "属性校验值未设置。"
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "vCard 的信息不正确。请重新加载页面。"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr "更新联系人错误。"
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr "保存联系人到后台出错。"
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "没有文件被上传。未知错误"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "文件上传成功,没有错误发生"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "上传的文件长度超出了 php.ini 中 upload_max_filesize 的限制"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "上传的文件超过MAX_FILE_SIZE的指令是在HTML表单中中指定的"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "已上传文件只上传了部分(不完整)"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "没有文件被上传"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "缺少临时目录"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "无法加载临时图像: "
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "无法保存临时图像: "
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "未提供照片路径。"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "文件不存在"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "加载图片错误。"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "创建临时图像时出错"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "裁切图像时出错"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "缩放图像时出错"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "获取照片属性时出错。"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "未指定组名称。"
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "添加分组错误。"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "未指定分组名称。"
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "未指定重命名的分组名称。"
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "重命名分组错误。"
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "请求缺少分组ID。"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "请求中缺少分组名"
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "请求缺少联系人ID。"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "写入磁盘失败"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "没有足够的存储空间"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "尝试上传黑名单文件:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "上传联系人到存储空间时出错"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "您没有权限导入到此地址簿。"
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "请求缺少文件名。"
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "请求缺少进度。"
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "尝试访问黑名单文件:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "在这里未找到联系人:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "未指定键。"
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "未指定值。"
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "无法设定偏好:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "联系人"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "其它"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "主页"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "网络呼叫"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "工作"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "家庭"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "手机"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "文本"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "语音"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "消息"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "传真"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "视频"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "传呼机"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "互联网"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "朋友"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "家庭"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "新建联系人"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "组名称"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "新建分组"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "地址簿"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "显示名称"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "添加地址薄"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "选择文件..."
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "选择 (反选) 全部"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "排序"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "名- 姓"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "姓-, 名"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "组"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "收藏"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "合并选择项"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "快捷键"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "导航"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "列表中的下一个联系人"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "列表中的上一个联系人"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "展开/收起此地址簿"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "下一个地址簿"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "上一个地址簿"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "地址"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "刷新联系人列表"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "新增联系人"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "新增地址簿"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "删除当前联系人"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "添加联系人"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "删除分组"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "重命名组"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "要将数据合并到哪个联系人?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "在成功合并后删除其他项?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "编写邮件"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "删除当前照片"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "编辑当前照片"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "上传新照片"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "从 ownCloud 选择照片"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "名称"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "名"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "其他名称"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "姓"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "选择分组"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "选择地址薄"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "昵称"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "输入昵称"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "标题"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "输入头衔"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "组织"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "输入组织"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "生日"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "注释放在这里..."
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "导出为 VCF"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "电话"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "电子邮件"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "即时通讯"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "地址"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "注释"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "网址"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "删除联系人"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "偏好"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "请指定合法的电子邮件地址"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "发送邮件到地址"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "删除电子邮件地址"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "输入电话号码"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "删除电话号码"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "访问网址"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "删除 URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "在地图上显示"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "删除地址"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "街道地址"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "邮政编码"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "城市"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "州/省"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "国家"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "即时通讯"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "删除即时通讯工具"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "活动"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "共享"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "导出"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "CardDAV 链接"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV 同步地址"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "更多信息"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "主地址"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "地址簿"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "新建地址簿"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "描述"
diff --cc apps/contacts/l10n/zh_HK/contacts.po
index c234d87,0000000..119b448
mode 100644,000000..100644
--- a/apps/contacts/l10n/zh_HK/contacts.po
+++ b/apps/contacts/l10n/zh_HK/contacts.po
@@@ -1,1162 -1,0 +1,1162 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# dtsang29 <dtsang29 at hotmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: zh_HK\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "聯絡人"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "儲存"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr ""
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr ""
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr ""
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr ""
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr ""
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr ""
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr ""
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr ""
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr ""
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr ""
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr ""
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr ""
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr ""
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr ""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr ""
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr ""
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr ""
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr ""
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr ""
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr ""
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr ""
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr ""
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "取消"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr ""
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "確定"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr ""
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr ""
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr ""
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr ""
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr ""
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr ""
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr ""
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr ""
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr ""
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr ""
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "加入"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr ""
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr ""
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr ""
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr ""
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr ""
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr ""
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr ""
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr ""
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr ""
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr ""
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr ""
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr ""
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr ""
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr ""
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "導入"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr "關閉"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "錯誤"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr ""
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr ""
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr ""
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "下載"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "編輯"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "刪除"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr ""
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr ""
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr ""
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr ""
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr ""
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr ""
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr ""
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr ""
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr ""
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr ""
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr ""
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr ""
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr ""
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr ""
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr ""
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr ""
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr ""
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr ""
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr ""
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr ""
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr ""
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr ""
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr ""
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr ""
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr ""
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr ""
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr ""
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr ""
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr ""
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr ""
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr ""
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr ""
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr ""
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr ""
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr ""
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr ""
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr ""
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "工作"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "主頁"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr ""
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "文字"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr ""
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr ""
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr ""
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr ""
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr ""
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr ""
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr ""
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr ""
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr ""
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr ""
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr ""
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr ""
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr ""
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr ""
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr ""
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr ""
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr ""
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr ""
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "群組"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr ""
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr ""
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr ""
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr ""
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr ""
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr ""
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr ""
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr ""
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr ""
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr ""
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr ""
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr ""
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr ""
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr ""
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr ""
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr ""
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr ""
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr ""
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr ""
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr ""
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "名稱"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr ""
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr ""
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr ""
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr ""
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr ""
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr ""
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "標題"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr ""
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr ""
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr ""
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "生日"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr ""
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr ""
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr ""
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "電郵"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr ""
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "地址"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr ""
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr ""
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr ""
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr ""
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr ""
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr ""
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr ""
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr ""
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr ""
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr ""
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr ""
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr ""
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr ""
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr ""
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr ""
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr ""
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr ""
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr ""
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr ""
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr ""
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr ""
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr ""
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr ""
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "分享"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr ""
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr ""
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "更多"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "主要地址"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OSX"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr ""
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr ""
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr ""
diff --cc apps/contacts/l10n/zh_TW/contacts.po
index 09ea1fd,0000000..edcd60d
mode 100644,000000..100644
--- a/apps/contacts/l10n/zh_TW/contacts.po
+++ b/apps/contacts/l10n/zh_TW/contacts.po
@@@ -1,1173 -1,0 +1,1173 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# admachen <admachen at gmail.com>, 2013
 +# Hydriz <admin at alphacorp.tk>, 2013
 +# chenanyeh <chnjsn1221 at gmail.com>, 2013
 +# Donahue Chuang, 2012
 +# dw4dev <dw4dev at gmail.com>, 2012
 +# Eddy Chang <taiwanmambo at gmail.com>, 2012
 +# Hydriz <admin at alphacorp.tk>, 2013
 +# tonytonyjan <tonytonyjan at gmail.com>, 2013
 +# shark.zero <shark.zero at outlook.com>, 2013
 +# pellaeon <nfsmwlin at gmail.com>, 2013
 +# ronnietse <tseronnie at ymail.com>, 2013
 +# ywang <ywang1007 at gmail.com>, 2012
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:53-0500\n"
- "PO-Revision-Date: 2013-11-09 07:00+0000\n"
++"POT-Creation-Date: 2013-11-15 20:06-0500\n"
++"PO-Revision-Date: 2013-11-11 08:11+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: zh_TW\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:28 lib/app.php:103
 +msgid "Contacts"
 +msgstr "通訊錄"
 +
 +#: js/addressbooks.js:83 js/groups.js:518 templates/settings.php:61
 +msgid "Save"
 +msgstr "儲存"
 +
 +#: js/addressbooks.js:298
 +msgid "Uploading..."
 +msgstr "上傳中…"
 +
 +#: js/addressbooks.js:301 js/loader.js:68
 +msgid "Importing..."
 +msgstr "匯入中…"
 +
 +#: js/addressbooks.js:324
 +msgid "Preparing..."
 +msgstr ""
 +
 +#: js/addressbooks.js:372
 +msgid "Imported {count} of {total} contacts"
 +msgstr "已匯入 {count}筆/共{total} 筆聯絡人資料"
 +
 +#: js/addressbooks.js:394
 +msgid "Imported {imported} contacts. {failed} failed."
 +msgstr "成功匯入{imported}筆聯絡人資料,有{failed}筆匯入失敗。"
 +
 +#: js/addressbooks.js:550
 +msgid "An address book called {name} already exists"
 +msgstr "通訊錄 {name} 已存在"
 +
 +#: js/addressbooks.js:584
 +msgid "Failed adding address book: {error}"
 +msgstr "通訊錄匯入失敗:{error}"
 +
 +#: js/addressbooks.js:626
 +msgid "Failed loading address books: {error}"
 +msgstr "通訊錄載入失敗:{error}"
 +
 +#: js/app.js:215
 +msgid "Indexing contacts"
 +msgstr "正在建立聯絡人索引..."
 +
 +#: js/app.js:225
 +msgid "Unrecoverable error loading address books: {msg}"
 +msgstr "載入通訊錄時發生無法修正的錯誤:{msg}"
 +
 +#: js/app.js:226
 +msgid "Error."
 +msgstr "錯誤。"
 +
 +#: js/app.js:317 js/app.js:331
 +msgid "Add to..."
 +msgstr "加入至…"
 +
 +#: js/app.js:321 js/app.js:333
 +msgid "Remove from..."
 +msgstr "從…移除"
 +
 +#: js/app.js:338
 +msgid "Add group..."
 +msgstr "新增群組"
 +
 +#: js/app.js:468
 +msgid "Invalid URL: \"{url}\""
 +msgstr "無效的 URL :\"{url}\""
 +
 +#: js/app.js:479
 +msgid "There was an error opening a mail composer."
 +msgstr "開啟郵件編輯器發生錯誤。"
 +
 +#: js/app.js:484
 +msgid "Invalid email: \"{url}\""
 +msgstr "無效的電子郵件:\"{url}\""
 +
 +#: js/app.js:562
 +msgid "Merge failed. Cannot find contact: {id}"
 +msgstr "合併失敗,沒有找到聯絡人:{id}"
 +
 +#: js/app.js:575
 +msgid "Merge failed."
 +msgstr "合併失敗。"
 +
 +#: js/app.js:582
 +msgid "Merge failed. Error saving contact."
 +msgstr "合併失敗,儲存聯絡人時發生錯誤。"
 +
 +#: js/app.js:602
 +msgid "Select photo"
 +msgstr "選擇相片"
 +
 +#: js/app.js:678 js/app.js:1570
 +msgid "Network or server error. Please inform administrator."
 +msgstr "網路或伺服器錯誤,請通知系統管理員。"
 +
 +#: js/app.js:894
 +msgid "Error adding to group."
 +msgstr "新增到群組時出錯。"
 +
 +#: js/app.js:917
 +msgid "Error removing from group."
 +msgstr "從群組中移除出錯。"
 +
 +#: js/app.js:1104
 +msgid "Error setting {name} as favorite."
 +msgstr "設定 {name} 為最愛時發生錯誤。"
 +
 +#: js/app.js:1243 js/app.js:1247 templates/contacts.php:182
 +msgid "Merge contacts"
 +msgstr "合併聯絡人"
 +
 +#: js/app.js:1269 js/app.js:1322 js/settings.js:120 templates/contacts.php:321
 +#: templates/settings.php:62
 +msgid "Cancel"
 +msgstr "取消"
 +
 +#: js/app.js:1296 templates/contacts.php:163
 +msgid "Add group"
 +msgstr "新增群組"
 +
 +#: js/app.js:1300
 +msgid "OK"
 +msgstr "好"
 +
 +#: js/app.js:1394
 +msgid "Could not find contact: {id}"
 +msgstr "找不到聯絡人:{id}"
 +
 +#: js/app.js:1417
 +msgid "No files selected for upload."
 +msgstr "沒有選定上傳的檔案。"
 +
 +#: js/app.js:1427
 +msgid ""
 +"The file you are trying to upload exceed the maximum size for file uploads "
 +"on this server."
 +msgstr "您想要上傳的檔案大小超過伺服器限制。"
 +
 +#: js/app.js:1528
 +msgid "Edit profile picture"
 +msgstr "編輯大頭貼照"
 +
 +#: js/app.js:1532
 +msgid "Crop photo"
 +msgstr "裁切相片"
 +
 +#: js/contacts.js:589
 +msgid "Is this correct?"
 +msgstr "是否正確?"
 +
 +#: js/contacts.js:856
 +msgid "Error parsing date: {date}"
 +msgstr "錯誤的解析日期:{date}"
 +
 +#: js/contacts.js:1053
 +msgid "# groups"
 +msgstr "# groups"
 +
 +#: js/contacts.js:1125
 +msgid "Error parsing birthday {bday}: {error}"
 +msgstr ""
 +
 +#: js/contacts.js:2162
 +msgid ""
 +"Some contacts are marked for deletion, but not deleted yet. Please wait for "
 +"them to be deleted."
 +msgstr "有一些聯絡人被標記為將刪除但是尚未刪除,稍等一下就會刪除了。"
 +
 +#: js/contacts.js:2173
 +msgid "Click to undo deletion of {num} contacts"
 +msgstr "點一下來復原刪除 {num} 個聯絡人"
 +
 +#: js/contacts.js:2182
 +msgid "Cancelled deletion of {num} contacts"
 +msgstr "取消 {num} 個聯絡人的刪除動作"
 +
 +#: js/groups.js:53
 +msgid "Add"
 +msgstr "增加"
 +
 +#: js/groups.js:263
 +msgid "Contact is already in this group."
 +msgstr "該聯絡人已在此群組中。"
 +
 +#: js/groups.js:276
 +msgid "Contacts are already in this group."
 +msgstr "聯絡人皆已在此群組中。"
 +
 +#: js/groups.js:342
 +msgid "Couldn't get contact list."
 +msgstr "無法取得聯絡人清單。"
 +
 +#: js/groups.js:353
 +msgid "Contact is not in this group."
 +msgstr "聯絡人不在此群組中。"
 +
 +#: js/groups.js:367
 +msgid "Contacts are not in this group."
 +msgstr "聯絡人皆不在此群組中。"
 +
 +#: js/groups.js:566
 +msgid "Failed renaming group: {error}"
 +msgstr "重新命名群組失敗:{error}"
 +
 +#: js/groups.js:597
 +msgid "A group named {group} already exists"
 +msgstr "群組 {group} 已經存在"
 +
 +#: js/groups.js:632
 +msgid ""
 +"You can drag groups to\n"
 +"arrange them as you like."
 +msgstr "你可以拖曳群組以你喜歡的方式排列。"
 +
 +#: js/groups.js:645
 +msgid "Failed adding group: {error}"
 +msgstr "加入群組失敗:{error}"
 +
 +#: js/groups.js:657
 +msgid "All"
 +msgstr "所有"
 +
 +#: js/groups.js:672 js/groups.js:675
 +msgid "Favorites"
 +msgstr "最愛"
 +
 +#: js/groups.js:736
 +msgid "Shared by {owner}"
 +msgstr "由 {owner} 分享"
 +
 +#: js/groups.js:751
 +msgid "Not grouped"
 +msgstr "不在群組裡"
 +
 +#: js/groups.js:777
 +msgid "Failed loading groups: {error}"
 +msgstr "載入群組失敗:{error}"
 +
 +#: js/loader.js:21
 +msgid "Please choose the addressbook"
 +msgstr ""
 +
 +#: js/loader.js:22 templates/contacts.php:29
 +msgid "Import into..."
 +msgstr "匯入至…"
 +
 +#: js/loader.js:31
 +msgid "Error loading import template"
 +msgstr ""
 +
 +#: js/loader.js:48
 +msgid "Import contacts"
 +msgstr ""
 +
 +#: js/loader.js:61 templates/contacts.php:25
 +msgid "Import"
 +msgstr "匯入"
 +
 +#: js/loader.js:92
 +msgid "Import done"
 +msgstr ""
 +
 +#: js/loader.js:95 templates/contacts.php:91 templates/contacts.php:322
 +msgid "Close"
 +msgstr " 關閉"
 +
 +#: js/settings.js:25 js/settings.js:45 js/settings.js:75 js/settings.js:112
 +msgid "Error"
 +msgstr "錯誤"
 +
 +#: js/settings.js:75
 +msgid "Displayname cannot be empty."
 +msgstr "顯示名稱不能留空。"
 +
 +#: js/settings.js:97 templates/settings.php:26
 +msgid "Show CardDav link"
 +msgstr "顯示 CardDAV 連結"
 +
 +#: js/settings.js:98 templates/settings.php:29
 +msgid "Show read-only VCF link"
 +msgstr "顯示 VCF 唯讀連結"
 +
 +#: js/settings.js:99 templates/contacts.php:57 templates/contacts.php:78
 +#: templates/contacts.php:323 templates/settings.php:40
 +msgid "Download"
 +msgstr "下載"
 +
 +#: js/settings.js:101 templates/contacts.php:467 templates/settings.php:45
 +msgid "Edit"
 +msgstr "編輯"
 +
 +#: js/settings.js:102 templates/contacts.php:58 templates/contacts.php:77
 +#: templates/contacts.php:268 templates/contacts.php:275
 +#: templates/contacts.php:282 templates/contacts.php:289
 +#: templates/contacts.php:337 templates/contacts.php:468
 +#: templates/settings.php:50
 +msgid "Delete"
 +msgstr "刪除"
 +
 +#: js/settings.js:159 templates/settings.php:66
 +msgid "More..."
 +msgstr "更多…"
 +
 +#: js/settings.js:162
 +msgid "Less..."
 +msgstr "較少…"
 +
 +#: js/storage.js:30
 +msgid "Server error! Please inform system administator"
 +msgstr ""
 +
 +#: js/storage.js:335 js/storage.js:374
 +msgid "Failed loading photo: {error}"
 +msgstr "圖片載入失敗: {error}"
 +
 +#: lib/addressbook.php:152
 +msgid "You do not have permissions to see this contacts"
 +msgstr "您沒有權限檢視這個聯絡人。"
 +
 +#: lib/addressbook.php:159
 +msgid "Contact not found"
 +msgstr "找不到聯絡人"
 +
 +#: lib/addressbook.php:186
 +msgid "You do not have permissions to see these contacts"
 +msgstr "您沒有權限檢視這些聯絡人。"
 +
 +#: lib/addressbook.php:213
 +msgid "You do not have permissions add contacts to the address book"
 +msgstr "您沒有權限新增聯絡人至這本通訊錄。"
 +
 +#: lib/addressbook.php:216
 +msgid "The backend for this address book does not support adding contacts"
 +msgstr "這本通訊錄的後端不支援新增聯絡人"
 +
 +#: lib/addressbook.php:240 lib/addressbook.php:266 lib/contact.php:246
 +msgid "You do not have permissions to delete this contact"
 +msgstr "您沒有權限刪除這位聯絡人。"
 +
 +#: lib/addressbook.php:243 lib/addressbook.php:269
 +msgid "The backend for this address book does not support deleting contacts"
 +msgstr "這本通訊錄的後端不支援刪除聯絡人"
 +
 +#: lib/addressbook.php:290
 +msgid "Unknown error"
 +msgstr "未知的錯誤"
 +
 +#: lib/addressbook.php:332
 +msgid "The backend for this address book does not support updating"
 +msgstr "這本通訊錄的後端不支援編輯聯絡人"
 +
 +#: lib/addressbook.php:358
 +msgid "You don't have permissions to update the address book."
 +msgstr "您沒有權限編輯這本通訊錄。"
 +
 +#: lib/addressbook.php:369
 +msgid "You don't have permissions to delete the address book."
 +msgstr "您沒有權限刪除這本通訊錄。"
 +
 +#: lib/app.php:144
 +msgid "Address book not found"
 +msgstr "找不到通訊錄"
 +
 +#: lib/contact.php:112 lib/contact.php:159
 +msgid "You do not have permissions to see this contact"
 +msgstr "您沒有權限檢視這個聯絡人"
 +
 +#: lib/contact.php:261
 +msgid "You do not have permissions to update this contact"
 +msgstr "您沒有權限編輯這位聯絡人"
 +
 +#: lib/contact.php:272
 +msgid "The backend for this contact does not support updating it"
 +msgstr "這個聯絡人的後端不支援編輯"
 +
 +#: lib/contact.php:290
 +msgid "This backend not support adding contacts"
 +msgstr "後端不支援新增聯絡人"
 +
 +#: lib/contact.php:400 lib/contact.php:417
 +msgid "Property not found"
 +msgstr "找不到這個屬性"
 +
 +#: lib/contact.php:465
 +msgid " Missing IM parameter for: "
 +msgstr "遺失的 IM 參數:"
 +
 +#: lib/contact.php:473
 +msgid "Unknown IM: "
 +msgstr "未知的 IM:"
 +
 +#: lib/contact.php:750
 +msgid "{name}'s Birthday"
 +msgstr "{name}的生日"
 +
- #: lib/controller/addressbookcontroller.php:110
++#: lib/controller/addressbookcontroller.php:112
 +msgid "Error creating address book"
 +msgstr "建立通訊錄出現錯誤"
 +
- #: lib/controller/addressbookcontroller.php:127
++#: lib/controller/addressbookcontroller.php:129
 +msgid "Error updating address book"
 +msgstr "編輯通訊錄出現錯誤"
 +
- #: lib/controller/addressbookcontroller.php:155
++#: lib/controller/addressbookcontroller.php:157
 +#, php-format
 +msgid "You do not have permissions to delete the \"%s\" address book"
 +msgstr "你沒有刪除\"%s\"通訊錄的權限"
 +
- #: lib/controller/addressbookcontroller.php:161
++#: lib/controller/addressbookcontroller.php:163
 +msgid "Error deleting address book"
 +msgstr "刪除通訊錄出現錯誤"
 +
- #: lib/controller/addressbookcontroller.php:199
++#: lib/controller/addressbookcontroller.php:201
 +msgid "Error creating contact."
 +msgstr "建立聯絡人出現錯誤"
 +
- #: lib/controller/addressbookcontroller.php:235
++#: lib/controller/addressbookcontroller.php:237
 +msgid "Error deleting contact."
 +msgstr "刪除聯絡人出現錯誤"
 +
- #: lib/controller/addressbookcontroller.php:275
++#: lib/controller/addressbookcontroller.php:277
 +msgid "Error retrieving contact."
 +msgstr "取得聯絡人出現錯誤"
 +
- #: lib/controller/addressbookcontroller.php:285
++#: lib/controller/addressbookcontroller.php:287
 +#: lib/controller/contactphotocontroller.php:332
 +msgid "Error saving contact."
 +msgstr "儲存聯絡人時發生錯誤"
 +
- #: lib/controller/addressbookcontroller.php:289
++#: lib/controller/addressbookcontroller.php:291
 +msgid "Error removing contact from other address book."
 +msgstr "從其他通訊錄移除聯絡人時發生錯誤。"
 +
 +#: lib/controller/contactcontroller.php:37
 +#: lib/controller/contactcontroller.php:64
 +#: lib/controller/contactcontroller.php:97
 +#: lib/controller/contactphotocontroller.php:38
 +#: lib/controller/contactphotocontroller.php:274
 +#: lib/controller/exportcontroller.php:66
 +msgid "Couldn't find contact."
 +msgstr "找不到聯絡人"
 +
 +#: lib/controller/contactcontroller.php:60
 +msgid "No contact data in request."
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:68
 +msgid "Error merging into contact."
 +msgstr "合併聯絡人資料時出現錯誤"
 +
 +#: lib/controller/contactcontroller.php:71
 +msgid "Error saving contact to backend."
 +msgstr "儲存聯絡人資料至後端時出現錯誤"
 +
 +#: lib/controller/contactcontroller.php:102
 +msgid "Property name is not set."
 +msgstr "尚未設定屬性名稱"
 +
 +#: lib/controller/contactcontroller.php:107
 +msgid "Property checksum is not set."
 +msgstr "尚未設定檢查碼"
 +
 +#: lib/controller/contactcontroller.php:126
 +msgid "Information about vCard is incorrect. Please reload the page."
 +msgstr "有關 vCard 的資訊不正確,請重新載入此頁。"
 +
 +#: lib/controller/contactcontroller.php:135
 +msgid "Error updating contact"
 +msgstr ""
 +
 +#: lib/controller/contactcontroller.php:140
 +msgid "Error saving contact to backend"
 +msgstr ""
 +
 +#: lib/controller/contactphotocontroller.php:69
 +msgid "Error getting user photo"
 +msgstr "取得使用者相片時發生錯誤"
 +
 +#: lib/controller/contactphotocontroller.php:87
 +#: lib/controller/importcontroller.php:36
 +msgid "No file was uploaded. Unknown error"
 +msgstr "沒有檔案被上傳。未知的錯誤。"
 +
 +#: lib/controller/contactphotocontroller.php:95
 +#: lib/controller/importcontroller.php:44
 +msgid "There is no error, the file uploaded with success"
 +msgstr "無錯誤,檔案上傳成功"
 +
 +#: lib/controller/contactphotocontroller.php:96
 +#: lib/controller/importcontroller.php:45
 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
 +msgstr "上傳的檔案超過了 php.ini 中的 upload_max_filesize 設定"
 +
 +#: lib/controller/contactphotocontroller.php:97
 +#: lib/controller/importcontroller.php:47
 +msgid ""
 +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 +"the HTML form"
 +msgstr "上傳的檔案大小超過 HTML 表單中 MAX_FILE_SIZE 的限制"
 +
 +#: lib/controller/contactphotocontroller.php:98
 +#: lib/controller/importcontroller.php:48
 +msgid "The uploaded file was only partially uploaded"
 +msgstr "只有檔案的一部分被上傳"
 +
 +#: lib/controller/contactphotocontroller.php:99
 +#: lib/controller/importcontroller.php:49
 +msgid "No file was uploaded"
 +msgstr "沒有檔案被上傳"
 +
 +#: lib/controller/contactphotocontroller.php:100
 +#: lib/controller/importcontroller.php:50
 +msgid "Missing a temporary folder"
 +msgstr "找不到暫存資料夾"
 +
 +#: lib/controller/contactphotocontroller.php:115
 +msgid "Couldn't load temporary image: "
 +msgstr "無法載入暫存圖片:"
 +
 +#: lib/controller/contactphotocontroller.php:124
 +#: lib/controller/contactphotocontroller.php:162
 +msgid "Couldn't save temporary image: "
 +msgstr "無法儲存暫存影像"
 +
 +#: lib/controller/contactphotocontroller.php:191
 +msgid "No photo path was submitted."
 +msgstr "沒有提供相片路徑"
 +
 +#: lib/controller/contactphotocontroller.php:198
 +msgid "File doesn't exist:"
 +msgstr "檔案不存在"
 +
 +#: lib/controller/contactphotocontroller.php:203
 +#: lib/controller/contactphotocontroller.php:206
 +msgid "Error loading image."
 +msgstr "載入影像時發生錯誤"
 +
 +#: lib/controller/contactphotocontroller.php:279
 +msgid "Image has been removed from cache"
 +msgstr "圖片已經從快取中移除"
 +
 +#: lib/controller/contactphotocontroller.php:285
 +msgid "Error creating temporary image"
 +msgstr "產生暫存圖片發生錯誤"
 +
 +#: lib/controller/contactphotocontroller.php:292
 +msgid "Error cropping image"
 +msgstr "修剪圖片發生錯誤"
 +
 +#: lib/controller/contactphotocontroller.php:297
 +msgid "Error resizing image"
 +msgstr "縮放圖片發生錯誤"
 +
 +#: lib/controller/contactphotocontroller.php:315
 +msgid "Error getting PHOTO property."
 +msgstr "讀取 PHOTO 屬性時發生錯誤"
 +
 +#: lib/controller/groupcontroller.php:57 lib/controller/groupcontroller.php:79
 +msgid "No group name given."
 +msgstr "未設定群組名稱"
 +
 +#: lib/controller/groupcontroller.php:64
 +msgid "Error adding group."
 +msgstr "新增群組錯誤"
 +
 +#: lib/controller/groupcontroller.php:127
 +msgid "No group name to rename from given."
 +msgstr "未提供要更名的群組名稱"
 +
 +#: lib/controller/groupcontroller.php:131
 +msgid "No group name to rename to given."
 +msgstr "未設定新群組名稱"
 +
 +#: lib/controller/groupcontroller.php:137
 +msgid "Error renaming group."
 +msgstr "群組更名錯誤"
 +
 +#: lib/controller/groupcontroller.php:175
 +#: lib/controller/groupcontroller.php:223
 +msgid "Group ID missing from request."
 +msgstr "請求中缺少群組 ID"
 +
 +#: lib/controller/groupcontroller.php:180
 +msgid "Group name missing from request."
 +msgstr "請求中缺少群組名稱"
 +
 +#: lib/controller/groupcontroller.php:185
 +#: lib/controller/groupcontroller.php:228
 +msgid "Contact ID missing from request."
 +msgstr "請求中缺少聯絡人 ID"
 +
 +#: lib/controller/importcontroller.php:51
 +msgid "Failed to write to disk"
 +msgstr "寫入硬碟失敗"
 +
 +#: lib/controller/importcontroller.php:62
 +msgid "Not enough storage available"
 +msgstr "儲存空間不足"
 +
 +#: lib/controller/importcontroller.php:70
 +msgid "Attempt to upload blacklisted file:"
 +msgstr "試圖上傳被禁止的檔案:"
 +
 +#: lib/controller/importcontroller.php:92
 +msgid "Error uploading contacts to storage."
 +msgstr "上傳聯絡人到儲存空間時發生錯誤"
 +
 +#: lib/controller/importcontroller.php:137
 +msgid "Error moving file to imports folder."
 +msgstr ""
 +
 +#: lib/controller/importcontroller.php:154
 +msgid "You do not have permissions to import into this address book."
 +msgstr "您沒有權限將資料匯入至這本通訊錄。"
 +
 +#: lib/controller/importcontroller.php:162
 +msgid "File name missing from request."
 +msgstr "請求中缺少檔名"
 +
 +#: lib/controller/importcontroller.php:167
 +#: lib/controller/importcontroller.php:283
 +msgid "Progress key missing from request."
 +msgstr "請求中缺少 progress key"
 +
 +#: lib/controller/importcontroller.php:173
 +msgid "Attempt to access blacklisted file:"
 +msgstr "試圖存取被禁止的檔案:"
 +
 +#: lib/controller/importcontroller.php:215
 +msgid "No contacts found in: "
 +msgstr "在這些地方找不到聯絡人:"
 +
 +#: lib/controller/settingscontroller.php:35
 +msgid "No key is given."
 +msgstr "沒有提供鍵名"
 +
 +#: lib/controller/settingscontroller.php:39
 +msgid "No value is given."
 +msgstr "沒有提供鍵值"
 +
 +#: lib/controller/settingscontroller.php:50
 +msgid "Could not set preference: "
 +msgstr "無法設定偏好:"
 +
 +#: lib/searchprovider.php:24
 +msgid "Contact"
 +msgstr "通訊錄"
 +
 +#: lib/utils/jsonserializer.php:111 lib/utils/properties.php:160
 +#: lib/utils/properties.php:173 lib/utils/properties.php:180
 +#: lib/utils/properties.php:195
 +msgid "Other"
 +msgstr "其他"
 +
 +#: lib/utils/jsonserializer.php:114
 +msgid "HomePage"
 +msgstr "首頁"
 +
 +#: lib/utils/properties.php:71
 +msgid "Jabber"
 +msgstr "Jabber"
 +
 +#: lib/utils/properties.php:76
 +msgid "Internet call"
 +msgstr "網際網路呼叫"
 +
 +#: lib/utils/properties.php:81
 +msgid "AIM"
 +msgstr "AIM"
 +
 +#: lib/utils/properties.php:86
 +msgid "MSN"
 +msgstr "MSN"
 +
 +#: lib/utils/properties.php:91
 +msgid "Twitter"
 +msgstr "Twitter"
 +
 +#: lib/utils/properties.php:96
 +msgid "GoogleTalk"
 +msgstr "GoogleTalk"
 +
 +#: lib/utils/properties.php:101
 +msgid "Facebook"
 +msgstr "Facebook"
 +
 +#: lib/utils/properties.php:106
 +msgid "XMPP"
 +msgstr "XMPP"
 +
 +#: lib/utils/properties.php:111
 +msgid "ICQ"
 +msgstr "ICQ"
 +
 +#: lib/utils/properties.php:116
 +msgid "Yahoo"
 +msgstr "Yahoo"
 +
 +#: lib/utils/properties.php:121
 +msgid "Skype"
 +msgstr "Skype"
 +
 +#: lib/utils/properties.php:126
 +msgid "QQ"
 +msgstr "QQ"
 +
 +#: lib/utils/properties.php:131
 +msgid "GaduGadu"
 +msgstr "GaduGadu"
 +
 +#: lib/utils/properties.php:158 lib/utils/properties.php:166
 +#: lib/utils/properties.php:177 lib/utils/properties.php:194
 +msgid "Work"
 +msgstr "工作"
 +
 +#: lib/utils/properties.php:159 lib/utils/properties.php:164
 +#: lib/utils/properties.php:178
 +msgid "Home"
 +msgstr "住宅"
 +
 +#: lib/utils/properties.php:165
 +msgid "Mobile"
 +msgstr "行動電話"
 +
 +#: lib/utils/properties.php:167
 +msgid "Text"
 +msgstr "文字"
 +
 +#: lib/utils/properties.php:168
 +msgid "Voice"
 +msgstr "語音"
 +
 +#: lib/utils/properties.php:169
 +msgid "Message"
 +msgstr "訊息"
 +
 +#: lib/utils/properties.php:170
 +msgid "Fax"
 +msgstr "傳真"
 +
 +#: lib/utils/properties.php:171
 +msgid "Video"
 +msgstr "影片"
 +
 +#: lib/utils/properties.php:172
 +msgid "Pager"
 +msgstr "呼叫器"
 +
 +#: lib/utils/properties.php:179
 +msgid "Internet"
 +msgstr "網際網路"
 +
 +#: lib/utils/properties.php:192
 +msgid "Friends"
 +msgstr "朋友"
 +
 +#: lib/utils/properties.php:193
 +msgid "Family"
 +msgstr "親人"
 +
 +#: templates/contacts.php:6
 +msgid "New Contact"
 +msgstr "新聯絡人"
 +
 +#: templates/contacts.php:10
 +msgid "Group name"
 +msgstr "群組名稱"
 +
 +#: templates/contacts.php:10
 +msgid "New Group"
 +msgstr "新群組"
 +
 +#: templates/contacts.php:19
 +msgid "Address books"
 +msgstr "通訊錄"
 +
 +#: templates/contacts.php:22 templates/contacts.php:47
 +#: templates/contacts.php:67
 +msgid "Display name"
 +msgstr "顯示名稱"
 +
 +#: templates/contacts.php:22
 +msgid "Add Address Book"
 +msgstr "新增通訊錄"
 +
 +#: templates/contacts.php:31 templates/contacts.php:32
 +msgid "Select file..."
 +msgstr "選擇檔案…"
 +
 +#: templates/contacts.php:45 templates/contacts.php:65
 +msgid "(De-)select all"
 +msgstr "(反)全選"
 +
 +#: templates/contacts.php:46 templates/contacts.php:66
 +msgid "Sort order"
 +msgstr "排序方式"
 +
 +#: templates/contacts.php:48 templates/contacts.php:68
 +msgid "First- Lastname"
 +msgstr "名字 - 姓氏"
 +
 +#: templates/contacts.php:49 templates/contacts.php:69
 +msgid "Last-, Firstname"
 +msgstr "姓氏 - 名字"
 +
 +#: templates/contacts.php:53 templates/contacts.php:80
 +msgid "Groups"
 +msgstr "群組"
 +
 +#: templates/contacts.php:55 templates/contacts.php:82
 +msgid "Favorite"
 +msgstr "我的最愛"
 +
 +#: templates/contacts.php:56 templates/contacts.php:83
 +msgid "Merge selected"
 +msgstr "合併已選擇的項目"
 +
 +#: templates/contacts.php:92
 +msgid "Keyboard shortcuts"
 +msgstr "快速鍵"
 +
 +#: templates/contacts.php:94
 +msgid "Navigation"
 +msgstr "導覽"
 +
 +#: templates/contacts.php:97
 +msgid "Next contact in list"
 +msgstr "清單中的下一位聯絡人"
 +
 +#: templates/contacts.php:99
 +msgid "Previous contact in list"
 +msgstr "清單中的上一位聯絡人"
 +
 +#: templates/contacts.php:101
 +msgid "Expand/collapse current addressbook"
 +msgstr "展開/收合目前的通訊錄"
 +
 +#: templates/contacts.php:103
 +msgid "Next addressbook"
 +msgstr "下一本通訊錄"
 +
 +#: templates/contacts.php:105
 +msgid "Previous addressbook"
 +msgstr "上一本通訊錄"
 +
 +#: templates/contacts.php:109
 +msgid "Actions"
 +msgstr "動作"
 +
 +#: templates/contacts.php:112
 +msgid "Refresh contacts list"
 +msgstr "重新整理聯絡人清單"
 +
 +#: templates/contacts.php:114
 +msgid "Add new contact"
 +msgstr "新增聯絡人"
 +
 +#: templates/contacts.php:116
 +msgid "Add new addressbook"
 +msgstr "新增通訊錄"
 +
 +#: templates/contacts.php:118
 +msgid "Delete current contact"
 +msgstr "刪除這個聯絡人"
 +
 +#: templates/contacts.php:124
 +msgid ""
 +"<h3>You have no contacts in your address book or your address book is "
 +"disabled.</h3><p>Add a new contact or import existing contacts from a VCF "
 +"file.</p>"
 +msgstr "<h3>您的通訊錄中無聯絡人,或是您的通訊錄未啓用</h3><p>請加入新的聯絡人或從 VCF 檔案匯入聯絡人</p>"
 +
 +#: templates/contacts.php:127
 +msgid "Add contact"
 +msgstr "新增聯絡人"
 +
 +#: templates/contacts.php:174
 +msgid "Delete group"
 +msgstr "刪除群組"
 +
 +#: templates/contacts.php:175
 +msgid "Rename group"
 +msgstr "更名群組"
 +
 +#: templates/contacts.php:183
 +msgid "Which contact should the data be merged into?"
 +msgstr "要將資料匯入至哪一個聯絡人?"
 +
 +#: templates/contacts.php:191
 +msgid "Delete the other(s) after successful merge?"
 +msgstr "合併成功後刪除多餘的聯絡人?"
 +
 +#: templates/contacts.php:203
 +msgid "Compose mail"
 +msgstr "撰寫郵件"
 +
 +#: templates/contacts.php:225
 +msgid "Delete current photo"
 +msgstr "刪除這張相片"
 +
 +#: templates/contacts.php:226
 +msgid "Edit current photo"
 +msgstr "編輯目前相片"
 +
 +#: templates/contacts.php:227
 +msgid "Upload new photo"
 +msgstr "上傳新照片"
 +
 +#: templates/contacts.php:228
 +msgid "Select photo from ownCloud"
 +msgstr "從 ownCloud 中挑選相片"
 +
 +#: templates/contacts.php:233 templates/settings.php:59
 +msgid "Name"
 +msgstr "名稱"
 +
 +#: templates/contacts.php:239 templates/contacts.php:240
 +msgid "First name"
 +msgstr "名子"
 +
 +#: templates/contacts.php:244 templates/contacts.php:245
 +msgid "Additional names"
 +msgstr "額外名"
 +
 +#: templates/contacts.php:249 templates/contacts.php:250
 +msgid "Last name"
 +msgstr "姓氏"
 +
 +#: templates/contacts.php:257
 +msgid "Select groups"
 +msgstr "選擇群組"
 +
 +#: templates/contacts.php:260
 +msgid "Select address book"
 +msgstr "選擇通訊錄"
 +
 +#: templates/contacts.php:264 templates/contacts.php:328
 +msgid "Nickname"
 +msgstr "綽號"
 +
 +#: templates/contacts.php:267
 +msgid "Enter nickname"
 +msgstr "輸入綽號"
 +
 +#: templates/contacts.php:271 templates/contacts.php:327
 +msgid "Title"
 +msgstr "標題"
 +
 +#: templates/contacts.php:274
 +msgid "Enter title"
 +msgstr "輸入標題"
 +
 +#: templates/contacts.php:278 templates/contacts.php:326
 +msgid "Organization"
 +msgstr "組織"
 +
 +#: templates/contacts.php:281
 +msgid "Enter organization"
 +msgstr "輸入組織"
 +
 +#: templates/contacts.php:285 templates/contacts.php:329
 +msgid "Birthday"
 +msgstr "生日"
 +
 +#: templates/contacts.php:316
 +msgid "Notes go here..."
 +msgstr "註釋在此處"
 +
 +#: templates/contacts.php:323
 +msgid "Export as VCF"
 +msgstr "以 VCF 匯出"
 +
 +#: templates/contacts.php:325
 +msgid "Add field..."
 +msgstr ""
 +
 +#: templates/contacts.php:330
 +msgid "Phone"
 +msgstr "電話"
 +
 +#: templates/contacts.php:331
 +msgid "Email"
 +msgstr "信箱"
 +
 +#: templates/contacts.php:332
 +msgid "Instant Messaging"
 +msgstr "即時通訊"
 +
 +#: templates/contacts.php:333
 +msgid "Address"
 +msgstr "網址"
 +
 +#: templates/contacts.php:334
 +msgid "Note"
 +msgstr "註解"
 +
 +#: templates/contacts.php:335
 +msgid "Web site"
 +msgstr "網站"
 +
 +#: templates/contacts.php:337
 +msgid "Delete contact"
 +msgstr "刪除通訊錄"
 +
 +#: templates/contacts.php:351 templates/contacts.php:366
 +#: templates/contacts.php:380 templates/contacts.php:405
 +#: templates/contacts.php:443
 +msgid "Preferred"
 +msgstr "首選"
 +
 +#: templates/contacts.php:353
 +msgid "Please specify a valid email address."
 +msgstr "註填入合法的電子郵件住址"
 +
 +#: templates/contacts.php:353
 +msgid "someone at example.com"
 +msgstr "someone at example.com"
 +
 +#: templates/contacts.php:355
 +msgid "Mail to address"
 +msgstr "寄送住址"
 +
 +#: templates/contacts.php:356
 +msgid "Delete email address"
 +msgstr "刪除電子郵件住址"
 +
 +#: templates/contacts.php:368
 +msgid "Enter phone number"
 +msgstr "輸入電話號碼"
 +
 +#: templates/contacts.php:370
 +msgid "Delete phone number"
 +msgstr "刪除電話號碼"
 +
 +#: templates/contacts.php:384
 +msgid "Go to web site"
 +msgstr "打開網站"
 +
 +#: templates/contacts.php:385
 +msgid "Delete URL"
 +msgstr "刪除 URL"
 +
 +#: templates/contacts.php:396
 +msgid "View on map"
 +msgstr "在地圖上檢視"
 +
 +#: templates/contacts.php:397
 +msgid "Delete address"
 +msgstr "刪除地址"
 +
 +#: templates/contacts.php:410
 +msgid "1600 Pennsylvania Avenue, NW"
 +msgstr "臺中市臺灣大道10號"
 +
 +#: templates/contacts.php:411
 +msgid "Street address"
 +msgstr "街道地址"
 +
 +#: templates/contacts.php:415
 +msgid "20500"
 +msgstr "20500"
 +
 +#: templates/contacts.php:416
 +msgid "Postal code"
 +msgstr "郵遞區號"
 +
 +#: templates/contacts.php:418
 +msgid "Washington, DC"
 +msgstr ""
 +
 +#: templates/contacts.php:419
 +msgid "City"
 +msgstr "城市"
 +
 +#: templates/contacts.php:423
 +msgid "District of Columbia"
 +msgstr ""
 +
 +#: templates/contacts.php:424
 +msgid "State or province"
 +msgstr "州或省"
 +
 +#: templates/contacts.php:428
 +msgid "USA"
 +msgstr "美國"
 +
 +#: templates/contacts.php:429
 +msgid "Country"
 +msgstr "國家"
 +
 +#: templates/contacts.php:451
 +msgid "Instant Messenger"
 +msgstr "即時通訊軟體"
 +
 +#: templates/contacts.php:453
 +msgid "Delete IM"
 +msgstr "刪除 IM"
 +
 +#: templates/contacts.php:461
 +msgid "Active"
 +msgstr "作用中"
 +
 +#: templates/contacts.php:464 templates/settings.php:36
 +msgid "Share"
 +msgstr "分享"
 +
 +#: templates/contacts.php:465
 +msgid "Export"
 +msgstr "匯出"
 +
 +#: templates/contacts.php:466
 +msgid "CardDAV link"
 +msgstr "顯示 CardDav 連結"
 +
 +#: templates/settings.php:3
 +msgid "CardDAV syncing addresses"
 +msgstr "CardDAV 同步位址"
 +
 +#: templates/settings.php:3
 +msgid "more info"
 +msgstr "更多資訊"
 +
 +#: templates/settings.php:5
 +msgid "Primary address (Kontact et al)"
 +msgstr "主要地址"
 +
 +#: templates/settings.php:7
 +msgid "iOS/OS X"
 +msgstr "iOS/OS X"
 +
 +#: templates/settings.php:11
 +msgid "Addressbooks"
 +msgstr "電話簿"
 +
 +#: templates/settings.php:58
 +msgid "New Address Book"
 +msgstr "新電話簿"
 +
 +#: templates/settings.php:60
 +msgid "Description"
 +msgstr "描述"
diff --cc apps/contacts/lib/controller/addressbookcontroller.php
index 8eca8f5,0000000..d07ddbe
mode 100644,000000..100644
--- a/apps/contacts/lib/controller/addressbookcontroller.php
+++ b/apps/contacts/lib/controller/addressbookcontroller.php
@@@ -1,295 -1,0 +1,297 @@@
 +<?php
 +/**
 + * @author Thomas Tanghus
 + * Copyright (c) 2013 Thomas Tanghus (thomas at tanghus.net)
 + * This file is licensed under the Affero General Public License version 3 or
 + * later.
 + * See the COPYING-README file.
 + */
 +
 +namespace OCA\Contacts\Controller;
 +
 +use OCA\Contacts\App,
 +	OCA\Contacts\JSONResponse,
 +	OCA\Contacts\Utils\JSONSerializer,
 +	OCA\Contacts\Controller,
 +	OCP\AppFramework\Http;
 +
 +/**
 + * Controller class For Address Books
 + */
 +class AddressBookController extends Controller {
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function userAddressBooks() {
 +		$addressBooks = $this->app->getAddressBooksForUser();
 +		$result = array();
 +		$lastModified = 0;
 +		foreach($addressBooks as $addressBook) {
 +			$data = $addressBook->getMetaData();
 +			$result[] = $data;
 +			if(!is_null($data['lastmodified'])) {
 +				$lastModified = max($lastModified, $data['lastmodified']);
 +			}
 +		}
 +
 +		// To avoid invalid cache deletion time is saved
 +		$lastModified = max(
 +			$lastModified,
 +			\OCP\Config::getUserValue($this->api->getUserId(), 'contacts', 'last_address_book_deleted', 0)
 +		);
 +
 +		$response = new JSONResponse(array(
- 				'addressbooks' => $result,
- 			));
++			'addressbooks' => $result,
++		));
 +
++		/** FIXME: Caching is currently disabled
 +		if($lastModified > 0) {
 +			$response->setLastModified(\DateTime::createFromFormat('U', $lastModified) ?: null);
 +			$response->setETag(md5($lastModified));
 +		}
++		*/
 +
 +		return $response;
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function getAddressBook() {
 +		$params = $this->request->urlParams;
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +		$lastModified = $addressBook->lastModified();
 +		$etag = null;
 +		$response = new JSONResponse();
 +
 +		if(!is_null($lastModified)) {
 +			//$response->addHeader('Cache-Control', 'private, must-revalidate');
 +			$response->setLastModified(\DateTime::createFromFormat('U', $lastModified) ?: null);
 +			$etag = md5($lastModified);
 +			$response->setETag($etag);
 +		}
 +
 +		//$response->debug('comparing: "' . $etag . '" to ' . $this->request->getHeader('If-None-Match'));
 +		if(!is_null($etag)
 +			&& $this->request->getHeader('If-None-Match') === '"'.$etag.'"')
 +		{
 +			return $response->setStatus(Http::STATUS_NOT_MODIFIED);
 +		} else {
 +			$contacts = array();
 +			foreach($addressBook->getChildren() as $i => $contact) {
 +				$result = JSONSerializer::serializeContact($contact);
 +				if($result !== null) {
 +					$contacts[] = $result;
 +				}
 +			}
 +			return $response->setData(array('contacts' => $contacts));
 +		}
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function addAddressBook() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$backend = $this->app->getBackend($params['backend']);
 +		if(!$backend->hasAddressBookMethodFor(\OCP\PERMISSION_CREATE)) {
 +			throw new \Exception('Not implemented');
 +		}
 +		try {
 +			$id = $backend->createAddressBook($this->request->post);
 +		} catch(Exception $e) {
 +			return $response->bailOut($e->getMessage());
 +		}
 +		if($id === false) {
 +			return $response->bailOut(App::$l10n->t('Error creating address book'));
 +		}
 +
 +		return $response->setStatus('201')->setParams($backend->getAddressBook($id));
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function updateAddressBook() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +		try {
 +			if(!$addressBook->update($this->request['properties'])) {
 +				return $response->bailOut(App::$l10n->t('Error updating address book'));
 +			}
 +		} catch(Exception $e) {
 +			return $response->bailOut($e->getMessage());
 +		}
 +		return $response->setParams($addressBook->getMetaData());
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function deleteAddressBook() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$backend = $this->app->getBackend($params['backend']);
 +
 +		if(!$backend->hasAddressBookMethodFor(\OCP\PERMISSION_DELETE)) {
 +			throw new \Exception(
 +				'The "%s" backend does not support deleting address books', array($backend->name)
 +			);
 +		}
 +
 +		$addressBookInfo = $backend->getAddressBook($params['addressBookId']);
 +
 +		if(!$addressBookInfo['permissions'] & \OCP\PERMISSION_DELETE) {
 +			return $response->bailOut(App::$l10n->t(
 +				'You do not have permissions to delete the "%s" address book'),
 +				array($addressBookInfo['displayname']
 +			));
 +		}
 +
 +		if(!$backend->deleteAddressBook($params['addressBookId'])) {
 +			return $response->bailOut(App::$l10n->t('Error deleting address book'));
 +		}
 +		\OCP\Config::setUserValue($this->api->getUserId(), 'contacts', 'last_address_book_deleted', time());
 +		return $response;
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function activateAddressBook() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +
 +		$addressBook->setActive($this->request->post['state']);
 +
 +		return $response;
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function addChild() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +
 +		try {
 +			$id = $addressBook->addChild();
 +		} catch(Exception $e) {
 +			return $response->bailOut($e->getMessage());
 +		}
 +
 +		if($id === false) {
 +			return $response->bailOut(App::$l10n->t('Error creating contact.'));
 +		}
 +
 +		$contact = $addressBook->getChild($id);
 +		$response->setStatus('201');
 +		$response->setETag($contact->getETag());
 +		$response->addHeader('Location',
 +			\OCP\Util::linkToRoute(
 +				'contacts_contact_get',
 +				array(
 +					'backend' => $params['backend'],
 +					'addressBookId' => $params['addressBookId'],
 +					'contactId' => $id
 +				)
 +			)
 +		);
 +		return $response->setParams(JSONSerializer::serializeContact($contact));
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function deleteChild() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +
 +		try {
 +			$result = $addressBook->deleteChild($params['contactId']);
 +		} catch(Exception $e) {
 +			return $response->bailOut($e->getMessage());
 +		}
 +
 +		if($result === false) {
 +			return $response->bailOut(App::$l10n->t('Error deleting contact.'));
 +		}
 +		return $response->setStatus('204');
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function deleteChildren() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +		$contacts = $this->request->post['contacts'];
 +
 +		try {
 +			$result = $addressBook->deleteChildren($contacts);
 +		} catch(Exception $e) {
 +			return $response->bailOut($e->getMessage());
 +		}
 +
 +		return $response->setParams(array('result' => $result));
 +	}
 +
 +	/**
 +	 * @NoAdminRequired
 +	 */
 +	public function moveChild() {
 +		$params = $this->request->urlParams;
 +		$targetInfo = $this->request->post['target'];
 +
 +		$response = new JSONResponse();
 +
 +		// TODO: Check if the backend supports move (is 'local' or 'shared') and use that operation instead.
 +		// If so, set status 204 and don't return the serialized contact.
 +		$fromAddressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +		$targetAddressBook = $this->app->getAddressBook($targetInfo['backend'], $targetInfo['id']);
 +		$contact = $fromAddressBook->getChild($params['contactId']);
 +		if(!$contact) {
 +			$response->bailOut(App::$l10n->t('Error retrieving contact.'));
 +			return $response;
 +		}
 +		try {
 +			$contactId = $targetAddressBook->addChild($contact);
 +		} catch(Exception $e) {
 +			return $response->bailOut($e->getMessage());
 +		}
 +		$contact = $targetAddressBook->getChild($contactId);
 +		if(!$contact) {
 +			return $response->bailOut(App::$l10n->t('Error saving contact.'));
 +		}
 +		if(!$fromAddressBook->deleteChild($params['contactId'])) {
 +			// Don't bail out because we have to return the contact
 +			return $response->debug(App::$l10n->t('Error removing contact from other address book.'));
 +		}
 +		return $response->setParams(JSONSerializer::serializeContact($contact));
 +	}
 +
 +}
 +
diff --cc apps/contacts/lib/controller/contactphotocontroller.php
index 0ba6500,0000000..c28bd8e
mode 100644,000000..100644
--- a/apps/contacts/lib/controller/contactphotocontroller.php
+++ b/apps/contacts/lib/controller/contactphotocontroller.php
@@@ -1,355 -1,0 +1,355 @@@
 +<?php
 +/**
 + * @author Thomas Tanghus
 + * Copyright (c) 2013 Thomas Tanghus (thomas at tanghus.net)
 + * This file is licensed under the Affero General Public License version 3 or
 + * later.
 + * See the COPYING-README file.
 + */
 +
 +namespace OCA\Contacts\Controller;
 +
 +use OCA\Contacts\App,
 +	OCA\Contacts\JSONResponse,
 +	OCA\Contacts\ImageResponse,
 +	OCA\Contacts\Utils\Properties,
 +	OCA\Contacts\Controller;
 +
 +/**
 + * Controller class For Contacts
 + */
 +class ContactPhotoController extends Controller {
 +
 +	/**
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function getPhoto($maxSize = 170) {
 +		// TODO: Cache resized photo
 +		$params = $this->request->urlParams;
 +		$etag = null;
 +		//$maxSize = isset($this->request['maxSize']) ? $this->request['maxSize'] : 170;
 +
 +		$addressBook = $this->app->getAddressBook($params['backend'], $params['addressBookId']);
 +		$contact = $addressBook->getChild($params['contactId']);
 +
 +		if(!$contact) {
 +			$response = new JSONResponse();
 +			$response->bailOut(App::$l10n->t('Couldn\'t find contact.'));
 +			return $response;
 +		}
 +
 +		$image = new \OCP\Image();
 +		if (isset($contact->PHOTO) && $image->loadFromBase64((string)$contact->PHOTO)) {
 +			// OK
 +			$etag = md5($contact->PHOTO);
 +		}
 +		else
 +		// Logo :-/
 +		if(isset($contact->LOGO) && $image->loadFromBase64((string)$contact->LOGO)) {
 +			// OK
 +			$etag = md5($contact->LOGO);
 +		}
 +		if($image->valid()) {
 +			$response = new ImageResponse($image);
 +			$lastModified = $contact->lastModified();
 +			// Force refresh if modified within the last minute.
 +			if(!is_null($lastModified)) {
 +				$response->setLastModified(\DateTime::createFromFormat('U', $lastModified) ?: null);
 +			}
 +			if(!is_null($etag)) {
 +				$response->setETag($etag);
 +			}
 +			if ($image->width() > $maxSize || $image->height() > $maxSize) {
 +				$image->resize($maxSize);
 +			}
 +			return $response;
 +		} else {
 +			$response = new JSONResponse();
 +			$response->bailOut(App::$l10n->t('Error getting user photo'));
 +			return $response;
 +		}
 +	}
 +
 +	/**
 +	 * Uploads a photo and saves in oC cache
 +	 * @return JSONResponse with data.tmp set to the key in the cache.
 +	 *
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function uploadPhoto() {
 +		$params = $this->request->urlParams;
 +
 +		$response = new JSONResponse();
 +
 +		if (!isset($this->request->files['imagefile'])) {
 +			$response->bailOut(App::$l10n->t('No file was uploaded. Unknown error'));
 +			return $response;
 +		}
 +
 +		$file = $this->request->files['imagefile'];
 +		$error = $file['error'];
 +		if($error !== UPLOAD_ERR_OK) {
 +			$errors = array(
 +				0=>App::$l10n->t("There is no error, the file uploaded with success"),
 +				1=>App::$l10n->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
 +				2=>App::$l10n->t("The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"),
 +				3=>App::$l10n->t("The uploaded file was only partially uploaded"),
 +				4=>App::$l10n->t("No file was uploaded"),
 +				6=>App::$l10n->t("Missing a temporary folder")
 +			);
 +			$response->bailOut($errors[$error]);
 +			return $response;
 +		}
 +
 +		if(!file_exists($file['tmp_name'])) {
 +			$response->bailOut('Temporary file: \''.$file['tmp_name'].'\' has gone AWOL?');
 +			return $response;
 +		}
 +
 +		$tmpkey = 'contact-photo-'.md5(basename($file['tmp_name']));
 +		$image = new \OCP\Image();
 +
 +		if(!$image->loadFromFile($file['tmp_name'])) {
 +			$response->bailOut(App::$l10n->t('Couldn\'t load temporary image: ').$file['tmp_name']);
 +			return $response;
 +		}
 +
 +		if(!$image->fixOrientation()) { // No fatal error so we don't bail out.
 +			$response->debug('Couldn\'t save correct image orientation: '.$tmpkey);
 +		}
 +
 +		if(!$this->server->getCache()->set($tmpkey, $image->data(), 600)) {
 +			$response->bailOut(App::$l10n->t('Couldn\'t save temporary image: ').$tmpkey);
 +			return $response;
 +		}
 +
 +		$response->setData(array(
 +			'status' => 'success',
 +			'data' => array(
 +				'tmp'=>$tmpkey,
 +				'metadata' => array(
 +					'contactId'=> $params['contactId'],
 +					'addressBookId'=> $params['addressBookId'],
 +					'backend'=> $params['backend'],
 +				),
 +			)
 +		));
 +
 +		return $response;
 +	}
 +
 +	/**
 +	 * Saves the photo from the contact being edited to oC cache
 +	 * @return JSONResponse with data.tmp set to the key in the cache.
 +	 *
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function cacheCurrentPhoto() {
 +		$params = $this->request->urlParams;
 +		$response = new JSONResponse();
 +		$photoResponse = $this->getPhoto($maxSize = 400);
 +
 +		if(!$photoResponse instanceof ImageResponse) {
 +			return $photoResponse;
 +		}
 +
 +		$data = $photoResponse->render();
 +		$tmpkey = 'contact-photo-' . $params['contactId'];
 +		if(!$this->server->getCache()->set($tmpkey, $data, 600)) {
 +			$response->bailOut(App::$l10n->t('Couldn\'t save temporary image: ').$tmpkey);
 +			return $response;
 +		}
 +
 +		$response->setParams(array(
 +			'tmp'=>$tmpkey,
 +			'metadata' => array(
 +				'contactId'=> $params['contactId'],
 +				'addressBookId'=> $params['addressBookId'],
 +				'backend'=> $params['backend'],
 +			),
 +		));
 +
 +		return $response;
 +
 +	}
 +
 +	/**
 +	 * Saves the photo from ownCloud FS to oC cache
 +	 * @return JSONResponse with data.tmp set to the key in the cache.
 +	 *
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function cacheFileSystemPhoto() {
 +		$params = $this->request->urlParams;
 +		$response = new JSONResponse();
 +
 +		if(!isset($this->request->get['path'])) {
 +			$response->bailOut(App::$l10n->t('No photo path was submitted.'));
 +		}
 +
 +		$localpath = \OC\Files\Filesystem::getLocalFile($this->request->get['path']);
 +		$tmpkey = 'contact-photo-' . $params['contactId'];
 +
 +		if(!file_exists($localpath)) {
 +			return $response->bailOut(App::$l10n->t('File doesn\'t exist:').$localpath);
 +		}
 +
 +		$image = new \OCP\Image();
 +		if(!$image) {
 +			return $response->bailOut(App::$l10n->t('Error loading image.'));
 +		}
 +		if(!$image->loadFromFile($localpath)) {
 +			return $response->bailOut(App::$l10n->t('Error loading image.'));
 +		}
 +		if($image->width() > 400 || $image->height() > 400) {
 +			$image->resize(400); // Prettier resizing than with browser and saves bandwidth.
 +		}
 +		if(!$image->fixOrientation()) { // No fatal error so we don't bail out.
 +			$response->debug('Couldn\'t save correct image orientation: '.$localpath);
 +		}
 +		if(!$this->server->getCache()->set($tmpkey, $image->data(), 600)) {
 +			return $response->bailOut('Couldn\'t save temporary image: '.$tmpkey);
 +		}
 +
 +		return $response->setData(array(
 +			'tmp'=>$tmpkey,
 +			'metadata' => array(
 +				'contactId'=> $params['contactId'],
 +				'addressBookId'=> $params['addressBookId'],
 +				'backend'=> $params['backend'],
 +			),
 +		));
 +
 +	}
 +
 +	/**
 +	 * Get a photo from the oC cache for cropping.
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function getTempPhoto() {
 +		$params = $this->request->urlParams;
 +		$tmpkey = $params['key'];
 +		$maxSize = isset($this->request->get['maxSize']) ? $this->request->get['maxSize'] : 400;
 +
 +		$image = new \OCP\Image();
 +		$image->loadFromData($this->server->getCache()->get($tmpkey));
 +		if($image->valid()) {
 +			if($image->height() > $maxSize || $image->width() > $maxSize) {
 +				$image->resize($maxSize);
 +			}
 +			$response = new ImageResponse($image);
 +			return $response;
 +		} else {
 +			$response = new JSONResponse();
 +			return $response->bailOut('Error getting temporary photo');
 +		}
 +	}
 +
 +	/**
 +	 * Get a photo from the oC and crops it with the suplied geometry.
 +	 * @NoAdminRequired
 +	 * @NoCSRFRequired
 +	 */
 +	public function cropPhoto() {
 +		$params = $this->request->urlParams;
 +		$x = (isset($this->request->post['x']) && $this->request->post['x']) ? $this->request->post['x'] : 0;
 +		$y = (isset($this->request->post['y']) && $this->request->post['y']) ? $this->request->post['y'] : 0;
 +		$w = (isset($this->request->post['w']) && $this->request->post['w']) ? $this->request->post['w'] : -1;
 +		$h = (isset($this->request->post['h']) && $this->request->post['h']) ? $this->request->post['h'] : -1;
 +		$tmpkey = $params['key'];
 +		$maxSize = isset($this->request->post['maxSize']) ? $this->request->post['maxSize'] : 200;
 +
 +		$app = new App($this->api->getUserId());
 +		$addressBook = $app->getAddressBook($params['backend'], $params['addressBookId']);
 +		$contact = $addressBook->getChild($params['contactId']);
 +
 +		$response = new JSONResponse();
 +
 +		if(!$contact) {
 +			return $response->bailOut(App::$l10n->t('Couldn\'t find contact.'));
 +		}
 +
 +		$data = $this->server->getCache()->get($tmpkey);
 +		if(!$data) {
 +			return $response->bailOut(App::$l10n->t('Image has been removed from cache'));
 +		}
 +
 +		$image = new \OCP\Image();
 +
 +		if(!$image->loadFromData($data)) {
 +			return $response->bailOut(App::$l10n->t('Error creating temporary image'));
 +		}
 +
 +		$w = ($w !== -1 ? $w : $image->width());
 +		$h = ($h !== -1 ? $h : $image->height());
 +
 +		if(!$image->crop($x, $y, $w, $h)) {
 +			return $response->bailOut(App::$l10n->t('Error cropping image'));
 +		}
 +
 +		if($image->width() < $maxSize || $image->height() < $maxSize) {
 +			if(!$image->resize(200)) {
 +				return $response->bailOut(App::$l10n->t('Error resizing image'));
 +			}
 +		}
 +
 +		// For vCard 3.0 the type must be e.g. JPEG or PNG
 +		// For version 4.0 the full mimetype should be used.
 +		// https://tools.ietf.org/html/rfc2426#section-3.1.4
 +		if(strval($contact->VERSION) === '4.0') {
 +			$type = $image->mimeType();
 +		} else {
 +			$type = explode('/', $image->mimeType());
 +			$type = strtoupper(array_pop($type));
 +		}
 +		if(isset($contact->PHOTO)) {
 +			$property = $contact->PHOTO;
 +			if(!$property) {
 +				$this->server->getCache()->remove($tmpkey);
 +				return $response->bailOut(App::$l10n
 +					->t('Error getting PHOTO property.'));
 +			}
 +			$property->setValue(strval($image));
 +			$property->parameters = array();
 +			$property->parameters[]
 +				= new \Sabre\VObject\Parameter('ENCODING', 'b');
 +			$property->parameters[]
 +				= new \Sabre\VObject\Parameter('TYPE', $image->mimeType());
 +			$contact->PHOTO = $property;
 +		} else {
 +			$contact->add('PHOTO',
 +				strval($image), array('ENCODING' => 'b',
 +				'TYPE' => $type));
 +			// TODO: Fix this hack
 +			$contact->setSaved(false);
 +		}
 +		if(!$contact->save()) {
 +			return $response->bailOut(App::$l10n->t('Error saving contact.'));
 +		}
 +
 +		$thumbnail = Properties::cacheThumbnail(
 +			$params['backend'],
- 			$params['addressBookId']
++			$params['addressBookId'],
 +			$params['contactId'],
 +			$image
 +		);
 +
 +		$response->setData(array(
 +			'status' => 'success',
 +			'data' => array(
 +				'id' => $params['contactId'],
 +				'thumbnail' => $thumbnail,
 +			)
 +		));
 +
 +		$this->server->getCache()->remove($tmpkey);
 +
 +		return $response;
 +	}
 +
 +}
diff --cc apps/documents/css/3rdparty/webodf/dojo-app.css
index a30426b,0000000..ee1c0f3
mode 100644,000000..100644
--- a/apps/documents/css/3rdparty/webodf/dojo-app.css
+++ b/apps/documents/css/3rdparty/webodf/dojo-app.css
@@@ -1,12 -1,0 +1,12 @@@
 +/**
 + * If you are developing a project that makes use of Dijit widgets, you will probably want to include the two files
 + * below; otherwise, you can remove them. When building for release, Dojo will automatically combine all of your
 + * @imported CSS files into a single file.
 + *
 + * It is highly, highly recommended that you develop your CSS using Stylus: http://learnboost.github.com/stylus/.
 + */
 +
- @import '../../../js/3rdparty/resources/dojo/resources/dojo.css';
++/* @import '../../../js/3rdparty/resources/dojo/resources/dojo.css'; */
 + at import '../../../js/3rdparty/resources/dijit/themes/claro/claro.css';
 + at import '../../../js/3rdparty/resources/dojox/layout/resources/ExpandoPane.css';
 + at import '../../../js/3rdparty/resources/dojox/widget/ColorPicker/ColorPicker.css';
diff --cc apps/documents/css/style.css
index c9c73b1,0000000..0af1ee8
mode 100644,000000..100644
--- a/apps/documents/css/style.css
+++ b/apps/documents/css/style.css
@@@ -1,241 -1,0 +1,290 @@@
 +#editor ::-webkit-scrollbar-thumb {
 +	background-color: #fff;
 +}
 +
 +#documents-content #emptyfolder {
 +	position: static;
 +	margin:0;
 +	text-align:center;
 +	font-size:1.5em; font-weight:bold; color:#888; text-shadow:#fff 0 1px 0;
 +}
 +
 +.documentslist { padding:5px; }
 +
 +.documentslist .document, 
 +.documentslist .progress,
 +.documentslist .add-document{
 +	display: inline-block;
 +	height: 200px;
 +	width: 200px;
 +	float: left;
 +	background-color: #e8e8e8;
 +	margin: 14px;
 +	vertical-align: top;
 +	border-radius: 5px;
 +}
 +
 +.add-document a {
 +	display: inline-block;
 +	position: relative;
 +	height: 100px;
 +	width: 200px;
 +	background-repeat: no-repeat;
 +	background-size: 32px;
 +	background-position: 50%;
 +}
 +.add-document .add {
 +	background-image: url('%webroot%/core/img/actions/add.svg');
 +}
 +.add-document .upload {
 +	background-image: url('%webroot%/core/img/actions/upload.svg');
 +}
 +
 +.add-document a.add {
 +	border-bottom: 1px solid #fff;
 +}
 +.add-document .add,
 +.add-document .upload {
 +	opacity: .7;
 +}
 +.add-document .add:hover,
 +.add-document .add:focus,
 +.add-document #upload:hover .upload,
 +.add-document .upload:focus {
 +	opacity: 1;
 +}
 +
 +.add-document label {
 +	position: absolute;
 +	bottom: 10px;
 +	width: 100%;
 +	font-weight: normal;
 +	text-align: center;
 +}
 +
 +.documentslist .progress{
 +	position:absolute;
 +	left:232px;
 +	z-index:5;
 +	background: #e8e8e8 url('%webroot%/core/img/loading.gif') 50% 50% no-repeat;
 +}
 +
 +.documentslist .document:hover,
 +.documentslist .document a:focus {
 +	background-color: #ddd;
 +}
 +
 +.documentslist .session-active {
 +	position: relative;
 +	margin-left: 128px;
 +	margin-top: 128px;
 +	width: 32px;
 +}
 +.document a {
 +	display: block;
 +	position: relative;
 +	height: 200px;
 +	width: 200px;
 +	background-repeat: no-repeat;
 +	background-size: 64px;
 +	background-position: 68px;
 +}
 +.document label {
 +	position: absolute;
 +	bottom: 5px;
 +	width: 100%;
 +	font-weight: normal;
 +	text-overflow: ellipsis;
 +	overflow: hidden;
 +	text-align: center;
 +	padding: 0 8px;
 +	-webkit-box-sizing: border-box;
 +	-moz-box-sizing: border-box;
 +	box-sizing: border-box;
 +	white-space: nowrap;
 +}
 +
 +#odf-toolbar{
 +	text-align: left;
 +	position: absolute;
 +	width: 100%;
 +	padding:0;
 +	z-index: 500;
 +}
 +
 +#odf-toolbar #dropdown{
 +	right:auto;
 +}
 +
 +#document-title{
 +/*	position: absolute;
 +	top: 9px;
 +	left:50%;
 +	margin:0; */
 +	padding: 4px 0 5px;
 +	border-bottom: 1px solid #E9E9E9;
 +
 +	text-align: center;
 +	font-weight: bold;
 +}
 +#document-title div{
 +	position: relative;
 +	/*margin-left:-50%;*/
 +}
 +#odf-close{
 +	float: right;
 +}
 +
 +#odf-invite{
 +	float: left;
 +}
 +
 +#invite-block{
 +	position: absolute;
 +	top:3em;
 +	margin-top:-3px;
 +	left:0;
 +	padding: 10px;
 +	background-color: #bbb;
 +}
 +
 +#invitee-list li{
 +	padding: 5px 0 5px 20px;
 +	background: url('%webroot%/core/img/actions/delete.svg') 0 50% no-repeat;
 +}
 +
 +#mainContainer{
 +	position:absolute;
 +	z-index:500;
 +}
 +
 +#documents-overlay,  #documents-overlay-below{
 +    position: fixed;
 +    top: 0;
 +    left: 0;
 +    width: 100%;
 +    height: 100%;
 +    filter:alpha(opacity=30);
 +    opacity: .3;
 +    z-index: 1000;
 +	background: #111 url('%webroot%/core/img/loading-dark.gif') 50% 50% no-repeat;
 +}
 +
 +#documents-overlay-below{
 +	left:0;
 +	top:0;
 +    filter:alpha(opacity=100);
 +    opacity: 1;
 +	background:#f0f0f0;
 +	z-index: 999;
 +}
 +
 +#file_upload_start{
 +	display: block;
 +	position:relative;
 +	left:0; top:0; width:200px; height:100px; 
 +	margin-bottom: -110px;padding:0;
 +	cursor:pointer; overflow:hidden;
 +	font-size:1em;
 +	-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0;
 +	z-index:20; 
 +}
 +
++#warning-connection-lost{
++	padding: 6px 0;
++	text-align: center;
++	color: #ffffff;
++	background-color: #CE7070;
++	font-size: 16px;
++	font-weight: bold;
++}
++
++#warning-connection-lost img {
++	margin-right: 4px;
++	float: right;
++	height: 20px;
++}
++
++#connection-lost{
++	right: 5px;
++	background: #fff;
++	width: 95%;
++	position: absolute;
++	top: 87px;
++}
++
 +
 +/* override WebODF styling here */
 +
 +#mainContainer #collaboration{
 +	float:right;position: relative;z-index: 1;
 +	width: 70px;padding:5px;
 +}
 +
 +#members{
- 	padding-top: 65px !important;
++	padding-top: 69px !important;
 +}
 +
 +.memberListButton span{
 +	display: block;
 +    box-shadow: 0px 0px 5px rgb(90, 90, 90) inset;
 +    background-color: rgb(200, 200, 200);
 +    border-radius: 5px;
 +    border: 2px solid;
 +    display: block;
 +    margin: auto;
 +}
 +
 +.memberListButton img{
 +    border: 0 none !important;
 +}
 +
 +#toolbar {
 +	border-bottom: none !important;
- 	padding: 6px 0 !important;
++	padding: 5px 0 0 !important;
++}
++
++#toolbar > .dijit{
++	margin-left:3px;
++}
++#toolbar > span.dijit{
++	margin-left: 0;
 +}
 +
 +#container {
 +	top: 38px !important;
 +}
 +
 +cursor > div {
 +	padding-bottom: 0 !important;
 +}
 +
 +editinfo > div.editInfoMarker {
 +	width: 4px;
 +	border-radius: 0;
 +	box-shadow: 0 0 0 #fff;
 +	background-clip:content-box;
 +	padding: 0 5px;
 +}
 +
 +editinfo > div.editInfoMarker:hover {
 +}
++
++.dijitToolbar .dijitDropDownButton {
++	padding-top: 2px;
++}
++
++.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
++margin-top:-1px;
++}
++
++.claro .dijitTextBox .dijitInputInner,
++.claro .dijitSpinner .dijitSpinnerButtonInner {
++	margin: 0;
++}
++
++/* part of dojo.css */
++.dojoTabular {border-collapse: collapse; border-spacing: 0; border: 1px solid #ccc; margin: 0 1.5em;}
++.dojoTabular th {text-align: center; font-weight: bold;}
++.dojoTabular thead,.dojoTabular tfoot {background-color: #efefef; border: 1px solid #ccc; border-width: 1px 0;}
++.dojoTabular th,.dojoTabular td {padding: 0.25em 0.5em;}
diff --cc apps/documents/js/3rdparty/webodf/editor/Editor.js
index b2fc811,0000000..3ffb0ba
mode 100644,000000..100644
--- a/apps/documents/js/3rdparty/webodf/editor/Editor.js
+++ b/apps/documents/js/3rdparty/webodf/editor/Editor.js
@@@ -1,407 -1,0 +1,429 @@@
 +/**
 + * @license
 + * Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 + *
 + * @licstart
 + * The JavaScript code in this page is free software: you can redistribute it
 + * and/or modify it under the terms of the GNU Affero General Public License
 + * (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + * the License, or (at your option) any later version.  The code is distributed
 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 + *
 + * You should have received a copy of the GNU Affero General Public License
 + * along with this code.  If not, see <http://www.gnu.org/licenses/>.
 + *
 + * As additional permission under GNU AGPL version 3 section 7, you
 + * may distribute non-source (e.g., minimized or compacted) forms of
 + * that code without the copy of the GNU GPL normally required by
 + * section 4, provided you include this license notice and a URL
 + * through which recipients can access the Corresponding Source.
 + *
 + * As a special exception to the AGPL, any HTML file which merely makes function
 + * calls to this code, and for that purpose includes it by reference shall be
 + * deemed a separate work for copyright law purposes. In addition, the copyright
 + * holders of this code give you permission to combine this code with free
 + * software libraries that are released under the GNU LGPL. You may copy and
 + * distribute such a system following the terms of the GNU AGPL for this code
 + * and the LGPL for the libraries. If you modify this code, you may extend this
 + * exception to your version of the code, but you are not obligated to do so.
 + * If you do not wish to do so, delete this exception statement from your
 + * version.
 + *
 + * This license applies to this entire compilation.
 + * @licend
 + * @source: http://www.webodf.org/
 + * @source: https://github.com/kogmbh/WebODF/
 + */
 +
 +/*global runtime, define, document, odf, ops, window, gui, alert, saveAs, Blob */
 +
 +define("webodf/editor/Editor", [
 +    "webodf/editor/EditorSession",
 +    "webodf/editor/MemberListView",
 +    "dijit/layout/BorderContainer",
 +    "dijit/layout/ContentPane",
 +    "webodf/editor/Tools"],
 +
 +    function (EditorSession,
 +        MemberListView,
 +        BorderContainer,
 +        ContentPane,
 +        Tools) {
 +        "use strict";
 +
 +        runtime.loadClass('odf.OdfCanvas');
 +
 +        /**
 +         * @constructor
 +         * @param {{unstableFeaturesEnabled:boolean,
 +         *          loadCallback:function(),
 +         *          saveCallback:function(),
 +         *          closeCallback:function()}}
 +         * param {!ops.Server=} server
 +         * @param {!ServerFactory=} serverFactory
 +         */
 +        function Editor(args, server, serverFactory) {
 +
 +            var self = this,
 +                // Private
 +                session,
 +                editorSession,
 +                mainContainer,
 +                memberListView,
 +                tools,
 +                loadOdtFile = args.loadCallback,
 +                saveOdtFile = args.saveCallback,
 +                close = args.closeCallback,
 +                odfCanvas,
 +                pendingMemberId,
 +                pendingEditorReadyCallback;
 +
 +            function getFileBlob(cbSuccess, cbError) {
 +                var odfContainer = odfCanvas.odfContainer();
 +
 +                if (odfContainer) {
 +                    odfContainer.createByteArray(cbSuccess, cbError);
 +                } else {
 +                    cbError("No odfContainer!");
 +                }
 +            }
 +
 +            /**
 +             * prepare all gui elements and load the given document.
 +             * after loading is completed, the given callback is called.
 +             * the caller still has to call editorSession.startEditing
 +             * which will insert the the cursor.
 +             *
 +             * @param {!string} initialDocumentUrl
 +             * @param {!string} memberId
 +             * @param {!function()} editorReadyCallback
 +             * @return {undefined}
 +             */
 +            function initDocLoading(initialDocumentUrl, memberId, editorReadyCallback) {
 +                runtime.assert(initialDocumentUrl, "document should be defined here.");
 +                runtime.assert(memberId !== undefined, "memberId should be defined here.");
 +                runtime.assert(!pendingEditorReadyCallback, "pendingEditorReadyCallback should not exist here.");
 +                runtime.assert(!editorSession, "editorSession should not exist here.");
 +                runtime.assert(!session, "session should not exist here.");
 +
 +                pendingMemberId = memberId;
 +                pendingEditorReadyCallback = editorReadyCallback;
 +
 +                odfCanvas.load(initialDocumentUrl);
 +            }
 +
 +
 +            /**
 +             * open the document,
 +             * call editorReadyCallback once everything is done.
 +             *
 +             * @param {!string} docUrl
 +             * @param {!string} memberId
 +             * @param {!function()} editorReadyCallback
 +             * @return {undefined}
 +             */
 +            this.openDocument = function (docUrl, memberId, editorReadyCallback) {
 +                initDocLoading(docUrl, memberId, editorReadyCallback);
 +            };
 +
 +            /**
++             * Closes a single-user document, and does cleanup.
++             * @param {!function(!Object=)} callback, passing an error object in case of error
++             * @return undefined;
++             */
++            this.closeDocument = function (callback) {
++                runtime.assert(session, "session should exist here.");
++                session.close(function (err) {
++                    if (err) {
++                        callback(err);
++                    } else {
++                        editorSession.destroy(function (err) {
++                            if (err) {
++                                callback(err);
++                            } else {
++                                editorSession = undefined;
++                                session.destroy(function (err) {
++                                    if (err) {
++                                        callback(err);
++                                    } else {
++                                        session = undefined;
++                                        callback();
++                                    }
++                                });
++                            }
++                        });
++                    }
++                });
++            };
++
++            /**
 +             * @param {!string} filename
 +             * @param {?function()} callback
 +             * @return {undefined}
 +             */
 +            this.saveDocument = function (filename, callback) {
 +                function onsuccess(data) {
 +                    var mimebase = "application/vnd.oasis.opendocument.",
 +                        mimetype = mimebase + "text",
 +                        blob;
 +                    filename = filename || "doc.odt";
 +                    if (filename.substr(-4) === ".odp") {
 +                        mimetype = mimebase + "presentation";
 +                    } else if (filename.substr(-4) === ".ods") {
 +                        mimetype = mimebase + "spreadsheet";
 +                    }
 +                    blob = new Blob([data.buffer], {type: mimetype});
 +                    saveAs(blob, filename);
 +                }
 +                function onerror(error) {
 +                    alert(error);
 +                }
 +
 +                getFileBlob(onsuccess, onerror);
 +            };
 +
 +            /**
 +             * open the initial document of an editing-session,
 +             * request a replay of previous operations, call
 +             * editorReadyCallback once everything is done.
 +             *
 +             * @param {!string} sessionId
 +             * @param {!string} memberId
 +             * @param {!function()} editorReadyCallback
 +             * @return {undefined}
 +             */
 +            this.openSession = function (sessionId, memberId, editorReadyCallback) {
 +                initDocLoading(server.getGenesisUrl(sessionId), memberId, function () {
 +                    var opRouter, memberModel;
 +                    // overwrite router and member model
 +                    // TODO: serverFactory should be a backendFactory,
 +                    // and there should be a backendFactory for local editing
 +                    opRouter = serverFactory.createOperationRouter(sessionId, memberId, server, odfCanvas.odfContainer());
 +                    session.setOperationRouter(opRouter);
 +
 +                    memberModel = serverFactory.createMemberModel(sessionId, server);
 +                    session.setMemberModel(memberModel);
 +
 +                    opRouter.requestReplay(function done() {
 +                        editorReadyCallback();
 +                    });
 +
 +                });
 +            };
 +
 +            /**
 +             * Closes the current editing running editing (polling-timer),
 +             * cleanup.
 +             * @param {!function(!Object=)} callback, passing an error object in case of error
 +             * @return {undefined}
 +             */
-             this.close = function (callback) {
++            this.closeSession = function (callback) {
 +                runtime.assert(session, "session should exist here.");
 +                // TODO: there is a better pattern for this instead of unrolling
-                 editorSession.close(function(err) {
++                session.close(function(err) {
 +                    if (err) {
 +                        callback(err);
 +                    } else {
-                         session.close(function(err) {
++                        // now also destroy session, will not be reused for new document
++                        memberListView.setEditorSession(undefined);
++                        editorSession.destroy(function(err) {
 +                            if (err) {
 +                                callback(err);
 +                            } else {
-                                 // now also destroy session, will not be reused for new document
-                                 if (memberListView) {
-                                     memberListView.setEditorSession(undefined);
-                                 }
-                                 editorSession.destroy(function(err) {
++                                editorSession = undefined;
++                                session.destroy(function(err) {
 +                                    if (err) {
 +                                        callback(err);
 +                                    } else {
-                                         editorSession = undefined;
-                                         session.destroy(function(err) {
-                                             if (err) {
-                                                 callback(err);
-                                             } else {
-                                                 session = undefined;
-                                                 callback();
-                                             }
-                                         });
++                                        session = undefined;
++                                        callback();
 +                                    }
 +                                });
 +                            }
 +                        });
 +                    }
 +                });
 +            };
 +
 +            /**
 +             * Adds a cursor and enables the tools and allows modifications.
 +             * Should be called inside/after editorReadyCallback.
 +             * TODO: turn this and endEditing() into readonly switch
 +             * @return {undefined}
 +             */
 +            this.startEditing = function () {
 +                runtime.assert(editorSession, "editorSession should exist here.");
 +
 +                tools.setEditorSession(editorSession);
 +                editorSession.sessionController.startEditing();
 +            };
 +
 +            /**
 +             * Removes the cursor and disables the tools and allows modifications.
 +             * Should be called before closeDocument, if startEditing was called before
 +             * @return {undefined}
 +             */
 +            this.endEditing = function () {
 +                runtime.assert(editorSession, "editorSession should exist here.");
 +
 +                tools.setEditorSession(undefined);
 +                editorSession.sessionController.endEditing();
 +            };
 +
 +            /**
 +             * @param {!function(!Object=)} callback, passing an error object in case of error
 +             * @return {undefined}
 +             */
 +            this.destroy = function (callback) {
 +                var destroyMemberListView = memberListView ? memberListView.destroy : function(cb) { cb(); };
 +
 +                // TODO: decide if some forced close should be done here instead of enforcing proper API usage
 +                runtime.assert(!session, "session should not exist here.");
 +
 +                // TODO: investigate what else needs to be done
 +                mainContainer.destroyRecursive(true);
 +
 +                destroyMemberListView(function(err) {
 +                    if (err) {
 +                        callback(err);
 +                    } else {
 +                        tools.destroy(function(err) {
 +                            if (err) {
 +                                callback(err);
 +                            } else {
 +                                odfCanvas.destroy(function(err) {
 +                                    if (err) {
 +                                        callback(err);
 +                                    } else {
 +                                        callback();
 +                                    }
 +                                });
 +                            }
 +                        });
 +                    }
 +                });
 +            };
 +
 +            function setFocusToOdfCanvas() {
 +                editorSession.sessionController.getEventManager().focus();
 +            }
 +
 +            // init
 +            function init() {
 +                var editorPane, memberListPane,
 +                    inviteButton,
 +                    canvasElement = document.getElementById("canvas"),
 +                    memberListElement = document.getElementById('memberList'),
 +                    collabEditing = Boolean(server),
-                     directStylingEnabled = (! collabEditing) || args.unstableFeaturesEnabled,
++                    directParagraphStylingEnabled = (! collabEditing) || args.unstableFeaturesEnabled,
 +                    imageInsertingEnabled = (! collabEditing) || args.unstableFeaturesEnabled,
 +                    // annotations not yet properly supported for OT
 +                    annotationsEnabled = (! collabEditing) || args.unstableFeaturesEnabled,
 +                     // undo manager is not yet integrated with collaboration
 +                    undoRedoEnabled = (! collabEditing),
 +                    closeCallback;
 +
 +                // Extend runtime with a convenient translation function
 +                runtime.translateContent = function (node) {
 +                    var i,
 +                        element,
 +                        tag,
 +                        placeholder,
 +                        translatable = node.querySelectorAll("*[text-i18n]");
 +
 +                    for (i = 0; i < translatable.length; i += 1) {
 +                        element = translatable[i];
 +                        tag = element.localName;
 +                        placeholder = element.getAttribute('text-i18n');
 +                        if (tag === "label"
 +                                || tag === "span"
 +                                || /h\d/i.test(tag)) {
 +                            element.textContent = runtime.tr(placeholder);
 +                        }
 +                    }
 +                };
 +
 +                if (collabEditing) {
 +                    runtime.assert(memberListElement, 'missing "memberList" div in HTML');
 +                }
 +
 +                runtime.assert(canvasElement, 'missing "canvas" div in HTML');
 +
 +                // App Widgets
 +                mainContainer = new BorderContainer({}, 'mainContainer');
 +
 +                editorPane = new ContentPane({
 +                    region: 'center'
 +                }, 'editor');
 +                mainContainer.addChild(editorPane);
 +
 +                if (collabEditing) {
 +                    memberListPane = new ContentPane({
 +                        region: 'right',
 +                        title: runtime.tr("Members")
 +                    }, 'members');
 +                    mainContainer.addChild(memberListPane);
 +                    memberListView = new MemberListView(memberListElement);
 +                }
 +
 +                mainContainer.startup();
 +
 +                if (window.inviteButtonProxy) {
 +                    inviteButton = document.getElementById('inviteButton');
 +                    runtime.assert(inviteButton, 'missing "inviteButton" div in HTML');
 +                    inviteButton.innerText = runtime.tr("Invite Members");
 +                    inviteButton.style.display = "block";
 +                    inviteButton.onclick = window.inviteButtonProxy.clicked;
 +                }
 +
 +                tools = new Tools({
 +                        onToolDone: setFocusToOdfCanvas,
 +                        loadOdtFile: loadOdtFile,
 +                        saveOdtFile: saveOdtFile,
 +                        close: close,
-                         directStylingEnabled: directStylingEnabled,
++                        directParagraphStylingEnabled: directParagraphStylingEnabled,
 +                        imageInsertingEnabled: imageInsertingEnabled,
 +                        annotationsEnabled: annotationsEnabled,
 +                        undoRedoEnabled: undoRedoEnabled
 +                    });
 +
 +                odfCanvas = new odf.OdfCanvas(canvasElement);
 +                odfCanvas.enableAnnotations(annotationsEnabled);
 +
 +                odfCanvas.addListener("statereadychange", function () {
 +                    var viewOptions = {
 +                            editInfoMarkersInitiallyVisible: collabEditing,
 +                            caretAvatarsInitiallyVisible: false,
 +                            caretBlinksOnRangeSelect: true
 +                        };
 +
 +                    // create session around loaded document
 +                    session = new ops.Session(odfCanvas);
 +                    editorSession = new EditorSession(session, pendingMemberId, {
 +                        viewOptions: viewOptions,
-                         directStylingEnabled: directStylingEnabled,
++                        directParagraphStylingEnabled: directParagraphStylingEnabled,
 +                        imageInsertingEnabled: imageInsertingEnabled
 +                    });
 +                    if (undoRedoEnabled) {
 +                        editorSession.sessionController.setUndoManager(new gui.TrivialUndoManager());
 +                    }
 +
 +                    if (memberListView) {
 +                        memberListView.setEditorSession(editorSession);
 +                    }
 +
 +                    // and report back to caller
 +                    pendingEditorReadyCallback();
 +                    // reset
 +                    pendingEditorReadyCallback = null;
 +                    pendingMemberId = null;
 +                });
 +            }
 +
 +            init();
 +        }
 +        return Editor;
 +    });
 +
 +// vim:expandtab
diff --cc apps/documents/js/3rdparty/webodf/editor/EditorSession.js
index 746d8a7,0000000..575eb89
mode 100644,000000..100644
--- a/apps/documents/js/3rdparty/webodf/editor/EditorSession.js
+++ b/apps/documents/js/3rdparty/webodf/editor/EditorSession.js
@@@ -1,626 -1,0 +1,604 @@@
 +/**
 + * @license
 + * Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 + *
 + * @licstart
 + * The JavaScript code in this page is free software: you can redistribute it
 + * and/or modify it under the terms of the GNU Affero General Public License
 + * (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + * the License, or (at your option) any later version.  The code is distributed
 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 + *
 + * You should have received a copy of the GNU Affero General Public License
 + * along with this code.  If not, see <http://www.gnu.org/licenses/>.
 + *
 + * As additional permission under GNU AGPL version 3 section 7, you
 + * may distribute non-source (e.g., minimized or compacted) forms of
 + * that code without the copy of the GNU GPL normally required by
 + * section 4, provided you include this license notice and a URL
 + * through which recipients can access the Corresponding Source.
 + *
 + * As a special exception to the AGPL, any HTML file which merely makes function
 + * calls to this code, and for that purpose includes it by reference shall be
 + * deemed a separate work for copyright law purposes. In addition, the copyright
 + * holders of this code give you permission to combine this code with free
 + * software libraries that are released under the GNU LGPL. You may copy and
 + * distribute such a system following the terms of the GNU AGPL for this code
 + * and the LGPL for the libraries. If you modify this code, you may extend this
 + * exception to your version of the code, but you are not obligated to do so.
 + * If you do not wish to do so, delete this exception statement from your
 + * version.
 + *
 + * This license applies to this entire compilation.
 + * @licend
 + * @source: http://www.webodf.org/
 + * @source: https://github.com/kogmbh/WebODF/
 + */
 +
 +/*global define, runtime, core, gui, ops, document */
 +
 +define("webodf/editor/EditorSession", [
 +    "dojo/text!" + OC.filePath('documents', 'css', 'fonts.css')
 +], function (fontsCSS) { // fontsCSS is retrieved as a string, using dojo's text retrieval AMD plugin
 +    "use strict";
 +
 +    runtime.libraryPaths = function () {
 +        return [ "../../webodf/lib" ];
 +    };
 +
 +    runtime.loadClass("core.DomUtils");
 +    runtime.loadClass("ops.OdtDocument");
 +    runtime.loadClass("ops.Session");
 +    runtime.loadClass("odf.Namespaces");
 +    runtime.loadClass("odf.OdfCanvas");
 +    runtime.loadClass("gui.CaretManager");
 +    runtime.loadClass("gui.Caret");
 +    runtime.loadClass("gui.SessionController");
 +    runtime.loadClass("gui.SessionView");
 +    runtime.loadClass("gui.TrivialUndoManager");
 +    runtime.loadClass("gui.SelectionViewManager");
 +    runtime.loadClass("core.EventNotifier");
 +    runtime.loadClass("gui.ShadowCursor");
 +
 +    /**
 +     * Instantiate a new editor session attached to an existing operation session
 +     * @param {!ops.Session} session
 +     * @param {!string} localMemberId
-      * @param {{viewOptions:gui.SessionViewOptions,directStylingEnabled:boolean}} config
++     * @param {{viewOptions:gui.SessionViewOptions,directParagraphStylingEnabled:boolean}} config
 +     * @constructor
 +     */
 +    var EditorSession = function EditorSession(session, localMemberId, config) {
 +        var self = this,
 +            currentParagraphNode = null,
 +            currentCommonStyleName = null,
 +            currentStyleName = null,
 +            caretManager,
 +            selectionViewManager,
 +            odtDocument = session.getOdtDocument(),
 +            textns = odf.Namespaces.textns,
 +            fontStyles = document.createElement('style'),
 +            formatting = odtDocument.getFormatting(),
 +            domUtils = new core.DomUtils(),
 +            eventNotifier = new core.EventNotifier([
 +                EditorSession.signalMemberAdded,
 +                EditorSession.signalMemberRemoved,
 +                EditorSession.signalCursorMoved,
 +                EditorSession.signalParagraphChanged,
 +                EditorSession.signalCommonStyleCreated,
 +                EditorSession.signalCommonStyleDeleted,
 +                EditorSession.signalParagraphStyleModified,
 +                EditorSession.signalUndoStackChanged]),
 +            shadowCursor = new gui.ShadowCursor(odtDocument);
 +
 +        /**
 +         * @return {Array.<!string>}
 +         */
 +        function getAvailableFonts() {
 +            var availableFonts, regex, matches;
 +
 +            availableFonts = {};
 +
 +            regex =  /font-family *: *(?:\'([^']*)\'|\"([^"]*)\")/gm;
 +            matches = regex.exec(fontsCSS);
 +
 +            while (matches) {
 +                availableFonts[matches[1] || matches[2]] = 1;
 +                matches = regex.exec(fontsCSS);
 +            }
 +            availableFonts = Object.keys(availableFonts);
 +
 +            return availableFonts;
 +        }
 +
 +        function checkParagraphStyleName() {
 +            var newStyleName,
 +                newCommonStyleName;
 +
 +            newStyleName = currentParagraphNode.getAttributeNS(textns, 'style-name');
 +
 +            if (newStyleName !== currentStyleName) {
 +                currentStyleName = newStyleName;
 +                // check if common style is still the same
 +                newCommonStyleName = formatting.getFirstCommonParentStyleNameOrSelf(newStyleName);
 +                if (!newCommonStyleName) {
 +                    // Default style, empty-string name
 +                    currentCommonStyleName = newStyleName = currentStyleName = "";
 +                    self.emit(EditorSession.signalParagraphChanged, {
 +                        type: 'style',
 +                        node: currentParagraphNode,
 +                        styleName: currentCommonStyleName
 +                    });
 +                    return;
 +                }
 +                // a common style
 +                if (newCommonStyleName !== currentCommonStyleName) {
 +                    currentCommonStyleName = newCommonStyleName;
 +                    self.emit(EditorSession.signalParagraphChanged, {
 +                        type: 'style',
 +                        node: currentParagraphNode,
 +                        styleName: currentCommonStyleName
 +                    });
 +                }
 +            }
 +        }
 +        /**
 +         * Creates a NCName from the passed string
 +         * @param {!string} name
 +         * @return {!string}
 +         */
 +        function createNCName(name) {
 +            var letter,
 +                result = "",
 +                i;
 +
 +            // encode
 +            for (i = 0; i < name.length; i++) {
 +                letter = name[i];
 +                // simple approach, can be improved to not skip other allowed chars
 +                if (letter.match(/[a-zA-Z0-9.-_]/) !== null) {
 +                    result += letter;
 +                } else {
 +                    result += "_" + letter.charCodeAt(0).toString(16) + "_";
 +                }
 +            }
 +            // ensure leading char is from proper range
 +            if (result.match(/^[a-zA-Z_]/) === null) {
 +                result = "_" + result;
 +            }
 +
 +            return result;
 +        }
 +
 +        function uniqueParagraphStyleNCName(name) {
 +            var result,
 +                i = 0,
 +                ncMemberId = createNCName(localMemberId),
 +                ncName = createNCName(name);
 +
 +            // create default paragraph style
 +            // localMemberId is used to avoid id conflicts with ids created by other members
 +            result = ncName + "_" + ncMemberId;
 +            // then loop until result is really unique
 +            while (formatting.hasParagraphStyle(result)) {
 +                result = ncName + "_" + i + "_" + ncMemberId;
 +                i++;
 +            }
 +
 +            return result;
 +        }
 +
 +        function trackCursor(cursor) {
 +            var node;
 +
 +            node = odtDocument.getParagraphElement(cursor.getNode());
 +            if (!node) {
 +                return;
 +            }
 +            currentParagraphNode = node;
 +            checkParagraphStyleName();
 +        }
 +
 +        function trackCurrentParagraph(info) {
 +            var cursor = odtDocument.getCursor(localMemberId),
 +                range = cursor && cursor.getSelectedRange(),
 +                paragraphRange = odtDocument.getDOM().createRange();
 +            paragraphRange.selectNode(info.paragraphElement);
 +            if ((range && domUtils.rangesIntersect(range, paragraphRange)) || info.paragraphElement === currentParagraphNode) {
 +                self.emit(EditorSession.signalParagraphChanged, info);
 +                checkParagraphStyleName();
 +            }
 +            paragraphRange.detach();
 +        }
 +
 +        function onCursorAdded(cursor) {
 +            self.emit(EditorSession.signalMemberAdded, cursor.getMemberId());
 +            trackCursor(cursor);
 +        }
 +
 +        function onCursorRemoved(memberId) {
 +            self.emit(EditorSession.signalMemberRemoved, memberId);
 +        }
 +
 +        function onCursorMoved(cursor) {
 +            // Emit 'cursorMoved' only when *I* am moving the cursor, not the other users
 +            if (cursor.getMemberId() === localMemberId) {
 +                self.emit(EditorSession.signalCursorMoved, cursor);
 +                trackCursor(cursor);
 +            }
 +        }
 +
 +        function onStyleCreated(newStyleName) {
 +            self.emit(EditorSession.signalCommonStyleCreated, newStyleName);
 +        }
 +
 +        function onStyleDeleted(styleName) {
 +            self.emit(EditorSession.signalCommonStyleDeleted, styleName);
 +        }
 +
 +        function onParagraphStyleModified(styleName) {
 +            self.emit(EditorSession.signalParagraphStyleModified, styleName);
 +        }
 +
 +        /**
 +         * Call all subscribers for the given event with the specified argument
 +         * @param {!string} eventid
 +         * @param {Object} args
 +         */
 +        this.emit = function (eventid, args) {
 +            eventNotifier.emit(eventid, args);
 +        };
 +
 +        /**
 +         * Subscribe to a given event with a callback
 +         * @param {!string} eventid
 +         * @param {!Function} cb
 +         */
 +        this.subscribe = function (eventid, cb) {
 +            eventNotifier.subscribe(eventid, cb);
 +        };
 +
 +        /**
 +         * @param {!string} eventid
 +         * @param {!Function} cb
 +         * @return {undefined}
 +         */
 +        this.unsubscribe = function (eventid, cb) {
 +            eventNotifier.unsubscribe(eventid, cb);
 +        };
 +
 +        this.getMemberDetailsAndUpdates = function (memberId, subscriber) {
 +            return session.getMemberModel().getMemberDetailsAndUpdates(memberId, subscriber);
 +        };
 +
 +        this.unsubscribeMemberDetailsUpdates = function (memberId, subscriber) {
 +            return session.getMemberModel().unsubscribeMemberDetailsUpdates(memberId, subscriber);
 +        };
 +
 +        this.getCursorPosition = function () {
 +            return odtDocument.getCursorPosition(localMemberId);
 +        };
 +
 +        this.getCursorSelection = function () {
 +            return odtDocument.getCursorSelection(localMemberId);
 +        };
 +
 +        this.getOdfCanvas = function () {
 +            return odtDocument.getOdfCanvas();
 +        };
 +
 +        this.getCurrentParagraph = function () {
 +            return currentParagraphNode;
 +        };
 +
 +        this.getAvailableParagraphStyles = function () {
 +            return formatting.getAvailableParagraphStyles();
 +        };
 +
 +        this.getCurrentParagraphStyle = function () {
 +            return currentCommonStyleName;
 +        };
 +
 +        this.setCurrentParagraphStyle = function (value) {
 +            var op;
 +            if (currentCommonStyleName !== value) {
 +                op = new ops.OpSetParagraphStyle();
 +                op.init({
 +                    memberid: localMemberId,
 +                    position: self.getCursorPosition(),
 +                    styleName: value
 +                });
 +                session.enqueue([op]);
 +            }
 +        };
 +
 +        this.insertTable = function (initialRows, initialColumns, tableStyleName, tableColumnStyleName, tableCellStyleMatrix) {
 +            var op = new ops.OpInsertTable();
 +            op.init({
 +                memberid: localMemberId,
 +                position: self.getCursorPosition(),
 +                initialRows: initialRows,
 +                initialColumns: initialColumns,
 +                tableStyleName: tableStyleName,
 +                tableColumnStyleName: tableColumnStyleName,
 +                tableCellStyleMatrix: tableCellStyleMatrix
 +            });
 +            session.enqueue([op]);
 +        };
 +
 +        /**
 +         * Takes a style name and returns the corresponding paragraph style
 +         * element. If the style name is an empty string, the default style
 +         * is returned.
 +         * @param {!string} styleName
 +         * @return {Element}
 +         */
 +        this.getParagraphStyleElement = function (styleName) {
 +            return (styleName === "")
 +                ? formatting.getDefaultStyleElement('paragraph')
 +                : odtDocument.getParagraphStyleElement(styleName);
 +        };
 +
 +        /**
 +         * Returns if the style is used anywhere in the document
 +         * @param {!Element} styleElement
 +         * @return {boolean}
 +         */
 +        this.isStyleUsed = function (styleElement) {
 +            return formatting.isStyleUsed(styleElement);
 +        };
 +
 +        function getDefaultParagraphStyleAttributes () {
 +            var styleNode = formatting.getDefaultStyleElement('paragraph');
 +            if (styleNode) {
 +                return formatting.getInheritedStyleAttributes(styleNode);
 +            }
 +
 +            return null;
 +        };
 +
 +        /**
 +         * Returns the attributes of a given paragraph style name
 +         * (with inheritance). If the name is an empty string,
 +         * the attributes of the default style are returned.
 +         * @param {!string} styleName
 +         * @return {Object}
 +         */
 +        this.getParagraphStyleAttributes = function (styleName) {
 +            return (styleName === "")
 +                ? getDefaultParagraphStyleAttributes()
 +                : odtDocument.getParagraphStyleAttributes(styleName);
 +        };
 +
 +        /**
 +         * Creates and enqueues a paragraph-style cloning operation.
 +         * Returns the created id for the new style.
 +         * @param {!string} styleName  id of the style to update
 +         * @param {!{paragraphProperties,textProperties}} setProperties  properties which are set
 +         * @param {!{paragraphPropertyNames,textPropertyNames}=} removedProperties  properties which are removed
 +         * @return {undefined}
 +         */
 +        this.updateParagraphStyle = function (styleName, setProperties, removedProperties) {
 +            var op;
 +            op = new ops.OpUpdateParagraphStyle();
 +            op.init({
 +                memberid: localMemberId,
 +                styleName: styleName,
 +                setProperties: setProperties,
 +                removedProperties: (!removedProperties) ? {} : removedProperties
 +            });
 +            session.enqueue([op]);
 +        };
 +
 +        /**
 +         * Creates and enqueues a paragraph-style cloning operation.
 +         * Returns the created id for the new style.
 +         * @param {!string} styleName id of the style to clone
 +         * @param {!string} newStyleDisplayName display name of the new style
 +         * @return {!string}
 +         */
 +        this.cloneParagraphStyle = function (styleName, newStyleDisplayName) {
 +            var newStyleName = uniqueParagraphStyleNCName(newStyleDisplayName),
 +                styleNode = self.getParagraphStyleElement(styleName),
 +                formatting = odtDocument.getFormatting(),
 +                op, setProperties, attributes, i;
 +
 +            setProperties = formatting.getStyleAttributes(styleNode);
 +            // copy any attributes directly on the style
 +            attributes = styleNode.attributes;
 +            for (i = 0; i < attributes.length; i += 1) {
 +                // skip...
 +                // * style:display-name -> not copied, set to new string below
 +                // * style:name         -> not copied, set from op by styleName property
 +                // * style:family       -> "paragraph" always, set by op
 +                if (!/^(style:display-name|style:name|style:family)/.test(attributes[i].name)) {
 +                    setProperties[attributes[i].name] = attributes[i].value;
 +                }
 +            }
 +
 +            setProperties['style:display-name'] = newStyleDisplayName;
 +
 +            op = new ops.OpAddStyle();
 +            op.init({
 +                memberid: localMemberId,
 +                styleName: newStyleName,
 +                styleFamily: 'paragraph',
 +                setProperties: setProperties
 +            });
 +            session.enqueue([op]);
 +
 +            return newStyleName;
 +        };
 +
 +        this.deleteStyle = function (styleName) {
 +            var op;
 +            op = new ops.OpRemoveStyle();
 +            op.init({
 +                memberid: localMemberId,
 +                styleName: styleName,
 +                styleFamily: 'paragraph'
 +            });
 +            session.enqueue([op]);
 +        };
 +
 +        /**
 +         * Returns an array of the declared fonts in the ODF document,
 +         * with 'duplicates' like Arial1, Arial2, etc removed. The alphabetically
 +         * first font name for any given family is kept.
 +         * The elements of the array are objects containing the font's name and
 +         * the family.
 +         * @return {Array.<!Object>}
 +         */
 +        this.getDeclaredFonts = function () {
 +            var fontMap = formatting.getFontMap(),
 +                usedFamilies = [],
 +                array = [],
 +                sortedNames,
 +                key,
 +                value,
 +                i;
 +
 +            // Sort all the keys in the font map alphabetically
 +            sortedNames = Object.keys(fontMap);
 +            sortedNames.sort();
 +
 +            for (i = 0; i < sortedNames.length; i += 1) {
 +                key = sortedNames[i];
 +                value = fontMap[key];
 +
 +                // Use the font declaration only if the family is not already used.
 +                // Therefore we are able to discard the alphabetic successors of the first
 +                // font name.
 +                if (usedFamilies.indexOf(value) === -1) {
 +                    array.push({
 +                        name: key,
 +                        family: value
 +                    });
 +                    if (value) {
 +                        usedFamilies.push(value);
 +                    }
 +                }
 +            }
 +
 +            return array;
 +        };
 +
 +        function undoStackModified(e) {
 +            self.emit(EditorSession.signalUndoStackChanged, e);
 +        }
 +
 +        this.hasUndoManager = function () {
 +            return Boolean(self.sessionController.getUndoManager());
 +        };
 +
 +        this.undo = function () {
 +            var undoManager = self.sessionController.getUndoManager();
 +            undoManager.moveBackward(1);
 +        };
 +
 +        this.redo = function () {
 +            var undoManager = self.sessionController.getUndoManager();
 +            undoManager.moveForward(1);
 +        };
 +
 +        /**
 +         *
 +         * @param {!string} mimetype
 +         * @param {!string} content base64 encoded string
 +         * @param {!number} width
 +         * @param {!number} height
 +         */
 +        this.insertImage = function (mimetype, content, width, height) {
 +            self.sessionController.getTextManipulator().removeCurrentSelection();
 +            self.sessionController.getImageManager().insertImage(mimetype, content, width, height);
 +        };
-         /**
-          * @param {!function(!Object=)} callback, passing an error object in case of error
-          * @return {undefined}
-          */
-         this.close = function (callback) {
-             callback();
-             /*
-             self.sessionView.close(function(err) {
-                 if (err) {
-                     callback(err);
-                 } else {
-                     caretManager.close(function(err) {
-                         if (err) {
-                             callback(err);
-                         } else {
-                             self.sessionController.close(callback);
-                         }
-                     });
-                 }
-             });
-             */
-         };
 +
 +        /**
 +         * @param {!function(!Object=)} callback, passing an error object in case of error
 +         * @return {undefined}
 +         */
 +        this.destroy = function(callback) {
 +            var head = document.getElementsByTagName('head')[0];
 +
 +            head.removeChild(fontStyles);
 +
 +            odtDocument.unsubscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalCommonStyleCreated, onStyleCreated);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalCommonStyleDeleted, onStyleDeleted);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalParagraphStyleModified, onParagraphStyleModified);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalParagraphChanged, trackCurrentParagraph);
 +            odtDocument.unsubscribe(ops.OdtDocument.signalUndoStackChanged, undoStackModified);
 +
 +            self.sessionView.destroy(function(err) {
 +                if (err) {
 +                    callback(err);
 +                } else {
 +                    delete self.sessionView;
 +                    caretManager.destroy(function(err) {
 +                        if (err) {
 +                            callback(err);
 +                        } else {
 +                            selectionViewManager.destroy(function(err) {
 +                                if (err) {
 +                                    callback(err);
 +                                } else {
 +                                    self.sessionController.destroy(function(err) {
 +                                        if (err) {
 +                                            callback(err);
 +                                        } else {
 +                                            delete self.sessionController;
 +                                            callback();
 +                                        }
 +                                    });
 +                                }
 +                            });
 +                        }
 +                    });
 +                }
 +            });
 +        };
 +
 +        function init() {
 +            var head = document.getElementsByTagName('head')[0];
 +
 +            // TODO: fonts.css should be rather done by odfCanvas, or?
 +            fontStyles.type = 'text/css';
 +            fontStyles.media = 'screen, print, handheld, projection';
 +            fontStyles.appendChild(document.createTextNode(fontsCSS));
 +            head.appendChild(fontStyles);
 +
 +            self.sessionController = new gui.SessionController(session, localMemberId, shadowCursor, {
-                 directStylingEnabled: config.directStylingEnabled
++                directParagraphStylingEnabled: config.directParagraphStylingEnabled
 +            });
 +            caretManager = new gui.CaretManager(self.sessionController);
 +            selectionViewManager = new gui.SelectionViewManager();
 +            self.sessionView = new gui.SessionView(config.viewOptions, localMemberId, session, caretManager, selectionViewManager);
 +            self.availableFonts = getAvailableFonts();
 +            selectionViewManager.registerCursor(shadowCursor, true);
 +            // Custom signals, that make sense in the Editor context. We do not want to expose webodf's ops signals to random bits of the editor UI.
 +            odtDocument.subscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +            odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +            odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +            odtDocument.subscribe(ops.OdtDocument.signalCommonStyleCreated, onStyleCreated);
 +            odtDocument.subscribe(ops.OdtDocument.signalCommonStyleDeleted, onStyleDeleted);
 +            odtDocument.subscribe(ops.OdtDocument.signalParagraphStyleModified, onParagraphStyleModified);
 +            odtDocument.subscribe(ops.OdtDocument.signalParagraphChanged, trackCurrentParagraph);
 +            odtDocument.subscribe(ops.OdtDocument.signalUndoStackChanged, undoStackModified);
 +        }
 +
 +        init();
 +    };
 +
 +    /**@const*/EditorSession.signalMemberAdded =            "memberAdded";
 +    /**@const*/EditorSession.signalMemberRemoved =          "memberRemoved";
 +    /**@const*/EditorSession.signalCursorMoved =            "cursorMoved";
 +    /**@const*/EditorSession.signalParagraphChanged =       "paragraphChanged";
 +    /**@const*/EditorSession.signalCommonStyleCreated =     "styleCreated";
 +    /**@const*/EditorSession.signalCommonStyleDeleted =     "styleDeleted";
 +    /**@const*/EditorSession.signalParagraphStyleModified = "paragraphStyleModified";
 +    /**@const*/EditorSession.signalUndoStackChanged =       "signalUndoStackChanged";
 +
 +    return EditorSession;
 +});
diff --cc apps/documents/js/3rdparty/webodf/editor/Tools.js
index f4a6ccb,0000000..8ab50b2
mode 100644,000000..100644
--- a/apps/documents/js/3rdparty/webodf/editor/Tools.js
+++ b/apps/documents/js/3rdparty/webodf/editor/Tools.js
@@@ -1,269 -1,0 +1,267 @@@
 +/**
 + * Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 + *
 + * @licstart
 + * The JavaScript code in this page is free software: you can redistribute it
 + * and/or modify it under the terms of the GNU Affero General Public License
 + * (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + * the License, or (at your option) any later version.  The code is distributed
 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 + *
 + * You should have received a copy of the GNU Affero General Public License
 + * along with this code.  If not, see <http://www.gnu.org/licenses/>.
 + *
 + * As additional permission under GNU AGPL version 3 section 7, you
 + * may distribute non-source (e.g., minimized or compacted) forms of
 + * that code without the copy of the GNU GPL normally required by
 + * section 4, provided you include this license notice and a URL
 + * through which recipients can access the Corresponding Source.
 + *
 + * As a special exception to the AGPL, any HTML file which merely makes function
 + * calls to this code, and for that purpose includes it by reference shall be
 + * deemed a separate work for copyright law purposes. In addition, the copyright
 + * holders of this code give you permission to combine this code with free
 + * software libraries that are released under the GNU LGPL. You may copy and
 + * distribute such a system following the terms of the GNU AGPL for this code
 + * and the LGPL for the libraries. If you modify this code, you may extend this
 + * exception to your version of the code, but you are not obligated to do so.
 + * If you do not wish to do so, delete this exception statement from your
 + * version.
 + *
 + * This license applies to this entire compilation.
 + * @licend
 + * @source: http://www.webodf.org/
 + * @source: https://github.com/kogmbh/WebODF/
 + */
 +
 +/*global define,document,require,ops */
 +
 +define("webodf/editor/Tools", [
 +    "dojo/ready",
 +    "dijit/MenuItem",
 +    "dijit/DropDownMenu",
 +    "dijit/form/Button",
 +    "dijit/form/DropDownButton",
 +    "dijit/Toolbar",
 +    "webodf/editor/widgets/paragraphAlignment",
 +    "webodf/editor/widgets/simpleStyles",
 +    "webodf/editor/widgets/undoRedoMenu",
 +    "webodf/editor/widgets/toolbarWidgets/currentStyle",
 +    "webodf/editor/widgets/annotation",
 +    "webodf/editor/widgets/paragraphStylesDialog",
 +    "webodf/editor/widgets/imageInserter",
 +    "webodf/editor/widgets/zoomSlider",
 +    "webodf/editor/EditorSession"],
 +    function (ready, MenuItem, DropDownMenu, Button, DropDownButton, Toolbar, ParagraphAlignment, SimpleStyles, UndoRedoMenu, CurrentStyle, AnnotationControl, ParagraphStylesDialog, ImageInserter, ZoomSlider, EditorSession) {
 +        "use strict";
 +
 +        return function Tools(args) {
 +            var tr = runtime.tr,
 +                onToolDone = args.onToolDone,
 +                loadOdtFile = args.loadOdtFile,
 +                saveOdtFile = args.saveOdtFile,
 +                close = args.close,
 +                toolbar,
 +                loadButton, saveButton, closeButton,
 +                formatDropDownMenu, formatMenuButton,
 +                paragraphStylesMenuItem, paragraphStylesDialog, simpleStyles, currentStyle,
 +                zoomSlider,
 +                undoRedoMenu,
 +                editorSession,
 +                paragraphAlignment,
 +                imageInserter,
 +                annotationControl,
 +                sessionSubscribers = [];
 +
 +            function handleCursorMoved(cursor) {
 +                var disabled = cursor.getSelectionType() === ops.OdtCursor.RegionSelection;
 +                if (formatMenuButton) {
 +                    formatMenuButton.setAttribute('disabled', disabled);
 +                }
 +            }
 +
 +            function setEditorSession(session) {
 +                if (editorSession) {
 +                    editorSession.unsubscribe(EditorSession.signalCursorMoved, handleCursorMoved);
 +                }
 +                editorSession = session;
 +                if (editorSession) {
 +                    editorSession.subscribe(EditorSession.signalCursorMoved, handleCursorMoved);
 +                }
 +
 +                sessionSubscribers.forEach(function (subscriber) {
 +                    subscriber.setEditorSession(editorSession);
 +                });
 +            }
 +
 +            this.setEditorSession = setEditorSession;
 +
 +            /**
 +             * @param {!function(!Object=)} callback, passing an error object in case of error
 +             * @return {undefined}
 +             */
 +            this.destroy = function (callback) {
 +                // TODO:
 +                // 1. We don't want to use `document`
 +                // 2. We would like to avoid deleting all widgets
 +                // under document.body because this might interfere with
 +                // other apps that use the editor not-in-an-iframe,
 +                // but dojo always puts its dialogs below the body,
 +                // so this works for now. Perhaps will be obsoleted
 +                // once we move to a better widget toolkit
 +                var widgets = dijit.findWidgets(document.body);
 +                dojo.forEach(widgets, function(w) {
 +                    w.destroyRecursive(false);
 +                });
 +                callback();
 +            };
 +
 +            // init
 +            ready(function () {
 +                toolbar = new Toolbar({}, "toolbar");
 +
 +                // Undo/Redo
 +                if (args.undoRedoEnabled) {
 +                    undoRedoMenu = new UndoRedoMenu(function (widget) {
 +                        widget.placeAt(toolbar);
 +                        widget.startup();
 +                    });
 +                    sessionSubscribers.push(undoRedoMenu);
 +                }
 +
 +                // Add annotation
 +                if (args.annotationsEnabled) {
 +                    annotationControl = new AnnotationControl(function (widget) {
 +                        widget.placeAt(toolbar);
 +                        widget.startup();
 +                    });
 +                    sessionSubscribers.push(annotationControl);
 +                    annotationControl.onToolDone = onToolDone;
 +                }
 +
 +                // Simple Style Selector [B, I, U, S]
-                 if (args.directStylingEnabled) {
-                     simpleStyles = new SimpleStyles(function (widget) {
-                         widget.placeAt(toolbar);
-                         widget.startup();
-                     });
-                     sessionSubscribers.push(simpleStyles);
-                     simpleStyles.onToolDone = onToolDone;
-                 }
++                simpleStyles = new SimpleStyles(function (widget) {
++                    widget.placeAt(toolbar);
++                    widget.startup();
++                });
++                sessionSubscribers.push(simpleStyles);
++                simpleStyles.onToolDone = onToolDone;
 +
 +                // Paragraph direct alignment buttons
-                 if (args.directStylingEnabled) {
++                if (args.directParagraphStylingEnabled) {
 +                    paragraphAlignment = new ParagraphAlignment(function (widget) {
 +                        widget.placeAt(toolbar);
 +                        widget.startup();
 +                    });
 +                    sessionSubscribers.push(paragraphAlignment);
 +                    paragraphAlignment.onToolDone = onToolDone;
 +                }
 +
 +
 +                // Paragraph Style Selector
 +                currentStyle = new CurrentStyle(function (widget) {
 +                    widget.placeAt(toolbar);
 +                    widget.startup();
 +                });
 +                sessionSubscribers.push(currentStyle);
 +                currentStyle.onToolDone = onToolDone;
 +
 +                // Zoom Level Selector
 +                zoomSlider = new ZoomSlider(function (widget) {
 +                    widget.placeAt(toolbar);
 +                    widget.startup();
 +                });
 +                sessionSubscribers.push(zoomSlider);
 +                zoomSlider.onToolDone = onToolDone;
 +
 +                // Load
 +                if (loadOdtFile) {
 +                    loadButton = new Button({
 +                        label: tr('Open'),
 +                        showLabel: false,
 +                        iconClass: 'dijitIcon dijitIconFolderOpen',
 +                        style: {
 +                            float: 'left'
 +                        },
 +                        onClick: function () {
 +                            loadOdtFile();
 +                        }
 +                    });
 +                    loadButton.placeAt(toolbar);
 +                }
 +
 +                // Save
 +                if (saveOdtFile) {
 +                    saveButton = new Button({
 +                        label: tr('Save'),
 +                        showLabel: false,
 +                        iconClass: 'dijitEditorIcon dijitEditorIconSave',
 +                        style: {
 +                            float: 'left'
 +                        },
 +                        onClick: function () {
 +                            saveOdtFile();
 +                            onToolDone();
 +                        }
 +                    });
 +                    saveButton.placeAt(toolbar);
 +                }
 +
 +                // Format menu
 +                formatDropDownMenu = new DropDownMenu({});
 +                paragraphStylesMenuItem = new MenuItem({
 +                    label: tr("Paragraph...")
 +                });
 +                formatDropDownMenu.addChild(paragraphStylesMenuItem);
 +
 +                paragraphStylesDialog = new ParagraphStylesDialog(function (dialog) {
 +                    paragraphStylesMenuItem.onClick = function () {
 +                        if (editorSession) {
 +                            dialog.startup();
 +                            dialog.show();
 +                        }
 +                    };
 +                });
 +                sessionSubscribers.push(paragraphStylesDialog);
 +                paragraphStylesDialog.onToolDone = onToolDone;
 +
 +                formatMenuButton = new DropDownButton({
 +                    dropDown: formatDropDownMenu,
 +                    label: tr('Format'),
 +                    iconClass: "dijitIconEditTask",
 +                    style: {
 +                        float: 'left'
 +                    }
 +                });
 +                formatMenuButton.placeAt(toolbar);
 +
 +                if (args.imageInsertingEnabled) {
 +                    imageInserter = new ImageInserter(function (widget) {
 +                        widget.placeAt(toolbar);
 +                        widget.startup();
 +                    });
 +                    sessionSubscribers.push(imageInserter);
 +                    imageInserter.onToolDone = onToolDone;
 +                }
 +
 +                if (close) {
 +                    closeButton = new Button({
 +                        label: tr('Close'),
 +                        showLabel: false,
 +                        iconClass: 'dijitEditorIcon dijitEditorIconCancel',
 +                        style: {
 +                            float: 'right'
 +                        },
 +                        onClick: function () {
 +                            close();
 +                        }
 +                    });
 +                    closeButton.placeAt(toolbar);
 +                }
 +
 +                setEditorSession(editorSession);
 +            });
 +        };
 +
 +    });
diff --cc apps/documents/js/3rdparty/webodf/webodf-debug.js
index 6c1479d,0000000..3e014e5
mode 100644,000000..100644
--- a/apps/documents/js/3rdparty/webodf/webodf-debug.js
+++ b/apps/documents/js/3rdparty/webodf/webodf-debug.js
@@@ -1,17070 -1,0 +1,17580 @@@
 +/*
 +
 +
 + Copyright (C) 2012 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +var core = {};
 +var gui = {};
 +var xmldom = {};
 +var odf = {};
 +var ops = {};
 +function Runtime() {
 +}
 +Runtime.ByteArray = function(size) {
 +};
 +Runtime.prototype.getVariable = function(name) {
 +};
 +Runtime.prototype.toJson = function(anything) {
 +};
 +Runtime.prototype.fromJson = function(jsonstr) {
 +};
 +Runtime.ByteArray.prototype.slice = function(start, end) {
 +};
 +Runtime.ByteArray.prototype.length = 0;
 +Runtime.prototype.byteArrayFromArray = function(array) {
 +};
 +Runtime.prototype.byteArrayFromString = function(string, encoding) {
 +};
 +Runtime.prototype.byteArrayToString = function(bytearray, encoding) {
 +};
 +Runtime.prototype.concatByteArrays = function(bytearray1, bytearray2) {
 +};
 +Runtime.prototype.read = function(path, offset, length, callback) {
 +};
 +Runtime.prototype.readFile = function(path, encoding, callback) {
 +};
 +Runtime.prototype.readFileSync = function(path, encoding) {
 +};
 +Runtime.prototype.loadXML = function(path, callback) {
 +};
 +Runtime.prototype.writeFile = function(path, data, callback) {
 +};
 +Runtime.prototype.isFile = function(path, callback) {
 +};
 +Runtime.prototype.getFileSize = function(path, callback) {
 +};
 +Runtime.prototype.deleteFile = function(path, callback) {
 +};
 +Runtime.prototype.log = function(msgOrCategory, msg) {
 +};
 +Runtime.prototype.setTimeout = function(callback, milliseconds) {
 +};
 +Runtime.prototype.clearTimeout = function(timeoutID) {
 +};
 +Runtime.prototype.libraryPaths = function() {
 +};
 +Runtime.prototype.type = function() {
 +};
 +Runtime.prototype.getDOMImplementation = function() {
 +};
 +Runtime.prototype.parseXML = function(xml) {
 +};
 +Runtime.prototype.getWindow = function() {
 +};
 +Runtime.prototype.assert = function(condition, message, callback) {
 +};
 +var IS_COMPILED_CODE = false;
 +Runtime.byteArrayToString = function(bytearray, encoding) {
 +  function byteArrayToString(bytearray) {
 +    var s = "", i, l = bytearray.length;
 +    for(i = 0;i < l;i += 1) {
 +      s += String.fromCharCode(bytearray[i] & 255)
 +    }
 +    return s
 +  }
 +  function utf8ByteArrayToString(bytearray) {
 +    var s = "", i, l = bytearray.length, c0, c1, c2, c3, codepoint;
 +    for(i = 0;i < l;i += 1) {
 +      c0 = bytearray[i];
 +      if(c0 < 128) {
 +        s += String.fromCharCode(c0)
 +      }else {
 +        i += 1;
 +        c1 = bytearray[i];
 +        if(c0 >= 194 && c0 < 224) {
 +          s += String.fromCharCode((c0 & 31) << 6 | c1 & 63)
 +        }else {
 +          i += 1;
 +          c2 = bytearray[i];
 +          if(c0 >= 224 && c0 < 240) {
 +            s += String.fromCharCode((c0 & 15) << 12 | (c1 & 63) << 6 | c2 & 63)
 +          }else {
 +            i += 1;
 +            c3 = bytearray[i];
 +            if(c0 >= 240 && c0 < 245) {
 +              codepoint = (c0 & 7) << 18 | (c1 & 63) << 12 | (c2 & 63) << 6 | c3 & 63;
 +              codepoint -= 65536;
 +              s += String.fromCharCode((codepoint >> 10) + 55296, (codepoint & 1023) + 56320)
 +            }
 +          }
 +        }
 +      }
 +    }
 +    return s
 +  }
 +  var result;
 +  if(encoding === "utf8") {
 +    result = utf8ByteArrayToString(bytearray)
 +  }else {
 +    if(encoding !== "binary") {
 +      this.log("Unsupported encoding: " + encoding)
 +    }
 +    result = byteArrayToString(bytearray)
 +  }
 +  return result
 +};
 +Runtime.getVariable = function(name) {
 +  try {
 +    return eval(name)
 +  }catch(e) {
 +    return undefined
 +  }
 +};
 +Runtime.toJson = function(anything) {
 +  return JSON.stringify(anything)
 +};
 +Runtime.fromJson = function(jsonstr) {
 +  return JSON.parse(jsonstr)
 +};
 +Runtime.getFunctionName = function getFunctionName(f) {
 +  var m;
 +  if(f.name === undefined) {
 +    m = (new RegExp("function\\s+(\\w+)")).exec(f);
 +    return m && m[1]
 +  }
 +  return f.name
 +};
 +function BrowserRuntime(logoutput) {
 +  var self = this, cache = {}, useNativeArray = window.ArrayBuffer && window.Uint8Array;
 +  if(useNativeArray) {
 +    Uint8Array.prototype.slice = function(begin, end) {
 +      if(end === undefined) {
 +        if(begin === undefined) {
 +          begin = 0
 +        }
 +        end = this.length
 +      }
 +      var view = this.subarray(begin, end), array, i;
 +      end -= begin;
 +      array = new Uint8Array(new ArrayBuffer(end));
 +      for(i = 0;i < end;i += 1) {
 +        array[i] = view[i]
 +      }
 +      return array
 +    }
 +  }
 +  this.ByteArray = useNativeArray ? function ByteArray(size) {
 +    return new Uint8Array(new ArrayBuffer(size))
 +  } : function ByteArray(size) {
 +    var a = [];
 +    a.length = size;
 +    return a
 +  };
 +  this.concatByteArrays = useNativeArray ? function(bytearray1, bytearray2) {
 +    var i, l1 = bytearray1.length, l2 = bytearray2.length, a = new this.ByteArray(l1 + l2);
 +    for(i = 0;i < l1;i += 1) {
 +      a[i] = bytearray1[i]
 +    }
 +    for(i = 0;i < l2;i += 1) {
 +      a[i + l1] = bytearray2[i]
 +    }
 +    return a
 +  } : function(bytearray1, bytearray2) {
 +    return bytearray1.concat(bytearray2)
 +  };
 +  function utf8ByteArrayFromString(string) {
 +    var l = string.length, bytearray, i, n, j = 0;
 +    for(i = 0;i < l;i += 1) {
 +      n = string.charCodeAt(i);
 +      j += 1 + (n > 128) + (n > 2048)
 +    }
 +    bytearray = new self.ByteArray(j);
 +    j = 0;
 +    for(i = 0;i < l;i += 1) {
 +      n = string.charCodeAt(i);
 +      if(n < 128) {
 +        bytearray[j] = n;
 +        j += 1
 +      }else {
 +        if(n < 2048) {
 +          bytearray[j] = 192 | n >>> 6;
 +          bytearray[j + 1] = 128 | n & 63;
 +          j += 2
 +        }else {
 +          bytearray[j] = 224 | n >>> 12 & 15;
 +          bytearray[j + 1] = 128 | n >>> 6 & 63;
 +          bytearray[j + 2] = 128 | n & 63;
 +          j += 3
 +        }
 +      }
 +    }
 +    return bytearray
 +  }
 +  function byteArrayFromString(string) {
 +    var l = string.length, a = new self.ByteArray(l), i;
 +    for(i = 0;i < l;i += 1) {
 +      a[i] = string.charCodeAt(i) & 255
 +    }
 +    return a
 +  }
 +  this.byteArrayFromArray = function(array) {
 +    return array.slice()
 +  };
 +  this.byteArrayFromString = function(string, encoding) {
 +    var result;
 +    if(encoding === "utf8") {
 +      result = utf8ByteArrayFromString(string)
 +    }else {
 +      if(encoding !== "binary") {
 +        self.log("unknown encoding: " + encoding)
 +      }
 +      result = byteArrayFromString(string)
 +    }
 +    return result
 +  };
 +  this.byteArrayToString = Runtime.byteArrayToString;
 +  this.getVariable = Runtime.getVariable;
 +  this.fromJson = Runtime.fromJson;
 +  this.toJson = Runtime.toJson;
 +  function log(msgOrCategory, msg) {
 +    var node, doc, category;
 +    if(msg !== undefined) {
 +      category = msgOrCategory
 +    }else {
 +      msg = msgOrCategory
 +    }
 +    if(logoutput) {
 +      doc = logoutput.ownerDocument;
 +      if(category) {
 +        node = doc.createElement("span");
 +        node.className = category;
 +        node.appendChild(doc.createTextNode(category));
 +        logoutput.appendChild(node);
 +        logoutput.appendChild(doc.createTextNode(" "))
 +      }
 +      node = doc.createElement("span");
 +      if(msg.length > 0 && msg[0] === "<") {
 +        node.innerHTML = msg
 +      }else {
 +        node.appendChild(doc.createTextNode(msg))
 +      }
 +      logoutput.appendChild(node);
 +      logoutput.appendChild(doc.createElement("br"))
 +    }else {
 +      if(console) {
 +        console.log(msg)
 +      }
 +    }
 +    if(category === "alert") {
 +      alert(msg)
 +    }
 +  }
 +  function assert(condition, message, callback) {
 +    if(!condition) {
 +      log("alert", "ASSERTION FAILED:\n" + message);
 +      if(callback) {
 +        callback()
 +      }
 +      throw message;
 +    }
 +  }
 +  function readFile(path, encoding, callback) {
 +    if(cache.hasOwnProperty(path)) {
 +      callback(null, cache[path]);
 +      return
 +    }
 +    var xhr = new XMLHttpRequest;
 +    function handleResult() {
 +      var data;
 +      if(xhr.readyState === 4) {
 +        if(xhr.status === 0 && !xhr.responseText) {
 +          callback("File " + path + " is empty.")
 +        }else {
 +          if(xhr.status === 200 || xhr.status === 0) {
 +            if(encoding === "binary") {
 +              if(xhr.responseBody !== null && String(typeof VBArray) !== "undefined") {
 +                data = (new VBArray(xhr.responseBody)).toArray()
 +              }else {
 +                data = self.byteArrayFromString(xhr.responseText, "binary")
 +              }
 +            }else {
 +              data = xhr.responseText
 +            }
 +            cache[path] = data;
 +            callback(null, data)
 +          }else {
 +            callback(xhr.responseText || xhr.statusText)
 +          }
 +        }
 +      }
 +    }
 +    xhr.open("GET", path, true);
 +    xhr.onreadystatechange = handleResult;
 +    if(xhr.overrideMimeType) {
 +      if(encoding !== "binary") {
 +        xhr.overrideMimeType("text/plain; charset=" + encoding)
 +      }else {
 +        xhr.overrideMimeType("text/plain; charset=x-user-defined")
 +      }
 +    }
 +    try {
 +      xhr.send(null)
 +    }catch(e) {
 +      callback(e.message)
 +    }
 +  }
 +  function read(path, offset, length, callback) {
 +    if(cache.hasOwnProperty(path)) {
 +      callback(null, cache[path].slice(offset, offset + length));
 +      return
 +    }
 +    var xhr = new XMLHttpRequest;
 +    function handleResult() {
 +      var data;
 +      if(xhr.readyState === 4) {
 +        if(xhr.status === 0 && !xhr.responseText) {
 +          callback("File " + path + " is empty.")
 +        }else {
 +          if(xhr.status === 200 || xhr.status === 0) {
 +            if(xhr.response) {
 +              data = (xhr.response);
 +              data = new Uint8Array(data)
 +            }else {
 +              if(xhr.responseBody !== null && String(typeof VBArray) !== "undefined") {
 +                data = (new VBArray(xhr.responseBody)).toArray()
 +              }else {
 +                data = self.byteArrayFromString(xhr.responseText, "binary")
 +              }
 +            }
 +            cache[path] = data;
 +            callback(null, data.slice(offset, offset + length))
 +          }else {
 +            callback(xhr.responseText || xhr.statusText)
 +          }
 +        }
 +      }
 +    }
 +    xhr.open("GET", path, true);
 +    xhr.onreadystatechange = handleResult;
 +    if(xhr.overrideMimeType) {
 +      xhr.overrideMimeType("text/plain; charset=x-user-defined")
 +    }
 +    xhr.responseType = "arraybuffer";
 +    try {
 +      xhr.send(null)
 +    }catch(e) {
 +      callback(e.message)
 +    }
 +  }
 +  function readFileSync(path, encoding) {
 +    var xhr = new XMLHttpRequest, result;
 +    xhr.open("GET", path, false);
 +    if(xhr.overrideMimeType) {
 +      if(encoding !== "binary") {
 +        xhr.overrideMimeType("text/plain; charset=" + encoding)
 +      }else {
 +        xhr.overrideMimeType("text/plain; charset=x-user-defined")
 +      }
 +    }
 +    try {
 +      xhr.send(null);
 +      if(xhr.status === 200 || xhr.status === 0) {
 +        result = xhr.responseText
 +      }
 +    }catch(ignore) {
 +    }
 +    return result
 +  }
 +  function writeFile(path, data, callback) {
 +    cache[path] = data;
 +    var xhr = new XMLHttpRequest;
 +    function handleResult() {
 +      if(xhr.readyState === 4) {
 +        if(xhr.status === 0 && !xhr.responseText) {
 +          callback("File " + path + " is empty.")
 +        }else {
 +          if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 0) {
 +            callback(null)
 +          }else {
 +            callback("Status " + String(xhr.status) + ": " + xhr.responseText || xhr.statusText)
 +          }
 +        }
 +      }
 +    }
 +    xhr.open("PUT", path, true);
 +    xhr.onreadystatechange = handleResult;
 +    if(data.buffer && !xhr.sendAsBinary) {
 +      data = data.buffer
 +    }else {
 +      data = self.byteArrayToString(data, "binary")
 +    }
 +    try {
 +      if(xhr.sendAsBinary) {
 +        xhr.sendAsBinary(data)
 +      }else {
 +        xhr.send(data)
 +      }
 +    }catch(e) {
 +      self.log("HUH? " + e + " " + data);
 +      callback(e.message)
 +    }
 +  }
 +  function deleteFile(path, callback) {
 +    delete cache[path];
 +    var xhr = new XMLHttpRequest;
 +    xhr.open("DELETE", path, true);
 +    xhr.onreadystatechange = function() {
 +      if(xhr.readyState === 4) {
 +        if(xhr.status < 200 && xhr.status >= 300) {
 +          callback(xhr.responseText)
 +        }else {
 +          callback(null)
 +        }
 +      }
 +    };
 +    xhr.send(null)
 +  }
 +  function loadXML(path, callback) {
 +    var xhr = new XMLHttpRequest;
 +    function handleResult() {
 +      if(xhr.readyState === 4) {
 +        if(xhr.status === 0 && !xhr.responseText) {
 +          callback("File " + path + " is empty.")
 +        }else {
 +          if(xhr.status === 200 || xhr.status === 0) {
 +            callback(null, xhr.responseXML)
 +          }else {
 +            callback(xhr.responseText)
 +          }
 +        }
 +      }
 +    }
 +    xhr.open("GET", path, true);
 +    if(xhr.overrideMimeType) {
 +      xhr.overrideMimeType("text/xml")
 +    }
 +    xhr.onreadystatechange = handleResult;
 +    try {
 +      xhr.send(null)
 +    }catch(e) {
 +      callback(e.message)
 +    }
 +  }
 +  function isFile(path, callback) {
 +    self.getFileSize(path, function(size) {
 +      callback(size !== -1)
 +    })
 +  }
 +  function getFileSize(path, callback) {
 +    var xhr = new XMLHttpRequest;
 +    xhr.open("HEAD", path, true);
 +    xhr.onreadystatechange = function() {
 +      if(xhr.readyState !== 4) {
 +        return
 +      }
 +      var cl = xhr.getResponseHeader("Content-Length");
 +      if(cl) {
 +        callback(parseInt(cl, 10))
 +      }else {
 +        readFile(path, "binary", function(err, data) {
 +          if(!err) {
 +            callback(data.length)
 +          }else {
 +            callback(-1)
 +          }
 +        })
 +      }
 +    };
 +    xhr.send(null)
 +  }
 +  this.readFile = readFile;
 +  this.read = read;
 +  this.readFileSync = readFileSync;
 +  this.writeFile = writeFile;
 +  this.deleteFile = deleteFile;
 +  this.loadXML = loadXML;
 +  this.isFile = isFile;
 +  this.getFileSize = getFileSize;
 +  this.log = log;
 +  this.assert = assert;
 +  this.setTimeout = function(f, msec) {
 +    return setTimeout(function() {
 +      f()
 +    }, msec)
 +  };
 +  this.clearTimeout = function(timeoutID) {
 +    clearTimeout(timeoutID)
 +  };
 +  this.libraryPaths = function() {
 +    return["lib"]
 +  };
 +  this.setCurrentDirectory = function() {
 +  };
 +  this.type = function() {
 +    return"BrowserRuntime"
 +  };
 +  this.getDOMImplementation = function() {
 +    return window.document.implementation
 +  };
 +  this.parseXML = function(xml) {
 +    var parser = new DOMParser;
 +    return parser.parseFromString(xml, "text/xml")
 +  };
 +  this.exit = function(exitCode) {
 +    log("Calling exit with code " + String(exitCode) + ", but exit() is not implemented.")
 +  };
 +  this.getWindow = function() {
 +    return window
 +  }
 +}
 +function NodeJSRuntime() {
 +  var self = this, fs = require("fs"), pathmod = require("path"), currentDirectory = "", parser, domImplementation;
 +  this.ByteArray = function(size) {
 +    return new Buffer(size)
 +  };
 +  this.byteArrayFromArray = function(array) {
 +    var ba = new Buffer(array.length), i, l = array.length;
 +    for(i = 0;i < l;i += 1) {
 +      ba[i] = array[i]
 +    }
 +    return ba
 +  };
 +  this.concatByteArrays = function(a, b) {
 +    var ba = new Buffer(a.length + b.length);
 +    a.copy(ba, 0, 0);
 +    b.copy(ba, a.length, 0);
 +    return ba
 +  };
 +  this.byteArrayFromString = function(string, encoding) {
 +    return new Buffer(string, encoding)
 +  };
 +  this.byteArrayToString = function(bytearray, encoding) {
 +    return bytearray.toString(encoding)
 +  };
 +  this.getVariable = Runtime.getVariable;
 +  this.fromJson = Runtime.fromJson;
 +  this.toJson = Runtime.toJson;
 +  function isFile(path, callback) {
 +    path = pathmod.resolve(currentDirectory, path);
 +    fs.stat(path, function(err, stats) {
 +      callback(!err && stats.isFile())
 +    })
 +  }
 +  function readFile(path, encoding, callback) {
 +    path = pathmod.resolve(currentDirectory, path);
 +    if(encoding !== "binary") {
 +      fs.readFile(path, encoding, callback)
 +    }else {
 +      fs.readFile(path, null, callback)
 +    }
 +  }
 +  this.readFile = readFile;
 +  function loadXML(path, callback) {
 +    readFile(path, "utf-8", function(err, data) {
 +      if(err) {
 +        return callback(err)
 +      }
 +      callback(null, self.parseXML(data))
 +    })
 +  }
 +  this.loadXML = loadXML;
 +  this.writeFile = function(path, data, callback) {
 +    path = pathmod.resolve(currentDirectory, path);
 +    fs.writeFile(path, data, "binary", function(err) {
 +      callback(err || null)
 +    })
 +  };
 +  this.deleteFile = function(path, callback) {
 +    path = pathmod.resolve(currentDirectory, path);
 +    fs.unlink(path, callback)
 +  };
 +  this.read = function(path, offset, length, callback) {
 +    path = pathmod.resolve(currentDirectory, path);
 +    fs.open(path, "r+", 666, function(err, fd) {
 +      if(err) {
 +        callback(err);
 +        return
 +      }
 +      var buffer = new Buffer(length);
 +      fs.read(fd, buffer, 0, length, offset, function(err) {
 +        fs.close(fd);
 +        callback(err, buffer)
 +      })
 +    })
 +  };
 +  this.readFileSync = function(path, encoding) {
 +    if(!encoding) {
 +      return""
 +    }
 +    if(encoding === "binary") {
 +      return fs.readFileSync(path, null)
 +    }
 +    return fs.readFileSync(path, encoding)
 +  };
 +  this.isFile = isFile;
 +  this.getFileSize = function(path, callback) {
 +    path = pathmod.resolve(currentDirectory, path);
 +    fs.stat(path, function(err, stats) {
 +      if(err) {
 +        callback(-1)
 +      }else {
 +        callback(stats.size)
 +      }
 +    })
 +  };
 +  function log(msgOrCategory, msg) {
 +    var category;
 +    if(msg !== undefined) {
 +      category = msgOrCategory
 +    }else {
 +      msg = msgOrCategory
 +    }
 +    if(category === "alert") {
 +      process.stderr.write("\n!!!!! ALERT !!!!!" + "\n")
 +    }
 +    process.stderr.write(msg + "\n");
 +    if(category === "alert") {
 +      process.stderr.write("!!!!! ALERT !!!!!" + "\n")
 +    }
 +  }
 +  this.log = log;
 +  function assert(condition, message, callback) {
 +    if(!condition) {
 +      process.stderr.write("ASSERTION FAILED: " + message);
 +      if(callback) {
 +        callback()
 +      }
 +    }
 +  }
 +  this.assert = assert;
 +  this.setTimeout = function(f, msec) {
 +    return setTimeout(function() {
 +      f()
 +    }, msec)
 +  };
 +  this.clearTimeout = function(timeoutID) {
 +    clearTimeout(timeoutID)
 +  };
 +  this.libraryPaths = function() {
 +    return[__dirname]
 +  };
 +  this.setCurrentDirectory = function(dir) {
 +    currentDirectory = dir
 +  };
 +  this.currentDirectory = function() {
 +    return currentDirectory
 +  };
 +  this.type = function() {
 +    return"NodeJSRuntime"
 +  };
 +  this.getDOMImplementation = function() {
 +    return domImplementation
 +  };
 +  this.parseXML = function(xml) {
 +    return parser.parseFromString(xml, "text/xml")
 +  };
 +  this.exit = process.exit;
 +  this.getWindow = function() {
 +    return null
 +  };
 +  function init() {
 +    var DOMParser = require("xmldom").DOMParser;
 +    parser = new DOMParser;
 +    domImplementation = self.parseXML("<a/>").implementation
 +  }
 +  init()
 +}
 +function RhinoRuntime() {
 +  var self = this, dom = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(), builder, entityresolver, currentDirectory = "";
 +  dom.setValidating(false);
 +  dom.setNamespaceAware(true);
 +  dom.setExpandEntityReferences(false);
 +  dom.setSchema(null);
 +  entityresolver = Packages.org.xml.sax.EntityResolver({resolveEntity:function(publicId, systemId) {
 +    var file, open = function(path) {
 +      var reader = new Packages.java.io.FileReader(path), source = new Packages.org.xml.sax.InputSource(reader);
 +      return source
 +    };
 +    file = systemId;
 +    return open(file)
 +  }});
 +  builder = dom.newDocumentBuilder();
 +  builder.setEntityResolver(entityresolver);
 +  this.ByteArray = function ByteArray(size) {
 +    return[size]
 +  };
 +  this.byteArrayFromArray = function(array) {
 +    return array
 +  };
 +  this.byteArrayFromString = function(string, encoding) {
 +    var a = [], i, l = string.length;
 +    for(i = 0;i < l;i += 1) {
 +      a[i] = string.charCodeAt(i) & 255
 +    }
 +    return a
 +  };
 +  this.byteArrayToString = Runtime.byteArrayToString;
 +  this.getVariable = Runtime.getVariable;
 +  this.fromJson = Runtime.fromJson;
 +  this.toJson = Runtime.toJson;
 +  this.concatByteArrays = function(bytearray1, bytearray2) {
 +    return bytearray1.concat(bytearray2)
 +  };
 +  function loadXML(path, callback) {
 +    var file = new Packages.java.io.File(path), xmlDocument;
 +    try {
 +      xmlDocument = builder.parse(file)
 +    }catch(err) {
 +      print(err);
 +      callback(err);
 +      return
 +    }
 +    callback(null, xmlDocument)
 +  }
 +  function runtimeReadFile(path, encoding, callback) {
 +    if(currentDirectory) {
 +      path = currentDirectory + "/" + path
 +    }
 +    var file = new Packages.java.io.File(path), data, rhinoencoding = encoding === "binary" ? "latin1" : encoding;
 +    if(!file.isFile()) {
 +      callback(path + " is not a file.")
 +    }else {
 +      data = readFile(path, rhinoencoding);
 +      if(encoding === "binary") {
 +        data = self.byteArrayFromString(data, "binary")
 +      }
 +      callback(null, data)
 +    }
 +  }
 +  function runtimeReadFileSync(path, encoding) {
 +    var file = new Packages.java.io.File(path);
 +    if(!file.isFile()) {
 +      return null
 +    }
 +    if(encoding === "binary") {
 +      encoding = "latin1"
 +    }
 +    return readFile(path, encoding)
 +  }
 +  function isFile(path, callback) {
 +    if(currentDirectory) {
 +      path = currentDirectory + "/" + path
 +    }
 +    var file = new Packages.java.io.File(path);
 +    callback(file.isFile())
 +  }
 +  this.loadXML = loadXML;
 +  this.readFile = runtimeReadFile;
 +  this.writeFile = function(path, data, callback) {
 +    if(currentDirectory) {
 +      path = currentDirectory + "/" + path
 +    }
 +    var out = new Packages.java.io.FileOutputStream(path), i, l = data.length;
 +    for(i = 0;i < l;i += 1) {
 +      out.write(data[i])
 +    }
 +    out.close();
 +    callback(null)
 +  };
 +  this.deleteFile = function(path, callback) {
 +    if(currentDirectory) {
 +      path = currentDirectory + "/" + path
 +    }
 +    var file = new Packages.java.io.File(path);
 +    if(file["delete"]()) {
 +      callback(null)
 +    }else {
 +      callback("Could not delete " + path)
 +    }
 +  };
 +  this.read = function(path, offset, length, callback) {
 +    if(currentDirectory) {
 +      path = currentDirectory + "/" + path
 +    }
 +    var data = runtimeReadFileSync(path, "binary");
 +    if(data) {
 +      callback(null, this.byteArrayFromString(data.substring(offset, offset + length), "binary"))
 +    }else {
 +      callback("Cannot read " + path)
 +    }
 +  };
 +  this.readFileSync = function(path, encoding) {
 +    if(!encoding) {
 +      return""
 +    }
 +    return readFile(path, encoding)
 +  };
 +  this.isFile = isFile;
 +  this.getFileSize = function(path, callback) {
 +    if(currentDirectory) {
 +      path = currentDirectory + "/" + path
 +    }
 +    var file = new Packages.java.io.File(path);
 +    callback(file.length())
 +  };
 +  function log(msgOrCategory, msg) {
 +    var category;
 +    if(msg !== undefined) {
 +      category = msgOrCategory
 +    }else {
 +      msg = msgOrCategory
 +    }
 +    if(category === "alert") {
 +      print("\n!!!!! ALERT !!!!!")
 +    }
 +    print(msg);
 +    if(category === "alert") {
 +      print("!!!!! ALERT !!!!!")
 +    }
 +  }
 +  this.log = log;
 +  function assert(condition, message, callback) {
 +    if(!condition) {
 +      log("alert", "ASSERTION FAILED: " + message);
 +      if(callback) {
 +        callback()
 +      }
 +    }
 +  }
 +  this.assert = assert;
 +  this.setTimeout = function(f) {
 +    f();
 +    return 0
 +  };
 +  this.clearTimeout = function() {
 +  };
 +  this.libraryPaths = function() {
 +    return["lib"]
 +  };
 +  this.setCurrentDirectory = function(dir) {
 +    currentDirectory = dir
 +  };
 +  this.currentDirectory = function() {
 +    return currentDirectory
 +  };
 +  this.type = function() {
 +    return"RhinoRuntime"
 +  };
 +  this.getDOMImplementation = function() {
 +    return builder.getDOMImplementation()
 +  };
 +  this.parseXML = function(xml) {
 +    return builder.parse(xml)
 +  };
 +  this.exit = quit;
 +  this.getWindow = function() {
 +    return null
 +  }
 +}
 +var runtime = function() {
 +  var result;
 +  if(String(typeof window) !== "undefined") {
 +    result = new BrowserRuntime(window.document.getElementById("logoutput"))
 +  }else {
 +    if(String(typeof require) !== "undefined") {
 +      result = new NodeJSRuntime
 +    }else {
 +      result = new RhinoRuntime
 +    }
 +  }
 +  return result
 +}();
 +(function() {
 +  var cache = {}, dircontents = {};
 +  function getOrDefinePackage(packageNameComponents) {
 +    var topname = packageNameComponents[0], i, pkg;
 +    pkg = eval("if (typeof " + topname + " === 'undefined') {" + "eval('" + topname + " = {};');}" + topname);
 +    for(i = 1;i < packageNameComponents.length - 1;i += 1) {
 +      if(!pkg.hasOwnProperty(packageNameComponents[i])) {
 +        pkg = pkg[packageNameComponents[i]] = {}
 +      }else {
 +        pkg = pkg[packageNameComponents[i]]
 +      }
 +    }
 +    return pkg[packageNameComponents[packageNameComponents.length - 1]]
 +  }
 +  runtime.loadClass = function(classpath) {
 +    if(IS_COMPILED_CODE) {
 +      return
 +    }
 +    if(cache.hasOwnProperty(classpath)) {
 +      return
 +    }
 +    var names = classpath.split("."), impl;
 +    impl = getOrDefinePackage(names);
 +    if(impl) {
 +      cache[classpath] = true;
 +      return
 +    }
 +    function getPathFromManifests(classpath) {
 +      var path = classpath.replace(/\./g, "/") + ".js", dirs = runtime.libraryPaths(), i, dir, code;
 +      if(runtime.currentDirectory) {
 +        dirs.push(runtime.currentDirectory())
 +      }
 +      for(i = 0;i < dirs.length;i += 1) {
 +        dir = dirs[i];
 +        if(!dircontents.hasOwnProperty(dir)) {
 +          try {
 +            code = runtime.readFileSync(dirs[i] + "/manifest.js", "utf8");
 +            if(code && code.length) {
 +              dircontents[dir] = eval(code)
 +            }else {
 +              dircontents[dir] = null
 +            }
 +          }catch(e1) {
 +            dircontents[dir] = null;
 +            runtime.log("Cannot load manifest for " + dir + ".")
 +          }
 +        }
 +        code = null;
 +        dir = dircontents[dir];
 +        if(dir && (dir.indexOf && dir.indexOf(path) !== -1)) {
 +          return dirs[i] + "/" + path
 +        }
 +      }
 +      return null
 +    }
 +    function load(classpath) {
 +      var code, path;
 +      path = getPathFromManifests(classpath);
 +      if(!path) {
 +        throw classpath + " is not listed in any manifest.js.";
 +      }
 +      try {
 +        code = runtime.readFileSync(path, "utf8")
 +      }catch(e2) {
 +        runtime.log("Error loading " + classpath + " " + e2);
 +        throw e2;
 +      }
 +      if(code === undefined) {
 +        throw"Cannot load class " + classpath;
 +      }
 +      code += "\n//# sourceURL=" + path;
 +      code += "\n//@ sourceURL=" + path;
 +      try {
 +        code = eval(classpath + " = eval(code);")
 +      }catch(e4) {
 +        runtime.log("Error loading " + classpath + " " + e4);
 +        throw e4;
 +      }
 +      return code
 +    }
 +    impl = load(classpath);
 +    if(!impl || Runtime.getFunctionName(impl) !== names[names.length - 1]) {
 +      runtime.log("Loaded code is not for " + names[names.length - 1]);
 +      throw"Loaded code is not for " + names[names.length - 1];
 +    }
 +    cache[classpath] = true
 +  }
 +})();
 +(function() {
 +  var translator = function() {
 +  };
 +  function tr(original) {
 +    var result = translator(original);
 +    if(!result || String(typeof result) !== "string") {
 +      return original
 +    }
 +    return result
 +  }
 +  runtime.getTranslator = function() {
 +    return translator
 +  };
 +  runtime.setTranslator = function(translatorFunction) {
 +    translator = translatorFunction
 +  };
 +  runtime.tr = tr
 +})();
 +(function(args) {
 +  if(args) {
 +    args = Array.prototype.slice.call((args))
 +  }else {
 +    args = []
 +  }
 +  function run(argv) {
 +    if(!argv.length) {
 +      return
 +    }
 +    var script = argv[0];
 +    runtime.readFile(script, "utf8", function(err, code) {
 +      var path = "", codestring = (code);
 +      if(script.indexOf("/") !== -1) {
 +        path = script.substring(0, script.indexOf("/"))
 +      }
 +      runtime.setCurrentDirectory(path);
 +      function inner_run() {
 +        var script, path, args, argv, result;
 +        result = eval(codestring);
 +        if(result) {
 +          runtime.exit(result)
 +        }
 +        return
 +      }
 +      if(err || codestring === null) {
 +        runtime.log(err);
 +        runtime.exit(1)
 +      }else {
 +        inner_run.apply(null, argv)
 +      }
 +    })
 +  }
 +  if(runtime.type() === "NodeJSRuntime") {
 +    run(process.argv.slice(2))
 +  }else {
 +    if(runtime.type() === "RhinoRuntime") {
 +      run(args)
 +    }else {
 +      run(args.slice(1))
 +    }
 +  }
 +})(String(typeof arguments) !== "undefined" && arguments);
 +core.Base64 = function() {
 +  var b64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", b64tab = function(bin) {
 +    var t = {}, i, l;
 +    for(i = 0, l = bin.length;i < l;i += 1) {
 +      t[bin.charAt(i)] = i
 +    }
 +    return t
 +  }(b64chars), convertUTF16StringToBase64, convertBase64ToUTF16String, window = runtime.getWindow(), btoa, atob;
 +  function stringToArray(s) {
 +    var a = [], i, l = s.length;
 +    for(i = 0;i < l;i += 1) {
 +      a[i] = s.charCodeAt(i) & 255
 +    }
 +    return a
 +  }
 +  function convertUTF8ArrayToBase64(bin) {
 +    var n, b64 = "", i, l = bin.length - 2;
 +    for(i = 0;i < l;i += 3) {
 +      n = bin[i] << 16 | bin[i + 1] << 8 | bin[i + 2];
 +      b64 += b64chars[n >>> 18];
 +      b64 += b64chars[n >>> 12 & 63];
 +      b64 += b64chars[n >>> 6 & 63];
 +      b64 += b64chars[n & 63]
 +    }
 +    if(i === l + 1) {
 +      n = bin[i] << 4;
 +      b64 += b64chars[n >>> 6];
 +      b64 += b64chars[n & 63];
 +      b64 += "=="
 +    }else {
 +      if(i === l) {
 +        n = bin[i] << 10 | bin[i + 1] << 2;
 +        b64 += b64chars[n >>> 12];
 +        b64 += b64chars[n >>> 6 & 63];
 +        b64 += b64chars[n & 63];
 +        b64 += "="
 +      }
 +    }
 +    return b64
 +  }
 +  function convertBase64ToUTF8Array(b64) {
 +    b64 = b64.replace(/[^A-Za-z0-9+\/]+/g, "");
 +    var bin = [], padlen = b64.length % 4, i, l = b64.length, n;
 +    for(i = 0;i < l;i += 4) {
 +      n = (b64tab[b64.charAt(i)] || 0) << 18 | (b64tab[b64.charAt(i + 1)] || 0) << 12 | (b64tab[b64.charAt(i + 2)] || 0) << 6 | (b64tab[b64.charAt(i + 3)] || 0);
 +      bin.push(n >> 16, n >> 8 & 255, n & 255)
 +    }
 +    bin.length -= [0, 0, 2, 1][padlen];
 +    return bin
 +  }
 +  function convertUTF16ArrayToUTF8Array(uni) {
 +    var bin = [], i, l = uni.length, n;
 +    for(i = 0;i < l;i += 1) {
 +      n = uni[i];
 +      if(n < 128) {
 +        bin.push(n)
 +      }else {
 +        if(n < 2048) {
 +          bin.push(192 | n >>> 6, 128 | n & 63)
 +        }else {
 +          bin.push(224 | n >>> 12 & 15, 128 | n >>> 6 & 63, 128 | n & 63)
 +        }
 +      }
 +    }
 +    return bin
 +  }
 +  function convertUTF8ArrayToUTF16Array(bin) {
 +    var uni = [], i, l = bin.length, c0, c1, c2;
 +    for(i = 0;i < l;i += 1) {
 +      c0 = bin[i];
 +      if(c0 < 128) {
 +        uni.push(c0)
 +      }else {
 +        i += 1;
 +        c1 = bin[i];
 +        if(c0 < 224) {
 +          uni.push((c0 & 31) << 6 | c1 & 63)
 +        }else {
 +          i += 1;
 +          c2 = bin[i];
 +          uni.push((c0 & 15) << 12 | (c1 & 63) << 6 | c2 & 63)
 +        }
 +      }
 +    }
 +    return uni
 +  }
 +  function convertUTF8StringToBase64(bin) {
 +    return convertUTF8ArrayToBase64(stringToArray(bin))
 +  }
 +  function convertBase64ToUTF8String(b64) {
 +    return String.fromCharCode.apply(String, convertBase64ToUTF8Array(b64))
 +  }
 +  function convertUTF8StringToUTF16Array(bin) {
 +    return convertUTF8ArrayToUTF16Array(stringToArray(bin))
 +  }
 +  function convertUTF8ArrayToUTF16String(bin) {
 +    var b = convertUTF8ArrayToUTF16Array(bin), r = "", i = 0, chunksize = 45E3;
 +    while(i < b.length) {
 +      r += String.fromCharCode.apply(String, b.slice(i, i + chunksize));
 +      i += chunksize
 +    }
 +    return r
 +  }
 +  function convertUTF8StringToUTF16String_internal(bin, i, end) {
 +    var str = "", c0, c1, c2, j;
 +    for(j = i;j < end;j += 1) {
 +      c0 = bin.charCodeAt(j) & 255;
 +      if(c0 < 128) {
 +        str += String.fromCharCode(c0)
 +      }else {
 +        j += 1;
 +        c1 = bin.charCodeAt(j) & 255;
 +        if(c0 < 224) {
 +          str += String.fromCharCode((c0 & 31) << 6 | c1 & 63)
 +        }else {
 +          j += 1;
 +          c2 = bin.charCodeAt(j) & 255;
 +          str += String.fromCharCode((c0 & 15) << 12 | (c1 & 63) << 6 | c2 & 63)
 +        }
 +      }
 +    }
 +    return str
 +  }
 +  function convertUTF8StringToUTF16String(bin, callback) {
 +    var partsize = 1E5, str = "", pos = 0;
 +    if(bin.length < partsize) {
 +      callback(convertUTF8StringToUTF16String_internal(bin, 0, bin.length), true);
 +      return
 +    }
 +    if(typeof bin !== "string") {
 +      bin = bin.slice()
 +    }
 +    function f() {
 +      var end = pos + partsize;
 +      if(end > bin.length) {
 +        end = bin.length
 +      }
 +      str += convertUTF8StringToUTF16String_internal(bin, pos, end);
 +      pos = end;
 +      end = pos === bin.length;
 +      if(callback(str, end) && !end) {
 +        runtime.setTimeout(f, 0)
 +      }
 +    }
 +    f()
 +  }
 +  function convertUTF16StringToUTF8Array(uni) {
 +    return convertUTF16ArrayToUTF8Array(stringToArray(uni))
 +  }
 +  function convertUTF16ArrayToUTF8String(uni) {
 +    return String.fromCharCode.apply(String, convertUTF16ArrayToUTF8Array(uni))
 +  }
 +  function convertUTF16StringToUTF8String(uni) {
 +    return String.fromCharCode.apply(String, convertUTF16ArrayToUTF8Array(stringToArray(uni)))
 +  }
 +  if(window && window.btoa) {
 +    btoa = function(b) {
 +      return window.btoa(b)
 +    };
 +    convertUTF16StringToBase64 = function(uni) {
 +      return btoa(convertUTF16StringToUTF8String(uni))
 +    }
 +  }else {
 +    btoa = convertUTF8StringToBase64;
 +    convertUTF16StringToBase64 = function(uni) {
 +      return convertUTF8ArrayToBase64(convertUTF16StringToUTF8Array(uni))
 +    }
 +  }
 +  if(window && window.atob) {
 +    atob = function(a) {
 +      return window.atob(a)
 +    };
 +    convertBase64ToUTF16String = function(b64) {
 +      var b = atob(b64);
 +      return convertUTF8StringToUTF16String_internal(b, 0, b.length)
 +    }
 +  }else {
 +    atob = convertBase64ToUTF8String;
 +    convertBase64ToUTF16String = function(b64) {
 +      return convertUTF8ArrayToUTF16String(convertBase64ToUTF8Array(b64))
 +    }
 +  }
 +  function Base64() {
 +    this.convertUTF8ArrayToBase64 = convertUTF8ArrayToBase64;
 +    this.convertByteArrayToBase64 = convertUTF8ArrayToBase64;
 +    this.convertBase64ToUTF8Array = convertBase64ToUTF8Array;
 +    this.convertBase64ToByteArray = convertBase64ToUTF8Array;
 +    this.convertUTF16ArrayToUTF8Array = convertUTF16ArrayToUTF8Array;
 +    this.convertUTF16ArrayToByteArray = convertUTF16ArrayToUTF8Array;
 +    this.convertUTF8ArrayToUTF16Array = convertUTF8ArrayToUTF16Array;
 +    this.convertByteArrayToUTF16Array = convertUTF8ArrayToUTF16Array;
 +    this.convertUTF8StringToBase64 = convertUTF8StringToBase64;
 +    this.convertBase64ToUTF8String = convertBase64ToUTF8String;
 +    this.convertUTF8StringToUTF16Array = convertUTF8StringToUTF16Array;
 +    this.convertUTF8ArrayToUTF16String = convertUTF8ArrayToUTF16String;
 +    this.convertByteArrayToUTF16String = convertUTF8ArrayToUTF16String;
 +    this.convertUTF8StringToUTF16String = convertUTF8StringToUTF16String;
 +    this.convertUTF16StringToUTF8Array = convertUTF16StringToUTF8Array;
 +    this.convertUTF16StringToByteArray = convertUTF16StringToUTF8Array;
 +    this.convertUTF16ArrayToUTF8String = convertUTF16ArrayToUTF8String;
 +    this.convertUTF16StringToUTF8String = convertUTF16StringToUTF8String;
 +    this.convertUTF16StringToBase64 = convertUTF16StringToBase64;
 +    this.convertBase64ToUTF16String = convertBase64ToUTF16String;
 +    this.fromBase64 = convertBase64ToUTF8String;
 +    this.toBase64 = convertUTF8StringToBase64;
 +    this.atob = atob;
 +    this.btoa = btoa;
 +    this.utob = convertUTF16StringToUTF8String;
 +    this.btou = convertUTF8StringToUTF16String;
 +    this.encode = convertUTF16StringToBase64;
 +    this.encodeURI = function(u) {
 +      return convertUTF16StringToBase64(u).replace(/[+\/]/g, function(m0) {
 +        return m0 === "+" ? "-" : "_"
 +      }).replace(/\\=+$/, "")
 +    };
 +    this.decode = function(a) {
 +      return convertBase64ToUTF16String(a.replace(/[\-_]/g, function(m0) {
 +        return m0 === "-" ? "+" : "/"
 +      }))
 +    }
 +  }
 +  return Base64
 +}();
 +core.RawDeflate = function() {
 +  var zip_WSIZE = 32768, zip_STORED_BLOCK = 0, zip_STATIC_TREES = 1, zip_DYN_TREES = 2, zip_DEFAULT_LEVEL = 6, zip_FULL_SEARCH = true, zip_INBUFSIZ = 32768, zip_INBUF_EXTRA = 64, zip_OUTBUFSIZ = 1024 * 8, zip_window_size = 2 * zip_WSIZE, zip_MIN_MATCH = 3, zip_MAX_MATCH = 258, zip_BITS = 16, zip_LIT_BUFSIZE = 8192, zip_HASH_BITS = 13, zip_DIST_BUFSIZE = zip_LIT_BUFSIZE, zip_HASH_SIZE = 1 << zip_HASH_BITS, zip_HASH_MASK = zip_HASH_SIZE - 1, zip_WMASK = zip_WSIZE - 1, zip_NIL = 0, zip_TOO [...]
 +  zip_MIN_LOOKAHEAD = zip_MAX_MATCH + zip_MIN_MATCH + 1, zip_MAX_DIST = zip_WSIZE - zip_MIN_LOOKAHEAD, zip_SMALLEST = 1, zip_MAX_BITS = 15, zip_MAX_BL_BITS = 7, zip_LENGTH_CODES = 29, zip_LITERALS = 256, zip_END_BLOCK = 256, zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES, zip_D_CODES = 30, zip_BL_CODES = 19, zip_REP_3_6 = 16, zip_REPZ_3_10 = 17, zip_REPZ_11_138 = 18, zip_HEAP_SIZE = 2 * zip_L_CODES + 1, zip_H_SHIFT = parseInt((zip_HASH_BITS + zip_MIN_MATCH - 1) / zip_MIN_MATCH, 10),  [...]
 +  zip_qhead, zip_qtail, zip_initflag, zip_outbuf = null, zip_outcnt, zip_outoff, zip_complete, zip_window, zip_d_buf, zip_l_buf, zip_prev, zip_bi_buf, zip_bi_valid, zip_block_start, zip_ins_h, zip_hash_head, zip_prev_match, zip_match_available, zip_match_length, zip_prev_length, zip_strstart, zip_match_start, zip_eofile, zip_lookahead, zip_max_chain_length, zip_max_lazy_match, zip_compr_level, zip_good_match, zip_nice_match, zip_dyn_ltree, zip_dyn_dtree, zip_static_ltree, zip_static_dtr [...]
 +  zip_l_desc, zip_d_desc, zip_bl_desc, zip_bl_count, zip_heap, zip_heap_len, zip_heap_max, zip_depth, zip_length_code, zip_dist_code, zip_base_length, zip_base_dist, zip_flag_buf, zip_last_lit, zip_last_dist, zip_last_flags, zip_flags, zip_flag_bit, zip_opt_len, zip_static_len, zip_deflate_data, zip_deflate_pos, zip_extra_lbits = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], zip_extra_dbits = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7,  [...]
 +  9, 10, 10, 11, 11, 12, 12, 13, 13], zip_extra_blbits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], zip_bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], zip_configuration_table;
 +  if(zip_LIT_BUFSIZE > zip_INBUFSIZ) {
 +    runtime.log("error: zip_INBUFSIZ is too small")
 +  }
 +  if(zip_WSIZE << 1 > 1 << zip_BITS) {
 +    runtime.log("error: zip_WSIZE is too large")
 +  }
 +  if(zip_HASH_BITS > zip_BITS - 1) {
 +    runtime.log("error: zip_HASH_BITS is too large")
 +  }
 +  if(zip_HASH_BITS < 8 || zip_MAX_MATCH !== 258) {
 +    runtime.log("error: Code too clever")
 +  }
 +  function Zip_DeflateCT() {
 +    this.fc = 0;
 +    this.dl = 0
 +  }
 +  function Zip_DeflateTreeDesc() {
 +    this.dyn_tree = null;
 +    this.static_tree = null;
 +    this.extra_bits = null;
 +    this.extra_base = 0;
 +    this.elems = 0;
 +    this.max_length = 0;
 +    this.max_code = 0
 +  }
 +  function Zip_DeflateConfiguration(a, b, c, d) {
 +    this.good_length = a;
 +    this.max_lazy = b;
 +    this.nice_length = c;
 +    this.max_chain = d
 +  }
 +  function Zip_DeflateBuffer() {
 +    this.next = null;
 +    this.len = 0;
 +    this.ptr = [];
 +    this.ptr.length = zip_OUTBUFSIZ;
 +    this.off = 0
 +  }
 +  zip_configuration_table = [new Zip_DeflateConfiguration(0, 0, 0, 0), new Zip_DeflateConfiguration(4, 4, 8, 4), new Zip_DeflateConfiguration(4, 5, 16, 8), new Zip_DeflateConfiguration(4, 6, 32, 32), new Zip_DeflateConfiguration(4, 4, 16, 16), new Zip_DeflateConfiguration(8, 16, 32, 32), new Zip_DeflateConfiguration(8, 16, 128, 128), new Zip_DeflateConfiguration(8, 32, 128, 256), new Zip_DeflateConfiguration(32, 128, 258, 1024), new Zip_DeflateConfiguration(32, 258, 258, 4096)];
 +  function zip_deflate_start(level) {
 +    var i;
 +    if(!level) {
 +      level = zip_DEFAULT_LEVEL
 +    }else {
 +      if(level < 1) {
 +        level = 1
 +      }else {
 +        if(level > 9) {
 +          level = 9
 +        }
 +      }
 +    }
 +    zip_compr_level = level;
 +    zip_initflag = false;
 +    zip_eofile = false;
 +    if(zip_outbuf !== null) {
 +      return
 +    }
 +    zip_free_queue = zip_qhead = zip_qtail = null;
 +    zip_outbuf = [];
 +    zip_outbuf.length = zip_OUTBUFSIZ;
 +    zip_window = [];
 +    zip_window.length = zip_window_size;
 +    zip_d_buf = [];
 +    zip_d_buf.length = zip_DIST_BUFSIZE;
 +    zip_l_buf = [];
 +    zip_l_buf.length = zip_INBUFSIZ + zip_INBUF_EXTRA;
 +    zip_prev = [];
 +    zip_prev.length = 1 << zip_BITS;
 +    zip_dyn_ltree = [];
 +    zip_dyn_ltree.length = zip_HEAP_SIZE;
 +    for(i = 0;i < zip_HEAP_SIZE;i++) {
 +      zip_dyn_ltree[i] = new Zip_DeflateCT
 +    }
 +    zip_dyn_dtree = [];
 +    zip_dyn_dtree.length = 2 * zip_D_CODES + 1;
 +    for(i = 0;i < 2 * zip_D_CODES + 1;i++) {
 +      zip_dyn_dtree[i] = new Zip_DeflateCT
 +    }
 +    zip_static_ltree = [];
 +    zip_static_ltree.length = zip_L_CODES + 2;
 +    for(i = 0;i < zip_L_CODES + 2;i++) {
 +      zip_static_ltree[i] = new Zip_DeflateCT
 +    }
 +    zip_static_dtree = [];
 +    zip_static_dtree.length = zip_D_CODES;
 +    for(i = 0;i < zip_D_CODES;i++) {
 +      zip_static_dtree[i] = new Zip_DeflateCT
 +    }
 +    zip_bl_tree = [];
 +    zip_bl_tree.length = 2 * zip_BL_CODES + 1;
 +    for(i = 0;i < 2 * zip_BL_CODES + 1;i++) {
 +      zip_bl_tree[i] = new Zip_DeflateCT
 +    }
 +    zip_l_desc = new Zip_DeflateTreeDesc;
 +    zip_d_desc = new Zip_DeflateTreeDesc;
 +    zip_bl_desc = new Zip_DeflateTreeDesc;
 +    zip_bl_count = [];
 +    zip_bl_count.length = zip_MAX_BITS + 1;
 +    zip_heap = [];
 +    zip_heap.length = 2 * zip_L_CODES + 1;
 +    zip_depth = [];
 +    zip_depth.length = 2 * zip_L_CODES + 1;
 +    zip_length_code = [];
 +    zip_length_code.length = zip_MAX_MATCH - zip_MIN_MATCH + 1;
 +    zip_dist_code = [];
 +    zip_dist_code.length = 512;
 +    zip_base_length = [];
 +    zip_base_length.length = zip_LENGTH_CODES;
 +    zip_base_dist = [];
 +    zip_base_dist.length = zip_D_CODES;
 +    zip_flag_buf = [];
 +    zip_flag_buf.length = parseInt(zip_LIT_BUFSIZE / 8, 10)
 +  }
 +  var zip_reuse_queue = function(p) {
 +    p.next = zip_free_queue;
 +    zip_free_queue = p
 +  };
 +  var zip_new_queue = function() {
 +    var p;
 +    if(zip_free_queue !== null) {
 +      p = zip_free_queue;
 +      zip_free_queue = zip_free_queue.next
 +    }else {
 +      p = new Zip_DeflateBuffer
 +    }
 +    p.next = null;
 +    p.len = p.off = 0;
 +    return p
 +  };
 +  var zip_head1 = function(i) {
 +    return zip_prev[zip_WSIZE + i]
 +  };
 +  var zip_head2 = function(i, val) {
 +    zip_prev[zip_WSIZE + i] = val;
 +    return val
 +  };
 +  var zip_qoutbuf = function() {
 +    var q, i;
 +    if(zip_outcnt !== 0) {
 +      q = zip_new_queue();
 +      if(zip_qhead === null) {
 +        zip_qhead = zip_qtail = q
 +      }else {
 +        zip_qtail = zip_qtail.next = q
 +      }
 +      q.len = zip_outcnt - zip_outoff;
 +      for(i = 0;i < q.len;i++) {
 +        q.ptr[i] = zip_outbuf[zip_outoff + i]
 +      }
 +      zip_outcnt = zip_outoff = 0
 +    }
 +  };
 +  var zip_put_byte = function(c) {
 +    zip_outbuf[zip_outoff + zip_outcnt++] = c;
 +    if(zip_outoff + zip_outcnt === zip_OUTBUFSIZ) {
 +      zip_qoutbuf()
 +    }
 +  };
 +  var zip_put_short = function(w) {
 +    w &= 65535;
 +    if(zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) {
 +      zip_outbuf[zip_outoff + zip_outcnt++] = w & 255;
 +      zip_outbuf[zip_outoff + zip_outcnt++] = w >>> 8
 +    }else {
 +      zip_put_byte(w & 255);
 +      zip_put_byte(w >>> 8)
 +    }
 +  };
 +  var zip_INSERT_STRING = function() {
 +    zip_ins_h = (zip_ins_h << zip_H_SHIFT ^ zip_window[zip_strstart + zip_MIN_MATCH - 1] & 255) & zip_HASH_MASK;
 +    zip_hash_head = zip_head1(zip_ins_h);
 +    zip_prev[zip_strstart & zip_WMASK] = zip_hash_head;
 +    zip_head2(zip_ins_h, zip_strstart)
 +  };
 +  var zip_Buf_size = 16;
 +  var zip_send_bits = function(value, length) {
 +    if(zip_bi_valid > zip_Buf_size - length) {
 +      zip_bi_buf |= value << zip_bi_valid;
 +      zip_put_short(zip_bi_buf);
 +      zip_bi_buf = value >> zip_Buf_size - zip_bi_valid;
 +      zip_bi_valid += length - zip_Buf_size
 +    }else {
 +      zip_bi_buf |= value << zip_bi_valid;
 +      zip_bi_valid += length
 +    }
 +  };
 +  var zip_SEND_CODE = function(c, tree) {
 +    zip_send_bits(tree[c].fc, tree[c].dl)
 +  };
 +  var zip_D_CODE = function(dist) {
 +    return(dist < 256 ? zip_dist_code[dist] : zip_dist_code[256 + (dist >> 7)]) & 255
 +  };
 +  var zip_SMALLER = function(tree, n, m) {
 +    return tree[n].fc < tree[m].fc || tree[n].fc === tree[m].fc && zip_depth[n] <= zip_depth[m]
 +  };
 +  var zip_read_buff = function(buff, offset, n) {
 +    var i;
 +    for(i = 0;i < n && zip_deflate_pos < zip_deflate_data.length;i++) {
 +      buff[offset + i] = zip_deflate_data.charCodeAt(zip_deflate_pos++) & 255
 +    }
 +    return i
 +  };
 +  var zip_fill_window = function() {
 +    var n, m;
 +    var more = zip_window_size - zip_lookahead - zip_strstart;
 +    if(more === -1) {
 +      more--
 +    }else {
 +      if(zip_strstart >= zip_WSIZE + zip_MAX_DIST) {
 +        for(n = 0;n < zip_WSIZE;n++) {
 +          zip_window[n] = zip_window[n + zip_WSIZE]
 +        }
 +        zip_match_start -= zip_WSIZE;
 +        zip_strstart -= zip_WSIZE;
 +        zip_block_start -= zip_WSIZE;
 +        for(n = 0;n < zip_HASH_SIZE;n++) {
 +          m = zip_head1(n);
 +          zip_head2(n, m >= zip_WSIZE ? m - zip_WSIZE : zip_NIL)
 +        }
 +        for(n = 0;n < zip_WSIZE;n++) {
 +          m = zip_prev[n];
 +          zip_prev[n] = m >= zip_WSIZE ? m - zip_WSIZE : zip_NIL
 +        }
 +        more += zip_WSIZE
 +      }
 +    }
 +    if(!zip_eofile) {
 +      n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more);
 +      if(n <= 0) {
 +        zip_eofile = true
 +      }else {
 +        zip_lookahead += n
 +      }
 +    }
 +  };
 +  var zip_lm_init = function() {
 +    var j;
 +    for(j = 0;j < zip_HASH_SIZE;j++) {
 +      zip_prev[zip_WSIZE + j] = 0
 +    }
 +    zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy;
 +    zip_good_match = zip_configuration_table[zip_compr_level].good_length;
 +    if(!zip_FULL_SEARCH) {
 +      zip_nice_match = zip_configuration_table[zip_compr_level].nice_length
 +    }
 +    zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain;
 +    zip_strstart = 0;
 +    zip_block_start = 0;
 +    zip_lookahead = zip_read_buff(zip_window, 0, 2 * zip_WSIZE);
 +    if(zip_lookahead <= 0) {
 +      zip_eofile = true;
 +      zip_lookahead = 0;
 +      return
 +    }
 +    zip_eofile = false;
 +    while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) {
 +      zip_fill_window()
 +    }
 +    zip_ins_h = 0;
 +    for(j = 0;j < zip_MIN_MATCH - 1;j++) {
 +      zip_ins_h = (zip_ins_h << zip_H_SHIFT ^ zip_window[j] & 255) & zip_HASH_MASK
 +    }
 +  };
 +  var zip_longest_match = function(cur_match) {
 +    var chain_length = zip_max_chain_length;
 +    var scanp = zip_strstart;
 +    var matchp;
 +    var len;
 +    var best_len = zip_prev_length;
 +    var limit = zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL;
 +    var strendp = zip_strstart + zip_MAX_MATCH;
 +    var scan_end1 = zip_window[scanp + best_len - 1];
 +    var scan_end = zip_window[scanp + best_len];
 +    if(zip_prev_length >= zip_good_match) {
 +      chain_length >>= 2
 +    }
 +    do {
 +      matchp = cur_match;
 +      if(zip_window[matchp + best_len] !== scan_end || (zip_window[matchp + best_len - 1] !== scan_end1 || (zip_window[matchp] !== zip_window[scanp] || zip_window[++matchp] !== zip_window[scanp + 1]))) {
 +        continue
 +      }
 +      scanp += 2;
 +      matchp++;
 +      do {
 +        ++scanp
 +      }while(zip_window[scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && (zip_window[++scanp] === zip_window[++matchp] && scanp < strendp))))))));
 +      len = zip_MAX_MATCH - (strendp - scanp);
 +      scanp = strendp - zip_MAX_MATCH;
 +      if(len > best_len) {
 +        zip_match_start = cur_match;
 +        best_len = len;
 +        if(zip_FULL_SEARCH) {
 +          if(len >= zip_MAX_MATCH) {
 +            break
 +          }
 +        }else {
 +          if(len >= zip_nice_match) {
 +            break
 +          }
 +        }
 +        scan_end1 = zip_window[scanp + best_len - 1];
 +        scan_end = zip_window[scanp + best_len]
 +      }
 +      cur_match = zip_prev[cur_match & zip_WMASK]
 +    }while(cur_match > limit && --chain_length !== 0);
 +    return best_len
 +  };
 +  var zip_ct_tally = function(dist, lc) {
 +    zip_l_buf[zip_last_lit++] = lc;
 +    if(dist === 0) {
 +      zip_dyn_ltree[lc].fc++
 +    }else {
 +      dist--;
 +      zip_dyn_ltree[zip_length_code[lc] + zip_LITERALS + 1].fc++;
 +      zip_dyn_dtree[zip_D_CODE(dist)].fc++;
 +      zip_d_buf[zip_last_dist++] = dist;
 +      zip_flags |= zip_flag_bit
 +    }
 +    zip_flag_bit <<= 1;
 +    if((zip_last_lit & 7) === 0) {
 +      zip_flag_buf[zip_last_flags++] = zip_flags;
 +      zip_flags = 0;
 +      zip_flag_bit = 1
 +    }
 +    if(zip_compr_level > 2 && (zip_last_lit & 4095) === 0) {
 +      var out_length = zip_last_lit * 8;
 +      var in_length = zip_strstart - zip_block_start;
 +      var dcode;
 +      for(dcode = 0;dcode < zip_D_CODES;dcode++) {
 +        out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode])
 +      }
 +      out_length >>= 3;
 +      if(zip_last_dist < parseInt(zip_last_lit / 2, 10) && out_length < parseInt(in_length / 2, 10)) {
 +        return true
 +      }
 +    }
 +    return zip_last_lit === zip_LIT_BUFSIZE - 1 || zip_last_dist === zip_DIST_BUFSIZE
 +  };
 +  var zip_pqdownheap = function(tree, k) {
 +    var v = zip_heap[k];
 +    var j = k << 1;
 +    while(j <= zip_heap_len) {
 +      if(j < zip_heap_len && zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j])) {
 +        j++
 +      }
 +      if(zip_SMALLER(tree, v, zip_heap[j])) {
 +        break
 +      }
 +      zip_heap[k] = zip_heap[j];
 +      k = j;
 +      j <<= 1
 +    }
 +    zip_heap[k] = v
 +  };
 +  var zip_gen_bitlen = function(desc) {
 +    var tree = desc.dyn_tree;
 +    var extra = desc.extra_bits;
 +    var base = desc.extra_base;
 +    var max_code = desc.max_code;
 +    var max_length = desc.max_length;
 +    var stree = desc.static_tree;
 +    var h;
 +    var n, m;
 +    var bits;
 +    var xbits;
 +    var f;
 +    var overflow = 0;
 +    for(bits = 0;bits <= zip_MAX_BITS;bits++) {
 +      zip_bl_count[bits] = 0
 +    }
 +    tree[zip_heap[zip_heap_max]].dl = 0;
 +    for(h = zip_heap_max + 1;h < zip_HEAP_SIZE;h++) {
 +      n = zip_heap[h];
 +      bits = tree[tree[n].dl].dl + 1;
 +      if(bits > max_length) {
 +        bits = max_length;
 +        overflow++
 +      }
 +      tree[n].dl = bits;
 +      if(n > max_code) {
 +        continue
 +      }
 +      zip_bl_count[bits]++;
 +      xbits = 0;
 +      if(n >= base) {
 +        xbits = extra[n - base]
 +      }
 +      f = tree[n].fc;
 +      zip_opt_len += f * (bits + xbits);
 +      if(stree !== null) {
 +        zip_static_len += f * (stree[n].dl + xbits)
 +      }
 +    }
 +    if(overflow === 0) {
 +      return
 +    }
 +    do {
 +      bits = max_length - 1;
 +      while(zip_bl_count[bits] === 0) {
 +        bits--
 +      }
 +      zip_bl_count[bits]--;
 +      zip_bl_count[bits + 1] += 2;
 +      zip_bl_count[max_length]--;
 +      overflow -= 2
 +    }while(overflow > 0);
 +    for(bits = max_length;bits !== 0;bits--) {
 +      n = zip_bl_count[bits];
 +      while(n !== 0) {
 +        m = zip_heap[--h];
 +        if(m > max_code) {
 +          continue
 +        }
 +        if(tree[m].dl !== bits) {
 +          zip_opt_len += (bits - tree[m].dl) * tree[m].fc;
 +          tree[m].fc = bits
 +        }
 +        n--
 +      }
 +    }
 +  };
 +  var zip_bi_reverse = function(code, len) {
 +    var res = 0;
 +    do {
 +      res |= code & 1;
 +      code >>= 1;
 +      res <<= 1
 +    }while(--len > 0);
 +    return res >> 1
 +  };
 +  var zip_gen_codes = function(tree, max_code) {
 +    var next_code = [];
 +    next_code.length = zip_MAX_BITS + 1;
 +    var code = 0;
 +    var bits;
 +    var n;
 +    for(bits = 1;bits <= zip_MAX_BITS;bits++) {
 +      code = code + zip_bl_count[bits - 1] << 1;
 +      next_code[bits] = code
 +    }
 +    var len;
 +    for(n = 0;n <= max_code;n++) {
 +      len = tree[n].dl;
 +      if(len === 0) {
 +        continue
 +      }
 +      tree[n].fc = zip_bi_reverse(next_code[len]++, len)
 +    }
 +  };
 +  var zip_build_tree = function(desc) {
 +    var tree = desc.dyn_tree;
 +    var stree = desc.static_tree;
 +    var elems = desc.elems;
 +    var n, m;
 +    var max_code = -1;
 +    var node = elems;
 +    zip_heap_len = 0;
 +    zip_heap_max = zip_HEAP_SIZE;
 +    for(n = 0;n < elems;n++) {
 +      if(tree[n].fc !== 0) {
 +        zip_heap[++zip_heap_len] = max_code = n;
 +        zip_depth[n] = 0
 +      }else {
 +        tree[n].dl = 0
 +      }
 +    }
 +    var xnew;
 +    while(zip_heap_len < 2) {
 +      xnew = zip_heap[++zip_heap_len] = max_code < 2 ? ++max_code : 0;
 +      tree[xnew].fc = 1;
 +      zip_depth[xnew] = 0;
 +      zip_opt_len--;
 +      if(stree !== null) {
 +        zip_static_len -= stree[xnew].dl
 +      }
 +    }
 +    desc.max_code = max_code;
 +    for(n = zip_heap_len >> 1;n >= 1;n--) {
 +      zip_pqdownheap(tree, n)
 +    }
 +    do {
 +      n = zip_heap[zip_SMALLEST];
 +      zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--];
 +      zip_pqdownheap(tree, zip_SMALLEST);
 +      m = zip_heap[zip_SMALLEST];
 +      zip_heap[--zip_heap_max] = n;
 +      zip_heap[--zip_heap_max] = m;
 +      tree[node].fc = tree[n].fc + tree[m].fc;
 +      if(zip_depth[n] > zip_depth[m] + 1) {
 +        zip_depth[node] = zip_depth[n]
 +      }else {
 +        zip_depth[node] = zip_depth[m] + 1
 +      }
 +      tree[n].dl = tree[m].dl = node;
 +      zip_heap[zip_SMALLEST] = node++;
 +      zip_pqdownheap(tree, zip_SMALLEST)
 +    }while(zip_heap_len >= 2);
 +    zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST];
 +    zip_gen_bitlen(desc);
 +    zip_gen_codes(tree, max_code)
 +  };
 +  var zip_scan_tree = function(tree, max_code) {
 +    var n;
 +    var prevlen = -1;
 +    var curlen;
 +    var nextlen = tree[0].dl;
 +    var count = 0;
 +    var max_count = 7;
 +    var min_count = 4;
 +    if(nextlen === 0) {
 +      max_count = 138;
 +      min_count = 3
 +    }
 +    tree[max_code + 1].dl = 65535;
 +    for(n = 0;n <= max_code;n++) {
 +      curlen = nextlen;
 +      nextlen = tree[n + 1].dl;
 +      if(++count < max_count && curlen === nextlen) {
 +        continue
 +      }
 +      if(count < min_count) {
 +        zip_bl_tree[curlen].fc += count
 +      }else {
 +        if(curlen !== 0) {
 +          if(curlen !== prevlen) {
 +            zip_bl_tree[curlen].fc++
 +          }
 +          zip_bl_tree[zip_REP_3_6].fc++
 +        }else {
 +          if(count <= 10) {
 +            zip_bl_tree[zip_REPZ_3_10].fc++
 +          }else {
 +            zip_bl_tree[zip_REPZ_11_138].fc++
 +          }
 +        }
 +      }
 +      count = 0;
 +      prevlen = curlen;
 +      if(nextlen === 0) {
 +        max_count = 138;
 +        min_count = 3
 +      }else {
 +        if(curlen === nextlen) {
 +          max_count = 6;
 +          min_count = 3
 +        }else {
 +          max_count = 7;
 +          min_count = 4
 +        }
 +      }
 +    }
 +  };
 +  var zip_build_bl_tree = function() {
 +    var max_blindex;
 +    zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code);
 +    zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code);
 +    zip_build_tree(zip_bl_desc);
 +    for(max_blindex = zip_BL_CODES - 1;max_blindex >= 3;max_blindex--) {
 +      if(zip_bl_tree[zip_bl_order[max_blindex]].dl !== 0) {
 +        break
 +      }
 +    }
 +    zip_opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
 +    return max_blindex
 +  };
 +  var zip_bi_windup = function() {
 +    if(zip_bi_valid > 8) {
 +      zip_put_short(zip_bi_buf)
 +    }else {
 +      if(zip_bi_valid > 0) {
 +        zip_put_byte(zip_bi_buf)
 +      }
 +    }
 +    zip_bi_buf = 0;
 +    zip_bi_valid = 0
 +  };
 +  var zip_compress_block = function(ltree, dtree) {
 +    var dist;
 +    var lc;
 +    var lx = 0;
 +    var dx = 0;
 +    var fx = 0;
 +    var flag = 0;
 +    var code;
 +    var extra;
 +    if(zip_last_lit !== 0) {
 +      do {
 +        if((lx & 7) === 0) {
 +          flag = zip_flag_buf[fx++]
 +        }
 +        lc = zip_l_buf[lx++] & 255;
 +        if((flag & 1) === 0) {
 +          zip_SEND_CODE(lc, ltree)
 +        }else {
 +          code = zip_length_code[lc];
 +          zip_SEND_CODE(code + zip_LITERALS + 1, ltree);
 +          extra = zip_extra_lbits[code];
 +          if(extra !== 0) {
 +            lc -= zip_base_length[code];
 +            zip_send_bits(lc, extra)
 +          }
 +          dist = zip_d_buf[dx++];
 +          code = zip_D_CODE(dist);
 +          zip_SEND_CODE(code, dtree);
 +          extra = zip_extra_dbits[code];
 +          if(extra !== 0) {
 +            dist -= zip_base_dist[code];
 +            zip_send_bits(dist, extra)
 +          }
 +        }
 +        flag >>= 1
 +      }while(lx < zip_last_lit)
 +    }
 +    zip_SEND_CODE(zip_END_BLOCK, ltree)
 +  };
 +  var zip_send_tree = function(tree, max_code) {
 +    var n;
 +    var prevlen = -1;
 +    var curlen;
 +    var nextlen = tree[0].dl;
 +    var count = 0;
 +    var max_count = 7;
 +    var min_count = 4;
 +    if(nextlen === 0) {
 +      max_count = 138;
 +      min_count = 3
 +    }
 +    for(n = 0;n <= max_code;n++) {
 +      curlen = nextlen;
 +      nextlen = tree[n + 1].dl;
 +      if(++count < max_count && curlen === nextlen) {
 +        continue
 +      }
 +      if(count < min_count) {
 +        do {
 +          zip_SEND_CODE(curlen, zip_bl_tree)
 +        }while(--count !== 0)
 +      }else {
 +        if(curlen !== 0) {
 +          if(curlen !== prevlen) {
 +            zip_SEND_CODE(curlen, zip_bl_tree);
 +            count--
 +          }
 +          zip_SEND_CODE(zip_REP_3_6, zip_bl_tree);
 +          zip_send_bits(count - 3, 2)
 +        }else {
 +          if(count <= 10) {
 +            zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree);
 +            zip_send_bits(count - 3, 3)
 +          }else {
 +            zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree);
 +            zip_send_bits(count - 11, 7)
 +          }
 +        }
 +      }
 +      count = 0;
 +      prevlen = curlen;
 +      if(nextlen === 0) {
 +        max_count = 138;
 +        min_count = 3
 +      }else {
 +        if(curlen === nextlen) {
 +          max_count = 6;
 +          min_count = 3
 +        }else {
 +          max_count = 7;
 +          min_count = 4
 +        }
 +      }
 +    }
 +  };
 +  var zip_send_all_trees = function(lcodes, dcodes, blcodes) {
 +    var rank;
 +    zip_send_bits(lcodes - 257, 5);
 +    zip_send_bits(dcodes - 1, 5);
 +    zip_send_bits(blcodes - 4, 4);
 +    for(rank = 0;rank < blcodes;rank++) {
 +      zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3)
 +    }
 +    zip_send_tree(zip_dyn_ltree, lcodes - 1);
 +    zip_send_tree(zip_dyn_dtree, dcodes - 1)
 +  };
 +  var zip_init_block = function() {
 +    var n;
 +    for(n = 0;n < zip_L_CODES;n++) {
 +      zip_dyn_ltree[n].fc = 0
 +    }
 +    for(n = 0;n < zip_D_CODES;n++) {
 +      zip_dyn_dtree[n].fc = 0
 +    }
 +    for(n = 0;n < zip_BL_CODES;n++) {
 +      zip_bl_tree[n].fc = 0
 +    }
 +    zip_dyn_ltree[zip_END_BLOCK].fc = 1;
 +    zip_opt_len = zip_static_len = 0;
 +    zip_last_lit = zip_last_dist = zip_last_flags = 0;
 +    zip_flags = 0;
 +    zip_flag_bit = 1
 +  };
 +  var zip_flush_block = function(eof) {
 +    var opt_lenb, static_lenb;
 +    var max_blindex;
 +    var stored_len;
 +    stored_len = zip_strstart - zip_block_start;
 +    zip_flag_buf[zip_last_flags] = zip_flags;
 +    zip_build_tree(zip_l_desc);
 +    zip_build_tree(zip_d_desc);
 +    max_blindex = zip_build_bl_tree();
 +    opt_lenb = zip_opt_len + 3 + 7 >> 3;
 +    static_lenb = zip_static_len + 3 + 7 >> 3;
 +    if(static_lenb <= opt_lenb) {
 +      opt_lenb = static_lenb
 +    }
 +    if(stored_len + 4 <= opt_lenb && zip_block_start >= 0) {
 +      var i;
 +      zip_send_bits((zip_STORED_BLOCK << 1) + eof, 3);
 +      zip_bi_windup();
 +      zip_put_short(stored_len);
 +      zip_put_short(~stored_len);
 +      for(i = 0;i < stored_len;i++) {
 +        zip_put_byte(zip_window[zip_block_start + i])
 +      }
 +    }else {
 +      if(static_lenb === opt_lenb) {
 +        zip_send_bits((zip_STATIC_TREES << 1) + eof, 3);
 +        zip_compress_block(zip_static_ltree, zip_static_dtree)
 +      }else {
 +        zip_send_bits((zip_DYN_TREES << 1) + eof, 3);
 +        zip_send_all_trees(zip_l_desc.max_code + 1, zip_d_desc.max_code + 1, max_blindex + 1);
 +        zip_compress_block(zip_dyn_ltree, zip_dyn_dtree)
 +      }
 +    }
 +    zip_init_block();
 +    if(eof !== 0) {
 +      zip_bi_windup()
 +    }
 +  };
 +  var zip_deflate_fast = function() {
 +    var flush;
 +    while(zip_lookahead !== 0 && zip_qhead === null) {
 +      zip_INSERT_STRING();
 +      if(zip_hash_head !== zip_NIL && zip_strstart - zip_hash_head <= zip_MAX_DIST) {
 +        zip_match_length = zip_longest_match(zip_hash_head);
 +        if(zip_match_length > zip_lookahead) {
 +          zip_match_length = zip_lookahead
 +        }
 +      }
 +      if(zip_match_length >= zip_MIN_MATCH) {
 +        flush = zip_ct_tally(zip_strstart - zip_match_start, zip_match_length - zip_MIN_MATCH);
 +        zip_lookahead -= zip_match_length;
 +        if(zip_match_length <= zip_max_lazy_match) {
 +          zip_match_length--;
 +          do {
 +            zip_strstart++;
 +            zip_INSERT_STRING()
 +          }while(--zip_match_length !== 0);
 +          zip_strstart++
 +        }else {
 +          zip_strstart += zip_match_length;
 +          zip_match_length = 0;
 +          zip_ins_h = zip_window[zip_strstart] & 255;
 +          zip_ins_h = (zip_ins_h << zip_H_SHIFT ^ zip_window[zip_strstart + 1] & 255) & zip_HASH_MASK
 +        }
 +      }else {
 +        flush = zip_ct_tally(0, zip_window[zip_strstart] & 255);
 +        zip_lookahead--;
 +        zip_strstart++
 +      }
 +      if(flush) {
 +        zip_flush_block(0);
 +        zip_block_start = zip_strstart
 +      }
 +      while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) {
 +        zip_fill_window()
 +      }
 +    }
 +  };
 +  var zip_deflate_better = function() {
 +    var flush;
 +    while(zip_lookahead !== 0 && zip_qhead === null) {
 +      zip_INSERT_STRING();
 +      zip_prev_length = zip_match_length;
 +      zip_prev_match = zip_match_start;
 +      zip_match_length = zip_MIN_MATCH - 1;
 +      if(zip_hash_head !== zip_NIL && (zip_prev_length < zip_max_lazy_match && zip_strstart - zip_hash_head <= zip_MAX_DIST)) {
 +        zip_match_length = zip_longest_match(zip_hash_head);
 +        if(zip_match_length > zip_lookahead) {
 +          zip_match_length = zip_lookahead
 +        }
 +        if(zip_match_length === zip_MIN_MATCH && zip_strstart - zip_match_start > zip_TOO_FAR) {
 +          zip_match_length--
 +        }
 +      }
 +      if(zip_prev_length >= zip_MIN_MATCH && zip_match_length <= zip_prev_length) {
 +        flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match, zip_prev_length - zip_MIN_MATCH);
 +        zip_lookahead -= zip_prev_length - 1;
 +        zip_prev_length -= 2;
 +        do {
 +          zip_strstart++;
 +          zip_INSERT_STRING()
 +        }while(--zip_prev_length !== 0);
 +        zip_match_available = 0;
 +        zip_match_length = zip_MIN_MATCH - 1;
 +        zip_strstart++;
 +        if(flush) {
 +          zip_flush_block(0);
 +          zip_block_start = zip_strstart
 +        }
 +      }else {
 +        if(zip_match_available !== 0) {
 +          if(zip_ct_tally(0, zip_window[zip_strstart - 1] & 255)) {
 +            zip_flush_block(0);
 +            zip_block_start = zip_strstart
 +          }
 +          zip_strstart++;
 +          zip_lookahead--
 +        }else {
 +          zip_match_available = 1;
 +          zip_strstart++;
 +          zip_lookahead--
 +        }
 +      }
 +      while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile) {
 +        zip_fill_window()
 +      }
 +    }
 +  };
 +  var zip_ct_init = function() {
 +    var n;
 +    var bits;
 +    var length;
 +    var code;
 +    var dist;
 +    if(zip_static_dtree[0].dl !== 0) {
 +      return
 +    }
 +    zip_l_desc.dyn_tree = zip_dyn_ltree;
 +    zip_l_desc.static_tree = zip_static_ltree;
 +    zip_l_desc.extra_bits = zip_extra_lbits;
 +    zip_l_desc.extra_base = zip_LITERALS + 1;
 +    zip_l_desc.elems = zip_L_CODES;
 +    zip_l_desc.max_length = zip_MAX_BITS;
 +    zip_l_desc.max_code = 0;
 +    zip_d_desc.dyn_tree = zip_dyn_dtree;
 +    zip_d_desc.static_tree = zip_static_dtree;
 +    zip_d_desc.extra_bits = zip_extra_dbits;
 +    zip_d_desc.extra_base = 0;
 +    zip_d_desc.elems = zip_D_CODES;
 +    zip_d_desc.max_length = zip_MAX_BITS;
 +    zip_d_desc.max_code = 0;
 +    zip_bl_desc.dyn_tree = zip_bl_tree;
 +    zip_bl_desc.static_tree = null;
 +    zip_bl_desc.extra_bits = zip_extra_blbits;
 +    zip_bl_desc.extra_base = 0;
 +    zip_bl_desc.elems = zip_BL_CODES;
 +    zip_bl_desc.max_length = zip_MAX_BL_BITS;
 +    zip_bl_desc.max_code = 0;
 +    length = 0;
 +    for(code = 0;code < zip_LENGTH_CODES - 1;code++) {
 +      zip_base_length[code] = length;
 +      for(n = 0;n < 1 << zip_extra_lbits[code];n++) {
 +        zip_length_code[length++] = code
 +      }
 +    }
 +    zip_length_code[length - 1] = code;
 +    dist = 0;
 +    for(code = 0;code < 16;code++) {
 +      zip_base_dist[code] = dist;
 +      for(n = 0;n < 1 << zip_extra_dbits[code];n++) {
 +        zip_dist_code[dist++] = code
 +      }
 +    }
 +    dist >>= 7;
 +    n = code;
 +    for(code = n;code < zip_D_CODES;code++) {
 +      zip_base_dist[code] = dist << 7;
 +      for(n = 0;n < 1 << zip_extra_dbits[code] - 7;n++) {
 +        zip_dist_code[256 + dist++] = code
 +      }
 +    }
 +    for(bits = 0;bits <= zip_MAX_BITS;bits++) {
 +      zip_bl_count[bits] = 0
 +    }
 +    n = 0;
 +    while(n <= 143) {
 +      zip_static_ltree[n++].dl = 8;
 +      zip_bl_count[8]++
 +    }
 +    while(n <= 255) {
 +      zip_static_ltree[n++].dl = 9;
 +      zip_bl_count[9]++
 +    }
 +    while(n <= 279) {
 +      zip_static_ltree[n++].dl = 7;
 +      zip_bl_count[7]++
 +    }
 +    while(n <= 287) {
 +      zip_static_ltree[n++].dl = 8;
 +      zip_bl_count[8]++
 +    }
 +    zip_gen_codes(zip_static_ltree, zip_L_CODES + 1);
 +    for(n = 0;n < zip_D_CODES;n++) {
 +      zip_static_dtree[n].dl = 5;
 +      zip_static_dtree[n].fc = zip_bi_reverse(n, 5)
 +    }
 +    zip_init_block()
 +  };
 +  var zip_init_deflate = function() {
 +    if(zip_eofile) {
 +      return
 +    }
 +    zip_bi_buf = 0;
 +    zip_bi_valid = 0;
 +    zip_ct_init();
 +    zip_lm_init();
 +    zip_qhead = null;
 +    zip_outcnt = 0;
 +    zip_outoff = 0;
 +    if(zip_compr_level <= 3) {
 +      zip_prev_length = zip_MIN_MATCH - 1;
 +      zip_match_length = 0
 +    }else {
 +      zip_match_length = zip_MIN_MATCH - 1;
 +      zip_match_available = 0
 +    }
 +    zip_complete = false
 +  };
 +  var zip_qcopy = function(buff, off, buff_size) {
 +    var n, i, j, p;
 +    n = 0;
 +    while(zip_qhead !== null && n < buff_size) {
 +      i = buff_size - n;
 +      if(i > zip_qhead.len) {
 +        i = zip_qhead.len
 +      }
 +      for(j = 0;j < i;j++) {
 +        buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j]
 +      }
 +      zip_qhead.off += i;
 +      zip_qhead.len -= i;
 +      n += i;
 +      if(zip_qhead.len === 0) {
 +        p = zip_qhead;
 +        zip_qhead = zip_qhead.next;
 +        zip_reuse_queue(p)
 +      }
 +    }
 +    if(n === buff_size) {
 +      return n
 +    }
 +    if(zip_outoff < zip_outcnt) {
 +      i = buff_size - n;
 +      if(i > zip_outcnt - zip_outoff) {
 +        i = zip_outcnt - zip_outoff
 +      }
 +      for(j = 0;j < i;j++) {
 +        buff[off + n + j] = zip_outbuf[zip_outoff + j]
 +      }
 +      zip_outoff += i;
 +      n += i;
 +      if(zip_outcnt === zip_outoff) {
 +        zip_outcnt = zip_outoff = 0
 +      }
 +    }
 +    return n
 +  };
 +  var zip_deflate_internal = function(buff, off, buff_size) {
 +    var n;
 +    if(!zip_initflag) {
 +      zip_init_deflate();
 +      zip_initflag = true;
 +      if(zip_lookahead === 0) {
 +        zip_complete = true;
 +        return 0
 +      }
 +    }
 +    n = zip_qcopy(buff, off, buff_size);
 +    if(n === buff_size) {
 +      return buff_size
 +    }
 +    if(zip_complete) {
 +      return n
 +    }
 +    if(zip_compr_level <= 3) {
 +      zip_deflate_fast()
 +    }else {
 +      zip_deflate_better()
 +    }
 +    if(zip_lookahead === 0) {
 +      if(zip_match_available !== 0) {
 +        zip_ct_tally(0, zip_window[zip_strstart - 1] & 255)
 +      }
 +      zip_flush_block(1);
 +      zip_complete = true
 +    }
 +    return n + zip_qcopy(buff, n + off, buff_size - n)
 +  };
 +  var zip_deflate = function(str, level) {
 +    var i, j;
 +    zip_deflate_data = str;
 +    zip_deflate_pos = 0;
 +    if(String(typeof level) === "undefined") {
 +      level = zip_DEFAULT_LEVEL
 +    }
 +    zip_deflate_start(level);
 +    var buff = new Array(1024);
 +    var aout = [], cbuf = [];
 +    i = zip_deflate_internal(buff, 0, buff.length);
 +    while(i > 0) {
 +      cbuf.length = i;
 +      for(j = 0;j < i;j++) {
 +        cbuf[j] = String.fromCharCode(buff[j])
 +      }
 +      aout[aout.length] = cbuf.join("");
 +      i = zip_deflate_internal(buff, 0, buff.length)
 +    }
 +    zip_deflate_data = null;
 +    return aout.join("")
 +  };
 +  this.deflate = zip_deflate
 +};
 +core.ByteArray = function ByteArray(data) {
 +  this.pos = 0;
 +  this.data = data;
 +  this.readUInt32LE = function() {
 +    this.pos += 4;
 +    var d = this.data, pos = this.pos;
 +    return d[--pos] << 24 | d[--pos] << 16 | d[--pos] << 8 | d[--pos]
 +  };
 +  this.readUInt16LE = function() {
 +    this.pos += 2;
 +    var d = this.data, pos = this.pos;
 +    return d[--pos] << 8 | d[--pos]
 +  }
 +};
 +core.ByteArrayWriter = function ByteArrayWriter(encoding) {
 +  var self = this, data = new runtime.ByteArray(0);
 +  this.appendByteArrayWriter = function(writer) {
 +    data = runtime.concatByteArrays(data, writer.getByteArray())
 +  };
 +  this.appendByteArray = function(array) {
 +    data = runtime.concatByteArrays(data, array)
 +  };
 +  this.appendArray = function(array) {
 +    data = runtime.concatByteArrays(data, runtime.byteArrayFromArray(array))
 +  };
 +  this.appendUInt16LE = function(value) {
 +    self.appendArray([value & 255, value >> 8 & 255])
 +  };
 +  this.appendUInt32LE = function(value) {
 +    self.appendArray([value & 255, value >> 8 & 255, value >> 16 & 255, value >> 24 & 255])
 +  };
 +  this.appendString = function(string) {
 +    data = runtime.concatByteArrays(data, runtime.byteArrayFromString(string, encoding))
 +  };
 +  this.getLength = function() {
 +    return data.length
 +  };
 +  this.getByteArray = function() {
 +    return data
 +  }
 +};
 +core.RawInflate = function RawInflate() {
 +  var zip_WSIZE = 32768;
 +  var zip_STORED_BLOCK = 0;
 +  var zip_STATIC_TREES = 1;
 +  var zip_DYN_TREES = 2;
 +  var zip_lbits = 9;
 +  var zip_dbits = 6;
 +  var zip_INBUFSIZ = 32768;
 +  var zip_INBUF_EXTRA = 64;
 +  var zip_slide;
 +  var zip_wp;
 +  var zip_fixed_tl = null;
 +  var zip_fixed_td;
 +  var zip_fixed_bl, fixed_bd;
 +  var zip_bit_buf;
 +  var zip_bit_len;
 +  var zip_method;
 +  var zip_eof;
 +  var zip_copy_leng;
 +  var zip_copy_dist;
 +  var zip_tl, zip_td;
 +  var zip_bl, zip_bd;
 +  var zip_inflate_data;
 +  var zip_inflate_pos;
 +  var zip_MASK_BITS = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535);
 +  var zip_cplens = new Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0);
 +  var zip_cplext = new Array(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99);
 +  var zip_cpdist = new Array(1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577);
 +  var zip_cpdext = new Array(0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13);
 +  var zip_border = new Array(16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);
 +  var zip_HuftList = function() {
 +    this.next = null;
 +    this.list = null
 +  };
 +  var zip_HuftNode = function() {
 +    this.e = 0;
 +    this.b = 0;
 +    this.n = 0;
 +    this.t = null
 +  };
 +  var zip_HuftBuild = function(b, n, s, d, e, mm) {
 +    this.BMAX = 16;
 +    this.N_MAX = 288;
 +    this.status = 0;
 +    this.root = null;
 +    this.m = 0;
 +    var a;
 +    var c = new Array(this.BMAX + 1);
 +    var el;
 +    var f;
 +    var g;
 +    var h;
 +    var i;
 +    var j;
 +    var k;
 +    var lx = new Array(this.BMAX + 1);
 +    var p;
 +    var pidx;
 +    var q;
 +    var r = new zip_HuftNode;
 +    var u = new Array(this.BMAX);
 +    var v = new Array(this.N_MAX);
 +    var w;
 +    var x = new Array(this.BMAX + 1);
 +    var xp;
 +    var y;
 +    var z;
 +    var o;
 +    var tail;
 +    tail = this.root = null;
 +    for(i = 0;i < c.length;i++) {
 +      c[i] = 0
 +    }
 +    for(i = 0;i < lx.length;i++) {
 +      lx[i] = 0
 +    }
 +    for(i = 0;i < u.length;i++) {
 +      u[i] = null
 +    }
 +    for(i = 0;i < v.length;i++) {
 +      v[i] = 0
 +    }
 +    for(i = 0;i < x.length;i++) {
 +      x[i] = 0
 +    }
 +    el = n > 256 ? b[256] : this.BMAX;
 +    p = b;
 +    pidx = 0;
 +    i = n;
 +    do {
 +      c[p[pidx]]++;
 +      pidx++
 +    }while(--i > 0);
 +    if(c[0] == n) {
 +      this.root = null;
 +      this.m = 0;
 +      this.status = 0;
 +      return
 +    }
 +    for(j = 1;j <= this.BMAX;j++) {
 +      if(c[j] != 0) {
 +        break
 +      }
 +    }
 +    k = j;
 +    if(mm < j) {
 +      mm = j
 +    }
 +    for(i = this.BMAX;i != 0;i--) {
 +      if(c[i] != 0) {
 +        break
 +      }
 +    }
 +    g = i;
 +    if(mm > i) {
 +      mm = i
 +    }
 +    for(y = 1 << j;j < i;j++, y <<= 1) {
 +      if((y -= c[j]) < 0) {
 +        this.status = 2;
 +        this.m = mm;
 +        return
 +      }
 +    }
 +    if((y -= c[i]) < 0) {
 +      this.status = 2;
 +      this.m = mm;
 +      return
 +    }
 +    c[i] += y;
 +    x[1] = j = 0;
 +    p = c;
 +    pidx = 1;
 +    xp = 2;
 +    while(--i > 0) {
 +      x[xp++] = j += p[pidx++]
 +    }
 +    p = b;
 +    pidx = 0;
 +    i = 0;
 +    do {
 +      if((j = p[pidx++]) != 0) {
 +        v[x[j]++] = i
 +      }
 +    }while(++i < n);
 +    n = x[g];
 +    x[0] = i = 0;
 +    p = v;
 +    pidx = 0;
 +    h = -1;
 +    w = lx[0] = 0;
 +    q = null;
 +    z = 0;
 +    for(;k <= g;k++) {
 +      a = c[k];
 +      while(a-- > 0) {
 +        while(k > w + lx[1 + h]) {
 +          w += lx[1 + h];
 +          h++;
 +          z = (z = g - w) > mm ? mm : z;
 +          if((f = 1 << (j = k - w)) > a + 1) {
 +            f -= a + 1;
 +            xp = k;
 +            while(++j < z) {
 +              if((f <<= 1) <= c[++xp]) {
 +                break
 +              }
 +              f -= c[xp]
 +            }
 +          }
 +          if(w + j > el && w < el) {
 +            j = el - w
 +          }
 +          z = 1 << j;
 +          lx[1 + h] = j;
 +          q = new Array(z);
 +          for(o = 0;o < z;o++) {
 +            q[o] = new zip_HuftNode
 +          }
 +          if(tail == null) {
 +            tail = this.root = new zip_HuftList
 +          }else {
 +            tail = tail.next = new zip_HuftList
 +          }
 +          tail.next = null;
 +          tail.list = q;
 +          u[h] = q;
 +          if(h > 0) {
 +            x[h] = i;
 +            r.b = lx[h];
 +            r.e = 16 + j;
 +            r.t = q;
 +            j = (i & (1 << w) - 1) >> w - lx[h];
 +            u[h - 1][j].e = r.e;
 +            u[h - 1][j].b = r.b;
 +            u[h - 1][j].n = r.n;
 +            u[h - 1][j].t = r.t
 +          }
 +        }
 +        r.b = k - w;
 +        if(pidx >= n) {
 +          r.e = 99
 +        }else {
 +          if(p[pidx] < s) {
 +            r.e = p[pidx] < 256 ? 16 : 15;
 +            r.n = p[pidx++]
 +          }else {
 +            r.e = e[p[pidx] - s];
 +            r.n = d[p[pidx++] - s]
 +          }
 +        }
 +        f = 1 << k - w;
 +        for(j = i >> w;j < z;j += f) {
 +          q[j].e = r.e;
 +          q[j].b = r.b;
 +          q[j].n = r.n;
 +          q[j].t = r.t
 +        }
 +        for(j = 1 << k - 1;(i & j) != 0;j >>= 1) {
 +          i ^= j
 +        }
 +        i ^= j;
 +        while((i & (1 << w) - 1) != x[h]) {
 +          w -= lx[h];
 +          h--
 +        }
 +      }
 +    }
 +    this.m = lx[1];
 +    this.status = y != 0 && g != 1 ? 1 : 0
 +  };
 +  var zip_GET_BYTE = function() {
 +    if(zip_inflate_data.length == zip_inflate_pos) {
 +      return-1
 +    }
 +    return zip_inflate_data[zip_inflate_pos++]
 +  };
 +  var zip_NEEDBITS = function(n) {
 +    while(zip_bit_len < n) {
 +      zip_bit_buf |= zip_GET_BYTE() << zip_bit_len;
 +      zip_bit_len += 8
 +    }
 +  };
 +  var zip_GETBITS = function(n) {
 +    return zip_bit_buf & zip_MASK_BITS[n]
 +  };
 +  var zip_DUMPBITS = function(n) {
 +    zip_bit_buf >>= n;
 +    zip_bit_len -= n
 +  };
 +  var zip_inflate_codes = function(buff, off, size) {
 +    var e;
 +    var t;
 +    var n;
 +    if(size == 0) {
 +      return 0
 +    }
 +    n = 0;
 +    for(;;) {
 +      zip_NEEDBITS(zip_bl);
 +      t = zip_tl.list[zip_GETBITS(zip_bl)];
 +      e = t.e;
 +      while(e > 16) {
 +        if(e == 99) {
 +          return-1
 +        }
 +        zip_DUMPBITS(t.b);
 +        e -= 16;
 +        zip_NEEDBITS(e);
 +        t = t.t[zip_GETBITS(e)];
 +        e = t.e
 +      }
 +      zip_DUMPBITS(t.b);
 +      if(e == 16) {
 +        zip_wp &= zip_WSIZE - 1;
 +        buff[off + n++] = zip_slide[zip_wp++] = t.n;
 +        if(n == size) {
 +          return size
 +        }
 +        continue
 +      }
 +      if(e == 15) {
 +        break
 +      }
 +      zip_NEEDBITS(e);
 +      zip_copy_leng = t.n + zip_GETBITS(e);
 +      zip_DUMPBITS(e);
 +      zip_NEEDBITS(zip_bd);
 +      t = zip_td.list[zip_GETBITS(zip_bd)];
 +      e = t.e;
 +      while(e > 16) {
 +        if(e == 99) {
 +          return-1
 +        }
 +        zip_DUMPBITS(t.b);
 +        e -= 16;
 +        zip_NEEDBITS(e);
 +        t = t.t[zip_GETBITS(e)];
 +        e = t.e
 +      }
 +      zip_DUMPBITS(t.b);
 +      zip_NEEDBITS(e);
 +      zip_copy_dist = zip_wp - t.n - zip_GETBITS(e);
 +      zip_DUMPBITS(e);
 +      while(zip_copy_leng > 0 && n < size) {
 +        zip_copy_leng--;
 +        zip_copy_dist &= zip_WSIZE - 1;
 +        zip_wp &= zip_WSIZE - 1;
 +        buff[off + n++] = zip_slide[zip_wp++] = zip_slide[zip_copy_dist++]
 +      }
 +      if(n == size) {
 +        return size
 +      }
 +    }
 +    zip_method = -1;
 +    return n
 +  };
 +  var zip_inflate_stored = function(buff, off, size) {
 +    var n;
 +    n = zip_bit_len & 7;
 +    zip_DUMPBITS(n);
 +    zip_NEEDBITS(16);
 +    n = zip_GETBITS(16);
 +    zip_DUMPBITS(16);
 +    zip_NEEDBITS(16);
 +    if(n != (~zip_bit_buf & 65535)) {
 +      return-1
 +    }
 +    zip_DUMPBITS(16);
 +    zip_copy_leng = n;
 +    n = 0;
 +    while(zip_copy_leng > 0 && n < size) {
 +      zip_copy_leng--;
 +      zip_wp &= zip_WSIZE - 1;
 +      zip_NEEDBITS(8);
 +      buff[off + n++] = zip_slide[zip_wp++] = zip_GETBITS(8);
 +      zip_DUMPBITS(8)
 +    }
 +    if(zip_copy_leng == 0) {
 +      zip_method = -1
 +    }
 +    return n
 +  };
 +  var zip_fixed_bd;
 +  var zip_inflate_fixed = function(buff, off, size) {
 +    if(zip_fixed_tl == null) {
 +      var i;
 +      var l = new Array(288);
 +      var h;
 +      for(i = 0;i < 144;i++) {
 +        l[i] = 8
 +      }
 +      for(;i < 256;i++) {
 +        l[i] = 9
 +      }
 +      for(;i < 280;i++) {
 +        l[i] = 7
 +      }
 +      for(;i < 288;i++) {
 +        l[i] = 8
 +      }
 +      zip_fixed_bl = 7;
 +      h = new zip_HuftBuild(l, 288, 257, zip_cplens, zip_cplext, zip_fixed_bl);
 +      if(h.status != 0) {
 +        alert("HufBuild error: " + h.status);
 +        return-1
 +      }
 +      zip_fixed_tl = h.root;
 +      zip_fixed_bl = h.m;
 +      for(i = 0;i < 30;i++) {
 +        l[i] = 5
 +      }
 +      zip_fixed_bd = 5;
 +      h = new zip_HuftBuild(l, 30, 0, zip_cpdist, zip_cpdext, zip_fixed_bd);
 +      if(h.status > 1) {
 +        zip_fixed_tl = null;
 +        alert("HufBuild error: " + h.status);
 +        return-1
 +      }
 +      zip_fixed_td = h.root;
 +      zip_fixed_bd = h.m
 +    }
 +    zip_tl = zip_fixed_tl;
 +    zip_td = zip_fixed_td;
 +    zip_bl = zip_fixed_bl;
 +    zip_bd = zip_fixed_bd;
 +    return zip_inflate_codes(buff, off, size)
 +  };
 +  var zip_inflate_dynamic = function(buff, off, size) {
 +    var i;
 +    var j;
 +    var l;
 +    var n;
 +    var t;
 +    var nb;
 +    var nl;
 +    var nd;
 +    var ll = new Array(286 + 30);
 +    var h;
 +    for(i = 0;i < ll.length;i++) {
 +      ll[i] = 0
 +    }
 +    zip_NEEDBITS(5);
 +    nl = 257 + zip_GETBITS(5);
 +    zip_DUMPBITS(5);
 +    zip_NEEDBITS(5);
 +    nd = 1 + zip_GETBITS(5);
 +    zip_DUMPBITS(5);
 +    zip_NEEDBITS(4);
 +    nb = 4 + zip_GETBITS(4);
 +    zip_DUMPBITS(4);
 +    if(nl > 286 || nd > 30) {
 +      return-1
 +    }
 +    for(j = 0;j < nb;j++) {
 +      zip_NEEDBITS(3);
 +      ll[zip_border[j]] = zip_GETBITS(3);
 +      zip_DUMPBITS(3)
 +    }
 +    for(;j < 19;j++) {
 +      ll[zip_border[j]] = 0
 +    }
 +    zip_bl = 7;
 +    h = new zip_HuftBuild(ll, 19, 19, null, null, zip_bl);
 +    if(h.status != 0) {
 +      return-1
 +    }
 +    zip_tl = h.root;
 +    zip_bl = h.m;
 +    n = nl + nd;
 +    i = l = 0;
 +    while(i < n) {
 +      zip_NEEDBITS(zip_bl);
 +      t = zip_tl.list[zip_GETBITS(zip_bl)];
 +      j = t.b;
 +      zip_DUMPBITS(j);
 +      j = t.n;
 +      if(j < 16) {
 +        ll[i++] = l = j
 +      }else {
 +        if(j == 16) {
 +          zip_NEEDBITS(2);
 +          j = 3 + zip_GETBITS(2);
 +          zip_DUMPBITS(2);
 +          if(i + j > n) {
 +            return-1
 +          }
 +          while(j-- > 0) {
 +            ll[i++] = l
 +          }
 +        }else {
 +          if(j == 17) {
 +            zip_NEEDBITS(3);
 +            j = 3 + zip_GETBITS(3);
 +            zip_DUMPBITS(3);
 +            if(i + j > n) {
 +              return-1
 +            }
 +            while(j-- > 0) {
 +              ll[i++] = 0
 +            }
 +            l = 0
 +          }else {
 +            zip_NEEDBITS(7);
 +            j = 11 + zip_GETBITS(7);
 +            zip_DUMPBITS(7);
 +            if(i + j > n) {
 +              return-1
 +            }
 +            while(j-- > 0) {
 +              ll[i++] = 0
 +            }
 +            l = 0
 +          }
 +        }
 +      }
 +    }
 +    zip_bl = zip_lbits;
 +    h = new zip_HuftBuild(ll, nl, 257, zip_cplens, zip_cplext, zip_bl);
 +    if(zip_bl == 0) {
 +      h.status = 1
 +    }
 +    if(h.status != 0) {
 +      return-1
 +    }
 +    zip_tl = h.root;
 +    zip_bl = h.m;
 +    for(i = 0;i < nd;i++) {
 +      ll[i] = ll[i + nl]
 +    }
 +    zip_bd = zip_dbits;
 +    h = new zip_HuftBuild(ll, nd, 0, zip_cpdist, zip_cpdext, zip_bd);
 +    zip_td = h.root;
 +    zip_bd = h.m;
 +    if(zip_bd == 0 && nl > 257) {
 +      return-1
 +    }
 +    if(h.status != 0) {
 +      return-1
 +    }
 +    return zip_inflate_codes(buff, off, size)
 +  };
 +  var zip_inflate_start = function() {
 +    var i;
 +    if(zip_slide == null) {
 +      zip_slide = new Array(2 * zip_WSIZE)
 +    }
 +    zip_wp = 0;
 +    zip_bit_buf = 0;
 +    zip_bit_len = 0;
 +    zip_method = -1;
 +    zip_eof = false;
 +    zip_copy_leng = zip_copy_dist = 0;
 +    zip_tl = null
 +  };
 +  var zip_inflate_internal = function(buff, off, size) {
 +    var n, i;
 +    n = 0;
 +    while(n < size) {
 +      if(zip_eof && zip_method == -1) {
 +        return n
 +      }
 +      if(zip_copy_leng > 0) {
 +        if(zip_method != zip_STORED_BLOCK) {
 +          while(zip_copy_leng > 0 && n < size) {
 +            zip_copy_leng--;
 +            zip_copy_dist &= zip_WSIZE - 1;
 +            zip_wp &= zip_WSIZE - 1;
 +            buff[off + n++] = zip_slide[zip_wp++] = zip_slide[zip_copy_dist++]
 +          }
 +        }else {
 +          while(zip_copy_leng > 0 && n < size) {
 +            zip_copy_leng--;
 +            zip_wp &= zip_WSIZE - 1;
 +            zip_NEEDBITS(8);
 +            buff[off + n++] = zip_slide[zip_wp++] = zip_GETBITS(8);
 +            zip_DUMPBITS(8)
 +          }
 +          if(zip_copy_leng == 0) {
 +            zip_method = -1
 +          }
 +        }
 +        if(n == size) {
 +          return n
 +        }
 +      }
 +      if(zip_method == -1) {
 +        if(zip_eof) {
 +          break
 +        }
 +        zip_NEEDBITS(1);
 +        if(zip_GETBITS(1) != 0) {
 +          zip_eof = true
 +        }
 +        zip_DUMPBITS(1);
 +        zip_NEEDBITS(2);
 +        zip_method = zip_GETBITS(2);
 +        zip_DUMPBITS(2);
 +        zip_tl = null;
 +        zip_copy_leng = 0
 +      }
 +      switch(zip_method) {
 +        case 0:
 +          i = zip_inflate_stored(buff, off + n, size - n);
 +          break;
 +        case 1:
 +          if(zip_tl != null) {
 +            i = zip_inflate_codes(buff, off + n, size - n)
 +          }else {
 +            i = zip_inflate_fixed(buff, off + n, size - n)
 +          }
 +          break;
 +        case 2:
 +          if(zip_tl != null) {
 +            i = zip_inflate_codes(buff, off + n, size - n)
 +          }else {
 +            i = zip_inflate_dynamic(buff, off + n, size - n)
 +          }
 +          break;
 +        default:
 +          i = -1;
 +          break
 +      }
 +      if(i == -1) {
 +        if(zip_eof) {
 +          return 0
 +        }
 +        return-1
 +      }
 +      n += i
 +    }
 +    return n
 +  };
 +  var zip_inflate = function(data, size) {
 +    var i, j;
 +    zip_inflate_start();
 +    zip_inflate_data = data;
 +    zip_inflate_pos = 0;
 +    var buff = new runtime.ByteArray(size);
 +    zip_inflate_internal(buff, 0, size);
 +    zip_inflate_data = null;
 +    return buff
 +  };
 +  this.inflate = zip_inflate
 +};
 +/*
 +
 + Copyright (C) 2012 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +core.LoopWatchDog = function LoopWatchDog(timeout, maxChecks) {
 +  var startTime = Date.now(), checks = 0;
 +  function check() {
 +    var t;
 +    if(timeout) {
 +      t = Date.now();
 +      if(t - startTime > timeout) {
 +        runtime.log("alert", "watchdog timeout");
 +        throw"timeout!";
 +      }
 +    }
 +    if(maxChecks > 0) {
 +      checks += 1;
 +      if(checks > maxChecks) {
 +        runtime.log("alert", "watchdog loop overflow");
 +        throw"loop overflow";
 +      }
 +    }
 +  }
 +  this.check = check
 +};
 +core.Utils = function Utils() {
 +  function hashString(value) {
 +    var hash = 0, i, l;
 +    for(i = 0, l = value.length;i < l;i += 1) {
 +      hash = (hash << 5) - hash + value.charCodeAt(i);
 +      hash |= 0
 +    }
 +    return hash
 +  }
 +  this.hashString = hashString;
 +  function mergeObjects(destination, source) {
 +    if(source && Array.isArray(source)) {
 +      destination = (destination || []).concat(source.map(function(obj) {
 +        return mergeObjects({}, obj)
 +      }))
 +    }else {
 +      if(source && typeof source === "object") {
 +        destination = destination || {};
 +        Object.keys(source).forEach(function(p) {
 +          destination[p] = mergeObjects(destination[p], source[p])
 +        })
 +      }else {
 +        destination = source
 +      }
 +    }
 +    return destination
 +  }
 +  this.mergeObjects = mergeObjects
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +(function() {
 +  var rangeClientRectsBug;
 +  function rangeClientRectsUntransformedBug(document) {
 +    var range, directBoundingRect, rangeBoundingRect, testContainer, testElement;
 +    if(rangeClientRectsBug === undefined) {
 +      testContainer = document.createElement("div");
 +      testContainer.style.position = "absolute";
 +      testContainer.style.left = "-99999px";
 +      testContainer.style.transform = "scale(2)";
 +      testContainer.style["-webkit-transform"] = "scale(2)";
 +      testElement = document.createElement("div");
 +      testElement.style.width = "10px";
 +      testElement.style.height = "10px";
 +      testContainer.appendChild(testElement);
 +      document.body.appendChild(testContainer);
 +      range = testElement.ownerDocument.createRange();
 +      directBoundingRect = testElement.getBoundingClientRect();
 +      range.selectNode(testElement);
 +      rangeBoundingRect = range.getBoundingClientRect();
 +      rangeClientRectsBug = directBoundingRect.height !== rangeBoundingRect.height;
 +      range.detach();
 +      document.body.removeChild(testContainer)
 +    }
 +    return rangeClientRectsBug
 +  }
 +  core.DomUtils = function DomUtils() {
 +    function findStablePoint(container, offset) {
 +      if(offset < container.childNodes.length) {
 +        container = container.childNodes[offset];
 +        offset = 0;
 +        while(container.firstChild) {
 +          container = container.firstChild
 +        }
 +      }else {
 +        while(container.lastChild) {
 +          container = container.lastChild;
 +          offset = container.nodeType === Node.TEXT_NODE ? container.textContent.length : container.childNodes.length
 +        }
 +      }
 +      return{container:container, offset:offset}
 +    }
 +    function splitBoundaries(range) {
 +      var modifiedNodes = [], end, splitStart;
 +      if(range.startContainer.nodeType === Node.TEXT_NODE || range.endContainer.nodeType === Node.TEXT_NODE) {
 +        end = findStablePoint(range.endContainer, range.endOffset);
 +        range.setEnd(end.container, end.offset);
 +        if(range.endOffset !== 0 && (range.endContainer.nodeType === Node.TEXT_NODE && range.endOffset !== range.endContainer.length)) {
 +          modifiedNodes.push(range.endContainer.splitText(range.endOffset));
 +          modifiedNodes.push(range.endContainer)
 +        }
 +        if(range.startOffset !== 0 && (range.startContainer.nodeType === Node.TEXT_NODE && range.startOffset !== range.startContainer.length)) {
 +          splitStart = range.startContainer.splitText(range.startOffset);
 +          modifiedNodes.push(range.startContainer);
 +          modifiedNodes.push(splitStart);
 +          range.setStart(splitStart, 0)
 +        }
 +      }
 +      return modifiedNodes
 +    }
 +    this.splitBoundaries = splitBoundaries;
 +    function containsRange(container, insideRange) {
 +      return container.compareBoundaryPoints(container.START_TO_START, insideRange) <= 0 && container.compareBoundaryPoints(container.END_TO_END, insideRange) >= 0
 +    }
 +    this.containsRange = containsRange;
 +    function rangesIntersect(range1, range2) {
 +      return range1.compareBoundaryPoints(range1.END_TO_START, range2) <= 0 && range1.compareBoundaryPoints(range1.START_TO_END, range2) >= 0
 +    }
 +    this.rangesIntersect = rangesIntersect;
 +    function getNodesInRange(range, nodeFilter) {
 +      var document = range.startContainer.ownerDocument, elements = [], root = (range.commonAncestorContainer), n, filterResult, treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ALL, nodeFilter, false);
 +      treeWalker.currentNode = range.startContainer;
 +      n = range.startContainer;
 +      while(n) {
 +        filterResult = nodeFilter(n);
 +        if(filterResult === NodeFilter.FILTER_ACCEPT) {
 +          elements.push(n)
 +        }else {
 +          if(filterResult === NodeFilter.FILTER_REJECT) {
 +            break
 +          }
 +        }
 +        n = n.parentNode
 +      }
 +      elements.reverse();
 +      n = treeWalker.nextNode();
 +      while(n) {
 +        elements.push(n);
 +        n = treeWalker.nextNode()
 +      }
 +      return elements
 +    }
 +    this.getNodesInRange = getNodesInRange;
 +    function mergeTextNodes(node, nextNode) {
 +      var mergedNode = null;
 +      if(node.nodeType === Node.TEXT_NODE) {
 +        if(node.length === 0) {
 +          node.parentNode.removeChild(node);
 +          if(nextNode.nodeType === Node.TEXT_NODE) {
 +            mergedNode = nextNode
 +          }
 +        }else {
 +          if(nextNode.nodeType === Node.TEXT_NODE) {
 +            node.appendData(nextNode.data);
 +            nextNode.parentNode.removeChild(nextNode)
 +          }
 +          mergedNode = node
 +        }
 +      }
 +      return mergedNode
 +    }
 +    function normalizeTextNodes(node) {
 +      if(node && node.nextSibling) {
 +        node = mergeTextNodes(node, node.nextSibling)
 +      }
 +      if(node && node.previousSibling) {
 +        mergeTextNodes(node.previousSibling, node)
 +      }
 +    }
 +    this.normalizeTextNodes = normalizeTextNodes;
 +    function rangeContainsNode(limits, node) {
 +      var range = node.ownerDocument.createRange(), nodeLength = node.nodeType === Node.TEXT_NODE ? node.length : node.childNodes.length, result;
 +      range.setStart(limits.startContainer, limits.startOffset);
 +      range.setEnd(limits.endContainer, limits.endOffset);
 +      result = range.comparePoint(node, 0) === 0 && range.comparePoint(node, nodeLength) === 0;
 +      range.detach();
 +      return result
 +    }
 +    this.rangeContainsNode = rangeContainsNode;
 +    function mergeIntoParent(targetNode) {
 +      var parent = targetNode.parentNode;
 +      while(targetNode.firstChild) {
 +        parent.insertBefore(targetNode.firstChild, targetNode)
 +      }
 +      parent.removeChild(targetNode);
 +      return parent
 +    }
 +    this.mergeIntoParent = mergeIntoParent;
 +    function removeUnwantedNodes(targetNode, shouldRemove) {
 +      var parent = targetNode.parentNode, node = targetNode.firstChild, next;
 +      while(node) {
 +        next = node.nextSibling;
 +        removeUnwantedNodes(node, shouldRemove);
 +        node = next
 +      }
 +      if(shouldRemove(targetNode)) {
 +        parent = mergeIntoParent(targetNode)
 +      }
 +      return parent
 +    }
 +    this.removeUnwantedNodes = removeUnwantedNodes;
 +    function getElementsByTagNameNS(node, namespace, tagName) {
 +      return Array.prototype.slice.call(node.getElementsByTagNameNS(namespace, tagName))
 +    }
 +    this.getElementsByTagNameNS = getElementsByTagNameNS;
 +    function rangeIntersectsNode(range, node) {
 +      var nodeLength = node.nodeType === Node.TEXT_NODE ? node.length : node.childNodes.length;
 +      return range.comparePoint(node, 0) <= 0 && range.comparePoint(node, nodeLength) >= 0
 +    }
 +    this.rangeIntersectsNode = rangeIntersectsNode;
 +    function containsNode(parent, descendant) {
 +      return parent === descendant || parent.contains(descendant)
 +    }
 +    this.containsNode = containsNode;
 +    function getPositionInContainingNode(node, container) {
 +      var offset = 0, n;
 +      while(node.parentNode !== container) {
 +        runtime.assert(node.parentNode !== null, "parent is null");
 +        node = (node.parentNode)
 +      }
 +      n = container.firstChild;
 +      while(n !== node) {
 +        offset += 1;
 +        n = n.nextSibling
 +      }
 +      return offset
 +    }
 +    function comparePoints(c1, o1, c2, o2) {
 +      if(c1 === c2) {
 +        return o2 - o1
 +      }
 +      var comparison = c1.compareDocumentPosition(c2);
 +      if(comparison === 2) {
 +        comparison = -1
 +      }else {
 +        if(comparison === 4) {
 +          comparison = 1
 +        }else {
 +          if(comparison === 10) {
 +            o1 = getPositionInContainingNode(c1, c2);
 +            comparison = o1 < o2 ? 1 : -1
 +          }else {
 +            o2 = getPositionInContainingNode(c2, c1);
 +            comparison = o2 < o1 ? -1 : 1
 +          }
 +        }
 +      }
 +      return comparison
 +    }
 +    this.comparePoints = comparePoints;
 +    function containsNodeForBrokenWebKit(parent, descendant) {
 +      return parent === descendant || Boolean(parent.compareDocumentPosition(descendant) & Node.DOCUMENT_POSITION_CONTAINED_BY)
 +    }
 +    this.areRangeRectanglesTransformed = function(document) {
 +      return!rangeClientRectsUntransformedBug(document)
 +    };
 +    function adaptRangeDifferenceToZoomLevel(inputNumber, zoomLevel) {
 +      var window = runtime.getWindow(), document = window && window.document;
 +      if(document && rangeClientRectsUntransformedBug(document)) {
 +        return inputNumber
 +      }
 +      return inputNumber / zoomLevel
 +    }
 +    this.adaptRangeDifferenceToZoomLevel = adaptRangeDifferenceToZoomLevel;
 +    function init(self) {
 +      var window = runtime.getWindow(), appVersion, webKitOrSafari, ie;
 +      if(window === null) {
 +        return
 +      }
 +      appVersion = window.navigator.appVersion.toLowerCase();
 +      webKitOrSafari = appVersion.indexOf("chrome") === -1 && (appVersion.indexOf("applewebkit") !== -1 || appVersion.indexOf("safari") !== -1);
 +      ie = appVersion.indexOf("msie");
 +      if(webKitOrSafari || ie) {
 +        self.containsNode = containsNodeForBrokenWebKit
 +      }
 +    }
 +    init(this)
 +  };
 +  return core.DomUtils
 +})();
 +runtime.loadClass("core.DomUtils");
 +core.Cursor = function Cursor(document, memberId) {
 +  var cursorns = "urn:webodf:names:cursor", cursorNode = document.createElementNS(cursorns, "cursor"), anchorNode = document.createElementNS(cursorns, "anchor"), forwardSelection, recentlyModifiedNodes = [], selectedRange, isCollapsed, domUtils = new core.DomUtils;
 +  function putIntoTextNode(node, container, offset) {
 +    runtime.assert(Boolean(container), "putCursorIntoTextNode: invalid container");
 +    var parent = container.parentNode;
 +    runtime.assert(Boolean(parent), "putCursorIntoTextNode: container without parent");
 +    runtime.assert(offset >= 0 && offset <= container.length, "putCursorIntoTextNode: offset is out of bounds");
 +    if(offset === 0) {
 +      parent.insertBefore(node, container)
 +    }else {
 +      if(offset === container.length) {
 +        parent.insertBefore(node, container.nextSibling)
 +      }else {
 +        container.splitText(offset);
 +        parent.insertBefore(node, container.nextSibling)
 +      }
 +    }
 +  }
-   function putIntoContainer(node, container, offset) {
-     runtime.assert(Boolean(container), "putCursorIntoContainer: invalid container");
-     var n = container.firstChild;
-     while(n !== null && offset > 0) {
-       n = n.nextSibling;
-       offset -= 1
-     }
-     container.insertBefore(node, n)
-   }
 +  function removeNode(node) {
 +    if(node.parentNode) {
 +      recentlyModifiedNodes.push(node.previousSibling);
 +      recentlyModifiedNodes.push(node.nextSibling);
 +      node.parentNode.removeChild(node)
 +    }
 +  }
 +  function putNode(node, container, offset) {
-     var text, element;
 +    if(container.nodeType === Node.TEXT_NODE) {
-       text = (container);
-       putIntoTextNode(node, text, offset)
++      putIntoTextNode(node, (container), offset)
 +    }else {
 +      if(container.nodeType === Node.ELEMENT_NODE) {
-         element = (container);
-         putIntoContainer(node, element, offset)
++        container.insertBefore(node, container.childNodes[offset])
 +      }
 +    }
 +    recentlyModifiedNodes.push(node.previousSibling);
 +    recentlyModifiedNodes.push(node.nextSibling)
 +  }
 +  function getStartNode() {
 +    return forwardSelection ? anchorNode : cursorNode
 +  }
 +  function getEndNode() {
 +    return forwardSelection ? cursorNode : anchorNode
 +  }
 +  this.getNode = function() {
 +    return cursorNode
 +  };
 +  this.getAnchorNode = function() {
 +    return anchorNode.parentNode ? anchorNode : cursorNode
 +  };
 +  this.getSelectedRange = function() {
 +    if(isCollapsed) {
 +      selectedRange.setStartBefore(cursorNode);
 +      selectedRange.collapse(true)
 +    }else {
 +      selectedRange.setStartAfter(getStartNode());
 +      selectedRange.setEndBefore(getEndNode())
 +    }
 +    return selectedRange
 +  };
 +  this.setSelectedRange = function(range, isForwardSelection) {
 +    if(selectedRange && selectedRange !== range) {
 +      selectedRange.detach()
 +    }
 +    selectedRange = range;
 +    forwardSelection = isForwardSelection !== false;
 +    isCollapsed = range.collapsed;
 +    if(range.collapsed) {
 +      removeNode(anchorNode);
 +      removeNode(cursorNode);
 +      putNode(cursorNode, (range.startContainer), range.startOffset)
 +    }else {
 +      removeNode(anchorNode);
 +      removeNode(cursorNode);
 +      putNode(getEndNode(), (range.endContainer), range.endOffset);
 +      putNode(getStartNode(), (range.startContainer), range.startOffset)
 +    }
 +    recentlyModifiedNodes.forEach(domUtils.normalizeTextNodes);
 +    recentlyModifiedNodes.length = 0
 +  };
 +  this.hasForwardSelection = function() {
 +    return forwardSelection
 +  };
 +  this.remove = function() {
 +    removeNode(cursorNode);
 +    recentlyModifiedNodes.forEach(domUtils.normalizeTextNodes);
 +    recentlyModifiedNodes.length = 0
 +  };
 +  function init() {
 +    cursorNode.setAttributeNS(cursorns, "memberId", memberId);
 +    anchorNode.setAttributeNS(cursorns, "memberId", memberId)
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +core.EventNotifier = function EventNotifier(eventIds) {
 +  var eventListener = {};
 +  this.emit = function(eventId, args) {
 +    var i, subscribers;
 +    runtime.assert(eventListener.hasOwnProperty(eventId), 'unknown event fired "' + eventId + '"');
 +    subscribers = eventListener[eventId];
 +    for(i = 0;i < subscribers.length;i += 1) {
 +      subscribers[i](args)
 +    }
 +  };
 +  this.subscribe = function(eventId, cb) {
 +    runtime.assert(eventListener.hasOwnProperty(eventId), 'tried to subscribe to unknown event "' + eventId + '"');
 +    eventListener[eventId].push(cb);
 +    runtime.log('event "' + eventId + '" subscribed.')
 +  };
 +  this.unsubscribe = function(eventId, cb) {
 +    var cbIndex;
 +    runtime.assert(eventListener.hasOwnProperty(eventId), 'tried to unsubscribe from unknown event "' + eventId + '"');
 +    cbIndex = eventListener[eventId].indexOf(cb);
 +    runtime.assert(cbIndex !== -1, 'tried to unsubscribe unknown callback from event "' + eventId + '"');
 +    if(cbIndex !== -1) {
 +      eventListener[eventId].splice(cbIndex, 1)
 +    }
 +    runtime.log('event "' + eventId + '" unsubscribed.')
 +  };
 +  function init() {
 +    var i;
 +    for(i = 0;i < eventIds.length;i += 1) {
 +      eventListener[eventIds[i]] = []
 +    }
 +  }
 +  init()
 +};
 +core.UnitTest = function UnitTest() {
 +};
 +core.UnitTest.prototype.setUp = function() {
 +};
 +core.UnitTest.prototype.tearDown = function() {
 +};
 +core.UnitTest.prototype.description = function() {
 +};
 +core.UnitTest.prototype.tests = function() {
 +};
 +core.UnitTest.prototype.asyncTests = function() {
 +};
 +core.UnitTest.provideTestAreaDiv = function() {
 +  var maindoc = runtime.getWindow().document, testarea = maindoc.getElementById("testarea");
 +  runtime.assert(!testarea, 'Unclean test environment, found a div with id "testarea".');
 +  testarea = maindoc.createElement("div");
 +  testarea.setAttribute("id", "testarea");
 +  maindoc.body.appendChild(testarea);
 +  return testarea
 +};
 +core.UnitTest.cleanupTestAreaDiv = function() {
 +  var maindoc = runtime.getWindow().document, testarea = maindoc.getElementById("testarea");
 +  runtime.assert(!!testarea && testarea.parentNode === maindoc.body, 'Test environment broken, found no div with id "testarea" below body.');
 +  maindoc.body.removeChild(testarea)
 +};
 +core.UnitTest.createOdtDocument = function(xml, namespaceMap) {
 +  var xmlDoc = "<?xml version='1.0' encoding='UTF-8'?>";
 +  xmlDoc += "<office:document";
 +  Object.keys(namespaceMap).forEach(function(key) {
 +    xmlDoc += " xmlns:" + key + '="' + namespaceMap[key] + '"'
 +  });
 +  xmlDoc += ">";
 +  xmlDoc += xml;
 +  xmlDoc += "</office:document>";
 +  return runtime.parseXML(xmlDoc)
 +};
 +core.UnitTestRunner = function UnitTestRunner() {
 +  var failedTests = 0, areObjectsEqual;
 +  function debug(msg) {
 +    runtime.log(msg)
 +  }
 +  function testFailed(msg) {
 +    failedTests += 1;
 +    runtime.log("fail", msg)
 +  }
 +  function testPassed(msg) {
 +    runtime.log("pass", msg)
 +  }
 +  function areArraysEqual(a, b) {
 +    var i;
 +    try {
 +      if(a.length !== b.length) {
 +        testFailed("array of length " + a.length + " should be " + b.length + " long");
 +        return false
 +      }
 +      for(i = 0;i < a.length;i += 1) {
 +        if(a[i] !== b[i]) {
 +          testFailed(a[i] + " should be " + b[i] + " at array index " + i);
 +          return false
 +        }
 +      }
 +    }catch(ex) {
 +      return false
 +    }
 +    return true
 +  }
 +  function areAttributesEqual(a, b, skipReverseCheck) {
 +    var aatts = a.attributes, n = aatts.length, i, att, v;
 +    for(i = 0;i < n;i += 1) {
 +      att = aatts.item(i);
-       if(att.prefix !== "xmlns") {
++      if(att.prefix !== "xmlns" && att.namespaceURI !== "urn:webodf:names:steps") {
 +        v = b.getAttributeNS(att.namespaceURI, att.localName);
 +        if(!b.hasAttributeNS(att.namespaceURI, att.localName)) {
 +          testFailed("Attribute " + att.localName + " with value " + att.value + " was not present");
 +          return false
 +        }
 +        if(v !== att.value) {
 +          testFailed("Attribute " + att.localName + " was " + v + " should be " + att.value);
 +          return false
 +        }
 +      }
 +    }
 +    return skipReverseCheck ? true : areAttributesEqual(b, a, true)
 +  }
 +  function areNodesEqual(a, b) {
 +    if(a.nodeType !== b.nodeType) {
-       testFailed(a.nodeType + " should be " + b.nodeType);
++      testFailed("Nodetype '" + a.nodeType + "' should be '" + b.nodeType + "'");
 +      return false
 +    }
 +    if(a.nodeType === Node.TEXT_NODE) {
-       return a.data === b.data
++      if(a.data === b.data) {
++        return true
++      }
++      testFailed("Textnode data '" + a.data + "' should be '" + b.data + "'");
++      return false
 +    }
 +    runtime.assert(a.nodeType === Node.ELEMENT_NODE, "Only textnodes and elements supported.");
-     if(a.namespaceURI !== b.namespaceURI || a.localName !== b.localName) {
-       testFailed(a.namespaceURI + " should be " + b.namespaceURI);
++    if(a.namespaceURI !== b.namespaceURI) {
++      testFailed("namespace '" + a.namespaceURI + "' should be '" + b.namespaceURI + "'");
++      return false
++    }
++    if(a.localName !== b.localName) {
++      testFailed("localName '" + a.localName + "' should be '" + b.localName + "'");
 +      return false
 +    }
-     if(!areAttributesEqual(a, b, false)) {
++    if(!areAttributesEqual((a), (b), false)) {
 +      return false
 +    }
 +    var an = a.firstChild, bn = b.firstChild;
 +    while(an) {
 +      if(!bn) {
++        testFailed("Nodetype '" + an.nodeType + "' is unexpected here.");
 +        return false
 +      }
 +      if(!areNodesEqual(an, bn)) {
 +        return false
 +      }
 +      an = an.nextSibling;
 +      bn = bn.nextSibling
 +    }
 +    if(bn) {
++      testFailed("Nodetype '" + bn.nodeType + "' is missing here.");
 +      return false
 +    }
 +    return true
 +  }
 +  function isResultCorrect(actual, expected) {
 +    if(expected === 0) {
 +      return actual === expected && 1 / actual === 1 / expected
 +    }
 +    if(actual === expected) {
 +      return true
 +    }
 +    if(typeof expected === "number" && isNaN(expected)) {
 +      return typeof actual === "number" && isNaN(actual)
 +    }
 +    if(Object.prototype.toString.call(expected) === Object.prototype.toString.call([])) {
-       return areArraysEqual(actual, expected)
++      return areArraysEqual((actual), (expected))
 +    }
 +    if(typeof expected === "object" && typeof actual === "object") {
 +      if(expected.constructor === Element || expected.constructor === Node) {
-         return areNodesEqual(expected, actual)
++        return areNodesEqual((expected), (actual))
 +      }
 +      return areObjectsEqual(expected, actual)
 +    }
 +    return false
 +  }
 +  function stringify(v) {
 +    if(v === 0 && 1 / v < 0) {
 +      return"-0"
 +    }
 +    return String(v)
 +  }
 +  function shouldBe(t, a, b) {
 +    if(typeof a !== "string" || typeof b !== "string") {
 +      debug("WARN: shouldBe() expects string arguments")
 +    }
 +    var exception, av, bv;
 +    try {
 +      av = eval(a)
 +    }catch(e) {
 +      exception = e
 +    }
 +    bv = eval(b);
 +    if(exception) {
 +      testFailed(a + " should be " + bv + ". Threw exception " + exception)
 +    }else {
 +      if(isResultCorrect(av, bv)) {
 +        testPassed(a + " is " + b)
 +      }else {
 +        if(String(typeof av) === String(typeof bv)) {
 +          testFailed(a + " should be " + bv + ". Was " + stringify(av) + ".")
 +        }else {
 +          testFailed(a + " should be " + bv + " (of type " + typeof bv + "). Was " + av + " (of type " + typeof av + ").")
 +        }
 +      }
 +    }
 +  }
 +  function shouldBeNonNull(t, a) {
 +    var exception, av;
 +    try {
 +      av = eval(a)
 +    }catch(e) {
 +      exception = e
 +    }
 +    if(exception) {
 +      testFailed(a + " should be non-null. Threw exception " + exception)
 +    }else {
 +      if(av !== null) {
 +        testPassed(a + " is non-null.")
 +      }else {
 +        testFailed(a + " should be non-null. Was " + av)
 +      }
 +    }
 +  }
 +  function shouldBeNull(t, a) {
 +    shouldBe(t, a, "null")
 +  }
 +  areObjectsEqual = function(a, b) {
 +    var akeys = Object.keys(a), bkeys = Object.keys(b);
 +    akeys.sort();
 +    bkeys.sort();
 +    return areArraysEqual(akeys, bkeys) && Object.keys(a).every(function(key) {
 +      var aval = a[key], bval = b[key];
 +      if(!isResultCorrect(aval, bval)) {
 +        testFailed(aval + " should be " + bval + " for key " + key);
 +        return false
 +      }
 +      return true
 +    })
 +  };
 +  this.areNodesEqual = areNodesEqual;
 +  this.shouldBeNull = shouldBeNull;
 +  this.shouldBeNonNull = shouldBeNonNull;
 +  this.shouldBe = shouldBe;
 +  this.countFailedTests = function() {
 +    return failedTests
 +  }
 +};
 +core.UnitTester = function UnitTester() {
 +  var failedTests = 0, results = {};
 +  function link(text, code) {
 +    return"<span style='color:blue;cursor:pointer' onclick='" + code + "'>" + text + "</span>"
 +  }
 +  this.runTests = function(TestClass, callback, testNames) {
 +    var testName = Runtime.getFunctionName(TestClass), tname, runner = new core.UnitTestRunner, test = new TestClass(runner), testResults = {}, i, t, tests, lastFailCount, testNameString = "testName", inBrowser = runtime.type() === "BrowserRuntime";
 +    if(results.hasOwnProperty(testName)) {
 +      runtime.log("Test " + testName + " has already run.");
 +      return
 +    }
 +    if(inBrowser) {
 +      runtime.log("<span>Running " + link(testName, 'runSuite("' + testName + '");') + ": " + test.description() + "</span>")
 +    }else {
 +      runtime.log("Running " + testName + ": " + test.description)
 +    }
 +    tests = test.tests();
 +    for(i = 0;i < tests.length;i += 1) {
 +      t = tests[i];
 +      tname = Runtime.getFunctionName(t) || t[testNameString];
 +      if(testNames.length && testNames.indexOf(tname) === -1) {
 +        continue
 +      }
 +      if(inBrowser) {
 +        runtime.log("<span>Running " + link(tname, 'runTest("' + testName + '","' + tname + '")') + "</span>")
 +      }else {
 +        runtime.log("Running " + tname)
 +      }
 +      lastFailCount = runner.countFailedTests();
 +      test.setUp();
 +      t();
 +      test.tearDown();
 +      testResults[tname] = lastFailCount === runner.countFailedTests()
 +    }
 +    function runAsyncTests(todo) {
 +      if(todo.length === 0) {
 +        results[testName] = testResults;
 +        failedTests += runner.countFailedTests();
 +        callback();
 +        return
 +      }
 +      t = todo[0];
 +      var fname = Runtime.getFunctionName(t);
 +      runtime.log("Running " + fname);
 +      lastFailCount = runner.countFailedTests();
 +      test.setUp();
 +      t(function() {
 +        test.tearDown();
 +        testResults[fname] = lastFailCount === runner.countFailedTests();
 +        runAsyncTests(todo.slice(1))
 +      })
 +    }
 +    runAsyncTests(test.asyncTests())
 +  };
 +  this.countFailedTests = function() {
 +    return failedTests
 +  };
 +  this.results = function() {
 +    return results
 +  }
 +};
 +core.PositionIterator = function PositionIterator(root, whatToShow, filter, expandEntityReferences) {
 +  function EmptyTextNodeFilter() {
 +    this.acceptNode = function(node) {
 +      if(node.nodeType === Node.TEXT_NODE && node.length === 0) {
 +        return NodeFilter.FILTER_REJECT
 +      }
 +      return NodeFilter.FILTER_ACCEPT
 +    }
 +  }
 +  function FilteredEmptyTextNodeFilter(filter) {
 +    this.acceptNode = function(node) {
 +      if(node.nodeType === Node.TEXT_NODE && node.length === 0) {
 +        return NodeFilter.FILTER_REJECT
 +      }
 +      return filter.acceptNode(node)
 +    }
 +  }
 +  var self = this, walker, currentPos, nodeFilter;
 +  this.nextPosition = function() {
 +    if(walker.currentNode === root) {
 +      return false
 +    }
 +    if(currentPos === 0 && walker.currentNode.nodeType === Node.ELEMENT_NODE) {
 +      if(walker.firstChild() === null) {
 +        currentPos = 1
 +      }
 +    }else {
 +      if(walker.currentNode.nodeType === Node.TEXT_NODE && currentPos + 1 < walker.currentNode.length) {
 +        currentPos += 1
 +      }else {
 +        if(walker.nextSibling() !== null) {
 +          currentPos = 0
 +        }else {
 +          if(walker.parentNode()) {
 +            currentPos = 1
 +          }else {
 +            return false
 +          }
 +        }
 +      }
 +    }
 +    return true
 +  };
 +  function setAtEnd() {
 +    var type = walker.currentNode.nodeType;
 +    if(type === Node.TEXT_NODE) {
 +      currentPos = walker.currentNode.length - 1
 +    }else {
 +      currentPos = type === Node.ELEMENT_NODE ? 1 : 0
 +    }
 +  }
++  function previousNode() {
++    if(walker.previousSibling() === null) {
++      if(!walker.parentNode() || walker.currentNode === root) {
++        walker.firstChild();
++        return false
++      }
++      currentPos = 0
++    }else {
++      setAtEnd()
++    }
++    return true
++  }
 +  this.previousPosition = function() {
 +    var moved = true;
 +    if(currentPos === 0) {
-       if(walker.previousSibling() === null) {
-         if(!walker.parentNode() || walker.currentNode === root) {
-           walker.firstChild();
-           return false
-         }
-         currentPos = 0
-       }else {
-         setAtEnd()
-       }
++      moved = previousNode()
 +    }else {
 +      if(walker.currentNode.nodeType === Node.TEXT_NODE) {
 +        currentPos -= 1
 +      }else {
 +        if(walker.lastChild() !== null) {
 +          setAtEnd()
 +        }else {
 +          if(walker.currentNode === root) {
 +            moved = false
 +          }else {
 +            currentPos = 0
 +          }
 +        }
 +      }
 +    }
 +    return moved
 +  };
++  this.previousNode = previousNode;
 +  this.container = function() {
 +    var n = walker.currentNode, t = n.nodeType;
 +    if(currentPos === 0 && t !== Node.TEXT_NODE) {
 +      return(n.parentNode)
 +    }
 +    return n
 +  };
 +  this.rightNode = function() {
 +    var n = walker.currentNode, nodeType = n.nodeType;
 +    if(nodeType === Node.TEXT_NODE && currentPos === n.length) {
 +      n = n.nextSibling;
 +      while(n && nodeFilter(n) !== 1) {
 +        n = n.nextSibling
 +      }
 +    }else {
 +      if(nodeType === Node.ELEMENT_NODE && currentPos === 1) {
 +        n = null
 +      }
 +    }
 +    return n
 +  };
 +  this.leftNode = function() {
 +    var n = walker.currentNode;
 +    if(currentPos === 0) {
 +      n = n.previousSibling;
 +      while(n && nodeFilter(n) !== 1) {
 +        n = n.previousSibling
 +      }
 +    }else {
 +      if(n.nodeType === Node.ELEMENT_NODE) {
 +        n = n.lastChild;
 +        while(n && nodeFilter(n) !== 1) {
 +          n = n.previousSibling
 +        }
 +      }
 +    }
 +    return n
 +  };
 +  this.getCurrentNode = function() {
 +    return walker.currentNode
 +  };
 +  this.unfilteredDomOffset = function() {
 +    if(walker.currentNode.nodeType === Node.TEXT_NODE) {
 +      return currentPos
 +    }
 +    var c = 0, n = walker.currentNode;
 +    if(currentPos === 1) {
 +      n = n.lastChild
 +    }else {
 +      n = n.previousSibling
 +    }
 +    while(n) {
 +      c += 1;
 +      n = n.previousSibling
 +    }
 +    return c
 +  };
 +  this.getPreviousSibling = function() {
 +    var currentNode = walker.currentNode, sibling = walker.previousSibling();
 +    walker.currentNode = currentNode;
 +    return sibling
 +  };
 +  this.getNextSibling = function() {
 +    var currentNode = walker.currentNode, sibling = walker.nextSibling();
 +    walker.currentNode = currentNode;
 +    return sibling
 +  };
 +  this.setUnfilteredPosition = function(container, offset) {
 +    var filterResult, node;
 +    runtime.assert(container !== null && container !== undefined, "PositionIterator.setUnfilteredPosition called without container");
 +    walker.currentNode = container;
 +    if(container.nodeType === Node.TEXT_NODE) {
 +      currentPos = offset;
 +      runtime.assert(offset <= container.length, "Error in setPosition: " + offset + " > " + container.length);
 +      runtime.assert(offset >= 0, "Error in setPosition: " + offset + " < 0");
 +      if(offset === container.length) {
 +        currentPos = undefined;
 +        if(walker.nextSibling()) {
 +          currentPos = 0
 +        }else {
 +          if(walker.parentNode()) {
 +            currentPos = 1
 +          }
 +        }
 +        runtime.assert(currentPos !== undefined, "Error in setPosition: position not valid.")
 +      }
 +      return true
 +    }
 +    filterResult = nodeFilter(container);
 +    node = container.parentNode;
 +    while(node && (node !== root && filterResult === NodeFilter.FILTER_ACCEPT)) {
 +      filterResult = nodeFilter(node);
 +      if(filterResult !== NodeFilter.FILTER_ACCEPT) {
 +        walker.currentNode = node
 +      }
 +      node = node.parentNode
 +    }
 +    if(offset < container.childNodes.length && filterResult !== NodeFilter.FILTER_REJECT) {
 +      walker.currentNode = container.childNodes[offset];
 +      filterResult = nodeFilter(walker.currentNode);
 +      currentPos = 0
 +    }else {
 +      currentPos = 1
 +    }
 +    if(filterResult === NodeFilter.FILTER_REJECT) {
 +      currentPos = 1
 +    }
 +    if(filterResult !== NodeFilter.FILTER_ACCEPT) {
 +      return self.nextPosition()
 +    }
 +    runtime.assert(nodeFilter(walker.currentNode) === NodeFilter.FILTER_ACCEPT, "PositionIterater.setUnfilteredPosition call resulted in an non-visible node being set");
 +    return true
 +  };
 +  this.moveToEnd = function() {
 +    walker.currentNode = root;
 +    currentPos = 1
 +  };
 +  this.moveToEndOfNode = function(node) {
 +    if(node.nodeType === Node.TEXT_NODE) {
 +      self.setUnfilteredPosition(node, node.length)
 +    }else {
 +      walker.currentNode = node;
 +      currentPos = 1
 +    }
 +  };
 +  this.getNodeFilter = function() {
 +    return nodeFilter
 +  };
 +  function init() {
 +    var f;
 +    if(filter) {
 +      f = new FilteredEmptyTextNodeFilter(filter)
 +    }else {
 +      f = new EmptyTextNodeFilter
 +    }
 +    nodeFilter = (f.acceptNode);
 +    nodeFilter.acceptNode = nodeFilter;
 +    whatToShow = whatToShow || 4294967295;
 +    walker = root.ownerDocument.createTreeWalker(root, whatToShow, nodeFilter, expandEntityReferences);
 +    currentPos = 0;
 +    if(walker.firstChild() === null) {
 +      currentPos = 1
 +    }
 +  }
 +  init()
 +};
 +runtime.loadClass("core.PositionIterator");
 +core.PositionFilter = function PositionFilter() {
 +};
 +core.PositionFilter.FilterResult = {FILTER_ACCEPT:1, FILTER_REJECT:2, FILTER_SKIP:3};
 +core.PositionFilter.prototype.acceptPosition = function(point) {
 +};
 +(function() {
 +  return core.PositionFilter
 +})();
 +runtime.loadClass("core.PositionFilter");
 +core.PositionFilterChain = function PositionFilterChain() {
 +  var filterChain = {}, FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT, FILTER_REJECT = core.PositionFilter.FilterResult.FILTER_REJECT;
 +  this.acceptPosition = function(iterator) {
 +    var filterName;
 +    for(filterName in filterChain) {
 +      if(filterChain.hasOwnProperty(filterName)) {
 +        if(filterChain[filterName].acceptPosition(iterator) === FILTER_REJECT) {
 +          return FILTER_REJECT
 +        }
 +      }
 +    }
 +    return FILTER_ACCEPT
 +  };
 +  this.addFilter = function(filterName, filterInstance) {
 +    filterChain[filterName] = filterInstance
 +  };
 +  this.removeFilter = function(filterName) {
 +    delete filterChain[filterName]
 +  }
 +};
 +core.ScheduledTask = function ScheduledTask(fn, delay) {
 +  var timeoutId, scheduled = false;
 +  function execute() {
 +    fn();
 +    scheduled = false
 +  }
 +  function cancel() {
 +    if(scheduled) {
 +      runtime.clearTimeout(timeoutId);
 +      scheduled = false
 +    }
 +  }
 +  this.trigger = function() {
 +    if(!scheduled) {
 +      timeoutId = runtime.setTimeout(execute, delay)
 +    }
 +  };
 +  this.triggerImmediate = function() {
 +    cancel();
 +    execute()
 +  };
 +  this.processRequests = function() {
 +    if(scheduled) {
 +      cancel();
 +      execute()
 +    }
 +  };
 +  this.cancel = cancel;
 +  this.destroy = function(callback) {
 +    cancel();
 +    callback()
 +  }
 +};
 +core.Async = function Async() {
 +  this.forEach = function(items, f, callback) {
 +    var i, l = items.length, itemsDone = 0;
 +    function end(err) {
 +      if(itemsDone !== l) {
 +        if(err) {
 +          itemsDone = l;
 +          callback(err)
 +        }else {
 +          itemsDone += 1;
 +          if(itemsDone === l) {
 +            callback(null)
 +          }
 +        }
 +      }
 +    }
 +    for(i = 0;i < l;i += 1) {
 +      f(items[i], end)
 +    }
 +  };
 +  this.destroyAll = function(items, callback) {
 +    function destroy(itemIndex, err) {
 +      if(err) {
 +        callback(err)
 +      }else {
 +        if(itemIndex < items.length) {
 +          items[itemIndex](function(err) {
 +            destroy(itemIndex + 1, err)
 +          })
 +        }else {
 +          callback()
 +        }
 +      }
 +    }
 +    destroy(0, undefined)
 +  }
 +};
 +/*
 +
 + WebODF
 + Copyright (c) 2010 Jos van den Oever
 + Licensed under the ... License:
 +
 + Project home: http://www.webodf.org/
 +*/
 +runtime.loadClass("core.RawInflate");
 +runtime.loadClass("core.ByteArray");
 +runtime.loadClass("core.ByteArrayWriter");
 +runtime.loadClass("core.Base64");
 +core.Zip = function Zip(url, entriesReadCallback) {
 +  var entries, filesize, nEntries, inflate = (new core.RawInflate).inflate, zip = this, base64 = new core.Base64;
 +  function crc32(data) {
 +    var table = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722,  [...]
 +    3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 406650 [...]
 +    453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 30826 [...]
 +    3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 293667 [...]
 +    1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718 [...]
 +    1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918E3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 75516 [...]
 +    0, i, iTop = data.length, x = 0, y = 0;
 +    crc = crc ^ -1;
 +    for(i = 0;i < iTop;i += 1) {
 +      y = (crc ^ data[i]) & 255;
 +      x = table[y];
 +      crc = crc >>> 8 ^ x
 +    }
 +    return crc ^ -1
 +  }
 +  function dosTime2Date(dostime) {
 +    var year = (dostime >> 25 & 127) + 1980, month = (dostime >> 21 & 15) - 1, mday = dostime >> 16 & 31, hour = dostime >> 11 & 15, min = dostime >> 5 & 63, sec = (dostime & 31) << 1, d = new Date(year, month, mday, hour, min, sec);
 +    return d
 +  }
 +  function date2DosTime(date) {
 +    var y = date.getFullYear();
 +    return y < 1980 ? 0 : y - 1980 << 25 | date.getMonth() + 1 << 21 | date.getDate() << 16 | date.getHours() << 11 | date.getMinutes() << 5 | date.getSeconds() >> 1
 +  }
 +  function ZipEntry(url, stream) {
 +    var sig, namelen, extralen, commentlen, compressionMethod, compressedSize, uncompressedSize, offset, entry = this;
 +    function handleEntryData(data, callback) {
 +      var estream = new core.ByteArray(data), esig = estream.readUInt32LE(), filenamelen, eextralen;
 +      if(esig !== 67324752) {
 +        callback("File entry signature is wrong." + esig.toString() + " " + data.length.toString(), null);
 +        return
 +      }
 +      estream.pos += 22;
 +      filenamelen = estream.readUInt16LE();
 +      eextralen = estream.readUInt16LE();
 +      estream.pos += filenamelen + eextralen;
 +      if(compressionMethod) {
 +        data = data.slice(estream.pos, estream.pos + compressedSize);
 +        if(compressedSize !== data.length) {
 +          callback("The amount of compressed bytes read was " + data.length.toString() + " instead of " + compressedSize.toString() + " for " + entry.filename + " in " + url + ".", null);
 +          return
 +        }
 +        data = inflate(data, uncompressedSize)
 +      }else {
 +        data = data.slice(estream.pos, estream.pos + uncompressedSize)
 +      }
 +      if(uncompressedSize !== data.length) {
 +        callback("The amount of bytes read was " + data.length.toString() + " instead of " + uncompressedSize.toString() + " for " + entry.filename + " in " + url + ".", null);
 +        return
 +      }
 +      entry.data = data;
 +      callback(null, data)
 +    }
 +    function load(callback) {
 +      if(entry.data !== undefined) {
 +        callback(null, entry.data);
 +        return
 +      }
 +      var size = compressedSize + 34 + namelen + extralen + 256;
 +      if(size + offset > filesize) {
 +        size = filesize - offset
 +      }
 +      runtime.read(url, offset, size, function(err, data) {
 +        if(err || data === null) {
 +          callback(err, data)
 +        }else {
 +          handleEntryData(data, callback)
 +        }
 +      })
 +    }
 +    this.load = load;
 +    function set(filename, data, compressed, date) {
 +      entry.filename = filename;
 +      entry.data = data;
 +      entry.compressed = compressed;
 +      entry.date = date
 +    }
 +    this.set = set;
 +    this.error = null;
 +    if(!stream) {
 +      return
 +    }
 +    sig = stream.readUInt32LE();
 +    if(sig !== 33639248) {
 +      this.error = "Central directory entry has wrong signature at position " + (stream.pos - 4).toString() + ' for file "' + url + '": ' + stream.data.length.toString();
 +      return
 +    }
 +    stream.pos += 6;
 +    compressionMethod = stream.readUInt16LE();
 +    this.date = dosTime2Date(stream.readUInt32LE());
 +    stream.readUInt32LE();
 +    compressedSize = stream.readUInt32LE();
 +    uncompressedSize = stream.readUInt32LE();
 +    namelen = stream.readUInt16LE();
 +    extralen = stream.readUInt16LE();
 +    commentlen = stream.readUInt16LE();
 +    stream.pos += 8;
 +    offset = stream.readUInt32LE();
 +    this.filename = runtime.byteArrayToString(stream.data.slice(stream.pos, stream.pos + namelen), "utf8");
 +    stream.pos += namelen + extralen + commentlen
 +  }
 +  function handleCentralDirectory(data, callback) {
 +    var stream = new core.ByteArray(data), i, e;
 +    entries = [];
 +    for(i = 0;i < nEntries;i += 1) {
 +      e = new ZipEntry(url, stream);
 +      if(e.error) {
 +        callback(e.error, zip);
 +        return
 +      }
 +      entries[entries.length] = e
 +    }
 +    callback(null, zip)
 +  }
 +  function handleCentralDirectoryEnd(data, callback) {
 +    if(data.length !== 22) {
 +      callback("Central directory length should be 22.", zip);
 +      return
 +    }
 +    var stream = new core.ByteArray(data), sig, disk, cddisk, diskNEntries, cdsSize, cdsOffset;
 +    sig = stream.readUInt32LE();
 +    if(sig !== 101010256) {
 +      callback("Central directory signature is wrong: " + sig.toString(), zip);
 +      return
 +    }
 +    disk = stream.readUInt16LE();
 +    if(disk !== 0) {
 +      callback("Zip files with non-zero disk numbers are not supported.", zip);
 +      return
 +    }
 +    cddisk = stream.readUInt16LE();
 +    if(cddisk !== 0) {
 +      callback("Zip files with non-zero disk numbers are not supported.", zip);
 +      return
 +    }
 +    diskNEntries = stream.readUInt16LE();
 +    nEntries = stream.readUInt16LE();
 +    if(diskNEntries !== nEntries) {
 +      callback("Number of entries is inconsistent.", zip);
 +      return
 +    }
 +    cdsSize = stream.readUInt32LE();
 +    cdsOffset = stream.readUInt16LE();
 +    cdsOffset = filesize - 22 - cdsSize;
 +    runtime.read(url, cdsOffset, filesize - cdsOffset, function(err, data) {
 +      if(err || data === null) {
 +        callback(err, zip)
 +      }else {
 +        handleCentralDirectory(data, callback)
 +      }
 +    })
 +  }
 +  function load(filename, callback) {
 +    var entry = null, e, i;
 +    for(i = 0;i < entries.length;i += 1) {
 +      e = entries[i];
 +      if(e.filename === filename) {
 +        entry = e;
 +        break
 +      }
 +    }
 +    if(entry) {
 +      if(entry.data) {
 +        callback(null, entry.data)
 +      }else {
 +        entry.load(callback)
 +      }
 +    }else {
 +      callback(filename + " not found.", null)
 +    }
 +  }
 +  function loadAsString(filename, callback) {
 +    load(filename, function(err, data) {
 +      if(err || data === null) {
 +        return callback(err, null)
 +      }
 +      var d = runtime.byteArrayToString(data, "utf8");
 +      callback(null, d)
 +    })
 +  }
 +  function loadContentXmlAsFragments(filename, handler) {
 +    zip.loadAsString(filename, function(err, data) {
 +      if(err) {
 +        return handler.rootElementReady(err)
 +      }
 +      handler.rootElementReady(null, data, true)
 +    })
 +  }
 +  function loadAsDataURL(filename, mimetype, callback) {
 +    load(filename, function(err, data) {
 +      if(err) {
 +        return callback(err, null)
 +      }
 +      var p = data, chunksize = 45E3, i = 0, dataurl;
 +      if(!mimetype) {
 +        if(p[1] === 80 && (p[2] === 78 && p[3] === 71)) {
 +          mimetype = "image/png"
 +        }else {
 +          if(p[0] === 255 && (p[1] === 216 && p[2] === 255)) {
 +            mimetype = "image/jpeg"
 +          }else {
 +            if(p[0] === 71 && (p[1] === 73 && p[2] === 70)) {
 +              mimetype = "image/gif"
 +            }else {
 +              mimetype = ""
 +            }
 +          }
 +        }
 +      }
 +      dataurl = "data:" + mimetype + ";base64,";
 +      while(i < data.length) {
 +        dataurl += base64.convertUTF8ArrayToBase64(p.slice(i, Math.min(i + chunksize, p.length)));
 +        i += chunksize
 +      }
 +      callback(null, dataurl)
 +    })
 +  }
 +  function loadAsDOM(filename, callback) {
 +    zip.loadAsString(filename, function(err, xmldata) {
 +      if(err || xmldata === null) {
 +        callback(err, null);
 +        return
 +      }
 +      var parser = new DOMParser, dom = parser.parseFromString(xmldata, "text/xml");
 +      callback(null, dom)
 +    })
 +  }
 +  function save(filename, data, compressed, date) {
 +    var i, entry;
 +    for(i = 0;i < entries.length;i += 1) {
 +      entry = entries[i];
 +      if(entry.filename === filename) {
 +        entry.set(filename, data, compressed, date);
 +        return
 +      }
 +    }
 +    entry = new ZipEntry(url);
 +    entry.set(filename, data, compressed, date);
 +    entries.push(entry)
 +  }
 +  function remove(filename) {
 +    var i, entry;
 +    for(i = 0;i < entries.length;i += 1) {
 +      entry = entries[i];
 +      if(entry.filename === filename) {
 +        entries.splice(i, 1);
 +        return true
 +      }
 +    }
 +    return false
 +  }
 +  function writeEntry(entry) {
 +    var data = new core.ByteArrayWriter("utf8"), length = 0;
 +    data.appendArray([80, 75, 3, 4, 20, 0, 0, 0, 0, 0]);
 +    if(entry.data) {
 +      length = entry.data.length
 +    }
 +    data.appendUInt32LE(date2DosTime(entry.date));
 +    data.appendUInt32LE(crc32(entry.data));
 +    data.appendUInt32LE(length);
 +    data.appendUInt32LE(length);
 +    data.appendUInt16LE(entry.filename.length);
 +    data.appendUInt16LE(0);
 +    data.appendString(entry.filename);
 +    if(entry.data) {
 +      data.appendByteArray(entry.data)
 +    }
 +    return data
 +  }
 +  function writeCODEntry(entry, offset) {
 +    var data = new core.ByteArrayWriter("utf8"), length = 0;
 +    data.appendArray([80, 75, 1, 2, 20, 0, 20, 0, 0, 0, 0, 0]);
 +    if(entry.data) {
 +      length = entry.data.length
 +    }
 +    data.appendUInt32LE(date2DosTime(entry.date));
 +    data.appendUInt32LE(crc32(entry.data));
 +    data.appendUInt32LE(length);
 +    data.appendUInt32LE(length);
 +    data.appendUInt16LE(entry.filename.length);
 +    data.appendArray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
 +    data.appendUInt32LE(offset);
 +    data.appendString(entry.filename);
 +    return data
 +  }
 +  function loadAllEntries(position, callback) {
 +    if(position === entries.length) {
 +      callback(null);
 +      return
 +    }
 +    var entry = entries[position];
 +    if(entry.data !== undefined) {
 +      loadAllEntries(position + 1, callback);
 +      return
 +    }
 +    entry.load(function(err) {
 +      if(err) {
 +        callback(err);
 +        return
 +      }
 +      loadAllEntries(position + 1, callback)
 +    })
 +  }
 +  function createByteArray(successCallback, errorCallback) {
 +    loadAllEntries(0, function(err) {
 +      if(err) {
 +        errorCallback(err);
 +        return
 +      }
 +      var data = new core.ByteArrayWriter("utf8"), i, e, codoffset, codsize, offsets = [0];
 +      for(i = 0;i < entries.length;i += 1) {
 +        data.appendByteArrayWriter(writeEntry(entries[i]));
 +        offsets.push(data.getLength())
 +      }
 +      codoffset = data.getLength();
 +      for(i = 0;i < entries.length;i += 1) {
 +        e = entries[i];
 +        data.appendByteArrayWriter(writeCODEntry(e, offsets[i]))
 +      }
 +      codsize = data.getLength() - codoffset;
 +      data.appendArray([80, 75, 5, 6, 0, 0, 0, 0]);
 +      data.appendUInt16LE(entries.length);
 +      data.appendUInt16LE(entries.length);
 +      data.appendUInt32LE(codsize);
 +      data.appendUInt32LE(codoffset);
 +      data.appendArray([0, 0]);
 +      successCallback(data.getByteArray())
 +    })
 +  }
 +  function writeAs(newurl, callback) {
 +    createByteArray(function(data) {
 +      runtime.writeFile(newurl, data, callback)
 +    }, callback)
 +  }
 +  function write(callback) {
 +    writeAs(url, callback)
 +  }
 +  this.load = load;
 +  this.save = save;
 +  this.remove = remove;
 +  this.write = write;
 +  this.writeAs = writeAs;
 +  this.createByteArray = createByteArray;
 +  this.loadContentXmlAsFragments = loadContentXmlAsFragments;
 +  this.loadAsString = loadAsString;
 +  this.loadAsDOM = loadAsDOM;
 +  this.loadAsDataURL = loadAsDataURL;
 +  this.getEntries = function() {
 +    return entries.slice()
 +  };
 +  filesize = -1;
 +  if(entriesReadCallback === null) {
 +    entries = [];
 +    return
 +  }
 +  runtime.getFileSize(url, function(size) {
 +    filesize = size;
 +    if(filesize < 0) {
 +      entriesReadCallback("File '" + url + "' cannot be read.", zip)
 +    }else {
 +      runtime.read(url, filesize - 22, 22, function(err, data) {
 +        if(err || (entriesReadCallback === null || data === null)) {
 +          entriesReadCallback(err, zip)
 +        }else {
 +          handleCentralDirectoryEnd(data, entriesReadCallback)
 +        }
 +      })
 +    }
 +  })
 +};
 +core.CSSUnits = function CSSUnits() {
 +  var sizemap = {"in":1, "cm":2.54, "mm":25.4, "pt":72, "pc":12};
 +  this.convert = function(value, oldUnit, newUnit) {
 +    return value * sizemap[newUnit] / sizemap[oldUnit]
 +  };
 +  this.convertMeasure = function(measure, newUnit) {
 +    var value, oldUnit, newMeasure;
 +    if(measure && newUnit) {
 +      value = parseFloat(measure);
 +      oldUnit = measure.replace(value.toString(), "");
 +      newMeasure = this.convert(value, oldUnit, newUnit)
 +    }else {
 +      newMeasure = ""
 +    }
 +    return newMeasure.toString()
 +  };
 +  this.getUnits = function(measure) {
 +    return measure.substr(measure.length - 2, measure.length)
 +  }
 +};
 +xmldom.LSSerializerFilter = function LSSerializerFilter() {
 +};
 +if(typeof Object.create !== "function") {
 +  Object["create"] = function(o) {
 +    var F = function() {
 +    };
 +    F.prototype = o;
 +    return new F
 +  }
 +}
 +xmldom.LSSerializer = function LSSerializer() {
 +  var self = this;
 +  function Namespaces(nsmap) {
 +    function invertMap(map) {
 +      var m = {}, i;
 +      for(i in map) {
 +        if(map.hasOwnProperty(i)) {
 +          m[map[i]] = i
 +        }
 +      }
 +      return m
 +    }
 +    var current = nsmap || {}, currentrev = invertMap(nsmap), levels = [current], levelsrev = [currentrev], level = 0;
 +    this.push = function() {
 +      level += 1;
 +      current = levels[level] = Object.create(current);
 +      currentrev = levelsrev[level] = Object.create(currentrev)
 +    };
 +    this.pop = function() {
 +      levels[level] = undefined;
 +      levelsrev[level] = undefined;
 +      level -= 1;
 +      current = levels[level];
 +      currentrev = levelsrev[level]
 +    };
 +    this.getLocalNamespaceDefinitions = function() {
 +      return currentrev
 +    };
 +    this.getQName = function(node) {
 +      var ns = node.namespaceURI, i = 0, p;
 +      if(!ns) {
 +        return node.localName
 +      }
 +      p = currentrev[ns];
 +      if(p) {
 +        return p + ":" + node.localName
 +      }
 +      do {
 +        if(p || !node.prefix) {
 +          p = "ns" + i;
 +          i += 1
 +        }else {
 +          p = node.prefix
 +        }
 +        if(current[p] === ns) {
 +          break
 +        }
 +        if(!current[p]) {
 +          current[p] = ns;
 +          currentrev[ns] = p;
 +          break
 +        }
 +        p = null
 +      }while(p === null);
 +      return p + ":" + node.localName
 +    }
 +  }
 +  function escapeContent(value) {
 +    return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, """)
 +  }
 +  function serializeAttribute(qname, attr) {
 +    var escapedValue = typeof attr.value === "string" ? escapeContent(attr.value) : attr.value, s = qname + '="' + escapedValue + '"';
 +    return s
 +  }
 +  function startElement(ns, qname, element) {
 +    var s = "", atts = element.attributes, length, i, attr, attstr = "", accept, prefix, nsmap;
 +    s += "<" + qname;
 +    length = atts.length;
 +    for(i = 0;i < length;i += 1) {
 +      attr = (atts.item(i));
 +      if(attr.namespaceURI !== "http://www.w3.org/2000/xmlns/") {
 +        accept = self.filter ? self.filter.acceptNode(attr) : NodeFilter.FILTER_ACCEPT;
 +        if(accept === NodeFilter.FILTER_ACCEPT) {
 +          attstr += " " + serializeAttribute(ns.getQName(attr), attr)
 +        }
 +      }
 +    }
 +    nsmap = ns.getLocalNamespaceDefinitions();
 +    for(i in nsmap) {
 +      if(nsmap.hasOwnProperty(i)) {
 +        prefix = nsmap[i];
 +        if(!prefix) {
 +          s += ' xmlns="' + i + '"'
 +        }else {
 +          if(prefix !== "xmlns") {
 +            s += " xmlns:" + nsmap[i] + '="' + i + '"'
 +          }
 +        }
 +      }
 +    }
 +    s += attstr + ">";
 +    return s
 +  }
 +  function serializeNode(ns, node) {
 +    var s = "", accept = self.filter ? self.filter.acceptNode(node) : NodeFilter.FILTER_ACCEPT, child, qname;
 +    if(accept === NodeFilter.FILTER_ACCEPT && node.nodeType === Node.ELEMENT_NODE) {
 +      ns.push();
 +      qname = ns.getQName(node);
 +      s += startElement(ns, qname, node)
 +    }
 +    if(accept === NodeFilter.FILTER_ACCEPT || accept === NodeFilter.FILTER_SKIP) {
 +      child = node.firstChild;
 +      while(child) {
 +        s += serializeNode(ns, child);
 +        child = child.nextSibling
 +      }
 +      if(node.nodeValue) {
 +        s += escapeContent(node.nodeValue)
 +      }
 +    }
 +    if(qname) {
 +      s += "</" + qname + ">";
 +      ns.pop()
 +    }
 +    return s
 +  }
 +  this.filter = null;
 +  this.writeToString = function(node, nsmap) {
 +    if(!node) {
 +      return""
 +    }
 +    var ns = new Namespaces(nsmap);
 +    return serializeNode(ns, node)
 +  }
 +};
 +xmldom.RelaxNGParser = function RelaxNGParser() {
 +  var self = this, rngns = "http://relaxng.org/ns/structure/1.0", xmlnsns = "http://www.w3.org/2000/xmlns/", start, nsmap = {"http://www.w3.org/XML/1998/namespace":"xml"}, parse;
 +  function RelaxNGParseError(error, context) {
 +    this.message = function() {
 +      if(context) {
 +        error += context.nodeType === 1 ? " Element " : " Node ";
 +        error += context.nodeName;
 +        if(context.nodeValue) {
 +          error += " with value '" + context.nodeValue + "'"
 +        }
 +        error += "."
 +      }
 +      return error
 +    }
 +  }
 +  function splitToDuos(e) {
 +    if(e.e.length <= 2) {
 +      return e
 +    }
 +    var o = {name:e.name, e:e.e.slice(0, 2)};
 +    return splitToDuos({name:e.name, e:[o].concat(e.e.slice(2))})
 +  }
 +  function splitQName(name) {
 +    var r = name.split(":", 2), prefix = "", i;
 +    if(r.length === 1) {
 +      r = ["", r[0]]
 +    }else {
 +      prefix = r[0]
 +    }
 +    for(i in nsmap) {
 +      if(nsmap[i] === prefix) {
 +        r[0] = i
 +      }
 +    }
 +    return r
 +  }
 +  function splitQNames(def) {
 +    var i, l = def.names ? def.names.length : 0, name, localnames = [], namespaces = [];
 +    for(i = 0;i < l;i += 1) {
 +      name = splitQName(def.names[i]);
 +      namespaces[i] = name[0];
 +      localnames[i] = name[1]
 +    }
 +    def.localnames = localnames;
 +    def.namespaces = namespaces
 +  }
 +  function trim(str) {
 +    str = str.replace(/^\s\s*/, "");
 +    var ws = /\s/, i = str.length - 1;
 +    while(ws.test(str.charAt(i))) {
 +      i -= 1
 +    }
 +    return str.slice(0, i + 1)
 +  }
 +  function copyAttributes(atts, name, names) {
 +    var a = {}, i, att;
 +    for(i = 0;i < atts.length;i += 1) {
 +      att = atts.item(i);
 +      if(!att.namespaceURI) {
 +        if(att.localName === "name" && (name === "element" || name === "attribute")) {
 +          names.push(att.value)
 +        }
 +        if(att.localName === "name" || (att.localName === "combine" || att.localName === "type")) {
 +          att.value = trim(att.value)
 +        }
 +        a[att.localName] = att.value
 +      }else {
 +        if(att.namespaceURI === xmlnsns) {
 +          nsmap[att.value] = att.localName
 +        }
 +      }
 +    }
 +    return a
 +  }
 +  function parseChildren(c, e, elements, names) {
 +    var text = "", ce;
 +    while(c) {
 +      if(c.nodeType === Node.ELEMENT_NODE && c.namespaceURI === rngns) {
 +        ce = parse(c, elements, e);
 +        if(ce) {
 +          if(ce.name === "name") {
 +            names.push(nsmap[ce.a.ns] + ":" + ce.text);
 +            e.push(ce)
 +          }else {
 +            if(ce.name === "choice" && (ce.names && ce.names.length)) {
 +              names = names.concat(ce.names);
 +              delete ce.names;
 +              e.push(ce)
 +            }else {
 +              e.push(ce)
 +            }
 +          }
 +        }
 +      }else {
 +        if(c.nodeType === Node.TEXT_NODE) {
 +          text += c.nodeValue
 +        }
 +      }
 +      c = c.nextSibling
 +    }
 +    return text
 +  }
 +  function combineDefines(combine, name, e, siblings) {
 +    var i, ce;
 +    for(i = 0;siblings && i < siblings.length;i += 1) {
 +      ce = siblings[i];
 +      if(ce.name === "define" && (ce.a && ce.a.name === name)) {
 +        ce.e = [{name:combine, e:ce.e.concat(e)}];
 +        return ce
 +      }
 +    }
 +    return null
 +  }
 +  parse = function parse(element, elements, siblings) {
 +    var e = [], a, ce, i, text, name = element.localName, names = [];
 +    a = copyAttributes(element.attributes, name, names);
 +    a.combine = a.combine || undefined;
 +    text = parseChildren(element.firstChild, e, elements, names);
 +    if(name !== "value" && name !== "param") {
 +      text = /^\s*([\s\S]*\S)?\s*$/.exec(text)[1]
 +    }
 +    if(name === "value" && a.type === undefined) {
 +      a.type = "token";
 +      a.datatypeLibrary = ""
 +    }
 +    if((name === "attribute" || name === "element") && a.name !== undefined) {
 +      i = splitQName(a.name);
 +      e = [{name:"name", text:i[1], a:{ns:i[0]}}].concat(e);
 +      delete a.name
 +    }
 +    if(name === "name" || (name === "nsName" || name === "value")) {
 +      if(a.ns === undefined) {
 +        a.ns = ""
 +      }
 +    }else {
 +      delete a.ns
 +    }
 +    if(name === "name") {
 +      i = splitQName(text);
 +      a.ns = i[0];
 +      text = i[1]
 +    }
 +    if(e.length > 1 && (name === "define" || (name === "oneOrMore" || (name === "zeroOrMore" || (name === "optional" || (name === "list" || name === "mixed")))))) {
 +      e = [{name:"group", e:splitToDuos({name:"group", e:e}).e}]
 +    }
 +    if(e.length > 2 && name === "element") {
 +      e = [e[0]].concat({name:"group", e:splitToDuos({name:"group", e:e.slice(1)}).e})
 +    }
 +    if(e.length === 1 && name === "attribute") {
 +      e.push({name:"text", text:text})
 +    }
 +    if(e.length === 1 && (name === "choice" || (name === "group" || name === "interleave"))) {
 +      name = e[0].name;
 +      names = e[0].names;
 +      a = e[0].a;
 +      text = e[0].text;
 +      e = e[0].e
 +    }else {
 +      if(e.length > 2 && (name === "choice" || (name === "group" || name === "interleave"))) {
 +        e = splitToDuos({name:name, e:e}).e
 +      }
 +    }
 +    if(name === "mixed") {
 +      name = "interleave";
 +      e = [e[0], {name:"text"}]
 +    }
 +    if(name === "optional") {
 +      name = "choice";
 +      e = [e[0], {name:"empty"}]
 +    }
 +    if(name === "zeroOrMore") {
 +      name = "choice";
 +      e = [{name:"oneOrMore", e:[e[0]]}, {name:"empty"}]
 +    }
 +    if(name === "define" && a.combine) {
 +      ce = combineDefines(a.combine, a.name, e, siblings);
 +      if(ce) {
 +        return
 +      }
 +    }
 +    ce = {name:name};
 +    if(e && e.length > 0) {
 +      ce.e = e
 +    }
 +    for(i in a) {
 +      if(a.hasOwnProperty(i)) {
 +        ce.a = a;
 +        break
 +      }
 +    }
 +    if(text !== undefined) {
 +      ce.text = text
 +    }
 +    if(names && names.length > 0) {
 +      ce.names = names
 +    }
 +    if(name === "element") {
 +      ce.id = elements.length;
 +      elements.push(ce);
 +      ce = {name:"elementref", id:ce.id}
 +    }
 +    return ce
 +  };
 +  function resolveDefines(def, defines) {
 +    var i = 0, e, defs, end, name = def.name;
 +    while(def.e && i < def.e.length) {
 +      e = def.e[i];
 +      if(e.name === "ref") {
 +        defs = defines[e.a.name];
 +        if(!defs) {
 +          throw e.a.name + " was not defined.";
 +        }
 +        end = def.e.slice(i + 1);
 +        def.e = def.e.slice(0, i);
 +        def.e = def.e.concat(defs.e);
 +        def.e = def.e.concat(end)
 +      }else {
 +        i += 1;
 +        resolveDefines(e, defines)
 +      }
 +    }
 +    e = def.e;
 +    if(name === "choice") {
 +      if(!e || (!e[1] || e[1].name === "empty")) {
 +        if(!e || (!e[0] || e[0].name === "empty")) {
 +          delete def.e;
 +          def.name = "empty"
 +        }else {
 +          e[1] = e[0];
 +          e[0] = {name:"empty"}
 +        }
 +      }
 +    }
 +    if(name === "group" || name === "interleave") {
 +      if(e[0].name === "empty") {
 +        if(e[1].name === "empty") {
 +          delete def.e;
 +          def.name = "empty"
 +        }else {
 +          name = def.name = e[1].name;
 +          def.names = e[1].names;
 +          e = def.e = e[1].e
 +        }
 +      }else {
 +        if(e[1].name === "empty") {
 +          name = def.name = e[0].name;
 +          def.names = e[0].names;
 +          e = def.e = e[0].e
 +        }
 +      }
 +    }
 +    if(name === "oneOrMore" && e[0].name === "empty") {
 +      delete def.e;
 +      def.name = "empty"
 +    }
 +    if(name === "attribute") {
 +      splitQNames(def)
 +    }
 +    if(name === "interleave") {
 +      if(e[0].name === "interleave") {
 +        if(e[1].name === "interleave") {
 +          e = def.e = e[0].e.concat(e[1].e)
 +        }else {
 +          e = def.e = [e[1]].concat(e[0].e)
 +        }
 +      }else {
 +        if(e[1].name === "interleave") {
 +          e = def.e = [e[0]].concat(e[1].e)
 +        }
 +      }
 +    }
 +  }
 +  function resolveElements(def, elements) {
 +    var i = 0, e;
 +    while(def.e && i < def.e.length) {
 +      e = def.e[i];
 +      if(e.name === "elementref") {
 +        e.id = e.id || 0;
 +        def.e[i] = elements[e.id]
 +      }else {
 +        if(e.name !== "element") {
 +          resolveElements(e, elements)
 +        }
 +      }
 +      i += 1
 +    }
 +  }
 +  function main(dom, callback) {
 +    var elements = [], grammar = parse(dom && dom.documentElement, elements, undefined), i, e, defines = {};
 +    for(i = 0;i < grammar.e.length;i += 1) {
 +      e = grammar.e[i];
 +      if(e.name === "define") {
 +        defines[e.a.name] = e
 +      }else {
 +        if(e.name === "start") {
 +          start = e
 +        }
 +      }
 +    }
 +    if(!start) {
 +      return[new RelaxNGParseError("No Relax NG start element was found.")]
 +    }
 +    resolveDefines(start, defines);
 +    for(i in defines) {
 +      if(defines.hasOwnProperty(i)) {
 +        resolveDefines(defines[i], defines)
 +      }
 +    }
 +    for(i = 0;i < elements.length;i += 1) {
 +      resolveDefines(elements[i], defines)
 +    }
 +    if(callback) {
 +      self.rootPattern = callback(start.e[0], elements)
 +    }
 +    resolveElements(start, elements);
 +    for(i = 0;i < elements.length;i += 1) {
 +      resolveElements(elements[i], elements)
 +    }
 +    self.start = start;
 +    self.elements = elements;
 +    self.nsmap = nsmap;
 +    return null
 +  }
 +  this.parseRelaxNGDOM = main
 +};
 +runtime.loadClass("xmldom.RelaxNGParser");
 +xmldom.RelaxNG = function RelaxNG() {
 +  var xmlnsns = "http://www.w3.org/2000/xmlns/", createChoice, createInterleave, createGroup, createAfter, createOneOrMore, createValue, createAttribute, createNameClass, createData, makePattern, notAllowed = {type:"notAllowed", nullable:false, hash:"notAllowed", textDeriv:function() {
 +    return notAllowed
 +  }, startTagOpenDeriv:function() {
 +    return notAllowed
 +  }, attDeriv:function() {
 +    return notAllowed
 +  }, startTagCloseDeriv:function() {
 +    return notAllowed
 +  }, endTagDeriv:function() {
 +    return notAllowed
 +  }}, empty = {type:"empty", nullable:true, hash:"empty", textDeriv:function() {
 +    return notAllowed
 +  }, startTagOpenDeriv:function() {
 +    return notAllowed
 +  }, attDeriv:function() {
 +    return notAllowed
 +  }, startTagCloseDeriv:function() {
 +    return empty
 +  }, endTagDeriv:function() {
 +    return notAllowed
 +  }}, text = {type:"text", nullable:true, hash:"text", textDeriv:function() {
 +    return text
 +  }, startTagOpenDeriv:function() {
 +    return notAllowed
 +  }, attDeriv:function() {
 +    return notAllowed
 +  }, startTagCloseDeriv:function() {
 +    return text
 +  }, endTagDeriv:function() {
 +    return notAllowed
 +  }}, applyAfter, childDeriv, rootPattern;
 +  function memoize0arg(func) {
 +    return function() {
 +      var cache;
 +      return function() {
 +        if(cache === undefined) {
 +          cache = func()
 +        }
 +        return cache
 +      }
 +    }()
 +  }
 +  function memoize1arg(type, func) {
 +    return function() {
 +      var cache = {}, cachecount = 0;
 +      return function(a) {
 +        var ahash = a.hash || a.toString(), v;
 +        v = cache[ahash];
 +        if(v !== undefined) {
 +          return v
 +        }
 +        cache[ahash] = v = func(a);
 +        v.hash = type + cachecount.toString();
 +        cachecount += 1;
 +        return v
 +      }
 +    }()
 +  }
 +  function memoizeNode(func) {
 +    return function() {
 +      var cache = {};
 +      return function(node) {
 +        var v, m;
 +        m = cache[node.localName];
 +        if(m === undefined) {
 +          cache[node.localName] = m = {}
 +        }else {
 +          v = m[node.namespaceURI];
 +          if(v !== undefined) {
 +            return v
 +          }
 +        }
 +        m[node.namespaceURI] = v = func(node);
 +        return v
 +      }
 +    }()
 +  }
 +  function memoize2arg(type, fastfunc, func) {
 +    return function() {
 +      var cache = {}, cachecount = 0;
 +      return function(a, b) {
 +        var v = fastfunc && fastfunc(a, b), ahash, bhash, m;
 +        if(v !== undefined) {
 +          return v
 +        }
 +        ahash = a.hash || a.toString();
 +        bhash = b.hash || b.toString();
 +        m = cache[ahash];
 +        if(m === undefined) {
 +          cache[ahash] = m = {}
 +        }else {
 +          v = m[bhash];
 +          if(v !== undefined) {
 +            return v
 +          }
 +        }
 +        m[bhash] = v = func(a, b);
 +        v.hash = type + cachecount.toString();
 +        cachecount += 1;
 +        return v
 +      }
 +    }()
 +  }
 +  function unorderedMemoize2arg(type, fastfunc, func) {
 +    return function() {
 +      var cache = {}, cachecount = 0;
 +      return function(a, b) {
 +        var v = fastfunc && fastfunc(a, b), ahash, bhash, m;
 +        if(v !== undefined) {
 +          return v
 +        }
 +        ahash = a.hash || a.toString();
 +        bhash = b.hash || b.toString();
 +        if(ahash < bhash) {
 +          m = ahash;
 +          ahash = bhash;
 +          bhash = m;
 +          m = a;
 +          a = b;
 +          b = m
 +        }
 +        m = cache[ahash];
 +        if(m === undefined) {
 +          cache[ahash] = m = {}
 +        }else {
 +          v = m[bhash];
 +          if(v !== undefined) {
 +            return v
 +          }
 +        }
 +        m[bhash] = v = func(a, b);
 +        v.hash = type + cachecount.toString();
 +        cachecount += 1;
 +        return v
 +      }
 +    }()
 +  }
 +  function getUniqueLeaves(leaves, pattern) {
 +    if(pattern.p1.type === "choice") {
 +      getUniqueLeaves(leaves, pattern.p1)
 +    }else {
 +      leaves[pattern.p1.hash] = pattern.p1
 +    }
 +    if(pattern.p2.type === "choice") {
 +      getUniqueLeaves(leaves, pattern.p2)
 +    }else {
 +      leaves[pattern.p2.hash] = pattern.p2
 +    }
 +  }
 +  createChoice = memoize2arg("choice", function(p1, p2) {
 +    if(p1 === notAllowed) {
 +      return p2
 +    }
 +    if(p2 === notAllowed) {
 +      return p1
 +    }
 +    if(p1 === p2) {
 +      return p1
 +    }
 +  }, function(p1, p2) {
 +    function makeChoice(p1, p2) {
 +      return{type:"choice", p1:p1, p2:p2, nullable:p1.nullable || p2.nullable, textDeriv:function(context, text) {
 +        return createChoice(p1.textDeriv(context, text), p2.textDeriv(context, text))
 +      }, startTagOpenDeriv:memoizeNode(function(node) {
 +        return createChoice(p1.startTagOpenDeriv(node), p2.startTagOpenDeriv(node))
 +      }), attDeriv:function(context, attribute) {
 +        return createChoice(p1.attDeriv(context, attribute), p2.attDeriv(context, attribute))
 +      }, startTagCloseDeriv:memoize0arg(function() {
 +        return createChoice(p1.startTagCloseDeriv(), p2.startTagCloseDeriv())
 +      }), endTagDeriv:memoize0arg(function() {
 +        return createChoice(p1.endTagDeriv(), p2.endTagDeriv())
 +      })}
 +    }
 +    var leaves = {}, i;
 +    getUniqueLeaves(leaves, {p1:p1, p2:p2});
 +    p1 = undefined;
 +    p2 = undefined;
 +    for(i in leaves) {
 +      if(leaves.hasOwnProperty(i)) {
 +        if(p1 === undefined) {
 +          p1 = leaves[i]
 +        }else {
 +          if(p2 === undefined) {
 +            p2 = leaves[i]
 +          }else {
 +            p2 = createChoice(p2, leaves[i])
 +          }
 +        }
 +      }
 +    }
 +    return makeChoice(p1, p2)
 +  });
 +  createInterleave = unorderedMemoize2arg("interleave", function(p1, p2) {
 +    if(p1 === notAllowed || p2 === notAllowed) {
 +      return notAllowed
 +    }
 +    if(p1 === empty) {
 +      return p2
 +    }
 +    if(p2 === empty) {
 +      return p1
 +    }
 +  }, function(p1, p2) {
 +    return{type:"interleave", p1:p1, p2:p2, nullable:p1.nullable && p2.nullable, textDeriv:function(context, text) {
 +      return createChoice(createInterleave(p1.textDeriv(context, text), p2), createInterleave(p1, p2.textDeriv(context, text)))
 +    }, startTagOpenDeriv:memoizeNode(function(node) {
 +      return createChoice(applyAfter(function(p) {
 +        return createInterleave(p, p2)
 +      }, p1.startTagOpenDeriv(node)), applyAfter(function(p) {
 +        return createInterleave(p1, p)
 +      }, p2.startTagOpenDeriv(node)))
 +    }), attDeriv:function(context, attribute) {
 +      return createChoice(createInterleave(p1.attDeriv(context, attribute), p2), createInterleave(p1, p2.attDeriv(context, attribute)))
 +    }, startTagCloseDeriv:memoize0arg(function() {
 +      return createInterleave(p1.startTagCloseDeriv(), p2.startTagCloseDeriv())
 +    })}
 +  });
 +  createGroup = memoize2arg("group", function(p1, p2) {
 +    if(p1 === notAllowed || p2 === notAllowed) {
 +      return notAllowed
 +    }
 +    if(p1 === empty) {
 +      return p2
 +    }
 +    if(p2 === empty) {
 +      return p1
 +    }
 +  }, function(p1, p2) {
 +    return{type:"group", p1:p1, p2:p2, nullable:p1.nullable && p2.nullable, textDeriv:function(context, text) {
 +      var p = createGroup(p1.textDeriv(context, text), p2);
 +      if(p1.nullable) {
 +        return createChoice(p, p2.textDeriv(context, text))
 +      }
 +      return p
 +    }, startTagOpenDeriv:function(node) {
 +      var x = applyAfter(function(p) {
 +        return createGroup(p, p2)
 +      }, p1.startTagOpenDeriv(node));
 +      if(p1.nullable) {
 +        return createChoice(x, p2.startTagOpenDeriv(node))
 +      }
 +      return x
 +    }, attDeriv:function(context, attribute) {
 +      return createChoice(createGroup(p1.attDeriv(context, attribute), p2), createGroup(p1, p2.attDeriv(context, attribute)))
 +    }, startTagCloseDeriv:memoize0arg(function() {
 +      return createGroup(p1.startTagCloseDeriv(), p2.startTagCloseDeriv())
 +    })}
 +  });
 +  createAfter = memoize2arg("after", function(p1, p2) {
 +    if(p1 === notAllowed || p2 === notAllowed) {
 +      return notAllowed
 +    }
 +  }, function(p1, p2) {
 +    return{type:"after", p1:p1, p2:p2, nullable:false, textDeriv:function(context, text) {
 +      return createAfter(p1.textDeriv(context, text), p2)
 +    }, startTagOpenDeriv:memoizeNode(function(node) {
 +      return applyAfter(function(p) {
 +        return createAfter(p, p2)
 +      }, p1.startTagOpenDeriv(node))
 +    }), attDeriv:function(context, attribute) {
 +      return createAfter(p1.attDeriv(context, attribute), p2)
 +    }, startTagCloseDeriv:memoize0arg(function() {
 +      return createAfter(p1.startTagCloseDeriv(), p2)
 +    }), endTagDeriv:memoize0arg(function() {
 +      return p1.nullable ? p2 : notAllowed
 +    })}
 +  });
 +  createOneOrMore = memoize1arg("oneormore", function(p) {
 +    if(p === notAllowed) {
 +      return notAllowed
 +    }
 +    return{type:"oneOrMore", p:p, nullable:p.nullable, textDeriv:function(context, text) {
 +      return createGroup(p.textDeriv(context, text), createChoice(this, empty))
 +    }, startTagOpenDeriv:function(node) {
 +      var oneOrMore = this;
 +      return applyAfter(function(pf) {
 +        return createGroup(pf, createChoice(oneOrMore, empty))
 +      }, p.startTagOpenDeriv(node))
 +    }, attDeriv:function(context, attribute) {
 +      var oneOrMore = this;
 +      return createGroup(p.attDeriv(context, attribute), createChoice(oneOrMore, empty))
 +    }, startTagCloseDeriv:memoize0arg(function() {
 +      return createOneOrMore(p.startTagCloseDeriv())
 +    })}
 +  });
 +  function createElement(nc, p) {
 +    return{type:"element", nc:nc, nullable:false, textDeriv:function() {
 +      return notAllowed
 +    }, startTagOpenDeriv:function(node) {
 +      if(nc.contains(node)) {
 +        return createAfter(p, empty)
 +      }
 +      return notAllowed
 +    }, attDeriv:function() {
 +      return notAllowed
 +    }, startTagCloseDeriv:function() {
 +      return this
 +    }}
 +  }
 +  function valueMatch(context, pattern, text) {
 +    return pattern.nullable && /^\s+$/.test(text) || pattern.textDeriv(context, text).nullable
 +  }
 +  createAttribute = memoize2arg("attribute", undefined, function(nc, p) {
 +    return{type:"attribute", nullable:false, nc:nc, p:p, attDeriv:function(context, attribute) {
 +      if(nc.contains(attribute) && valueMatch(context, p, attribute.nodeValue)) {
 +        return empty
 +      }
 +      return notAllowed
 +    }, startTagCloseDeriv:function() {
 +      return notAllowed
 +    }}
 +  });
 +  function createList() {
 +    return{type:"list", nullable:false, hash:"list", textDeriv:function() {
 +      return empty
 +    }}
 +  }
 +  createValue = memoize1arg("value", function(value) {
 +    return{type:"value", nullable:false, value:value, textDeriv:function(context, text) {
 +      return text === value ? empty : notAllowed
 +    }, attDeriv:function() {
 +      return notAllowed
 +    }, startTagCloseDeriv:function() {
 +      return this
 +    }}
 +  });
 +  createData = memoize1arg("data", function(type) {
 +    return{type:"data", nullable:false, dataType:type, textDeriv:function() {
 +      return empty
 +    }, attDeriv:function() {
 +      return notAllowed
 +    }, startTagCloseDeriv:function() {
 +      return this
 +    }}
 +  });
 +  applyAfter = function applyAfter(f, p) {
 +    var result;
 +    if(p.type === "after") {
 +      result = createAfter(p.p1, f(p.p2))
 +    }else {
 +      if(p.type === "choice") {
 +        result = createChoice(applyAfter(f, p.p1), applyAfter(f, p.p2))
 +      }else {
 +        result = p
 +      }
 +    }
 +    return result
 +  };
 +  function attsDeriv(context, pattern, attributes, position) {
 +    if(pattern === notAllowed) {
 +      return notAllowed
 +    }
 +    if(position >= attributes.length) {
 +      return pattern
 +    }
 +    if(position === 0) {
 +      position = 0
 +    }
 +    var a = attributes.item(position);
 +    while(a.namespaceURI === xmlnsns) {
 +      position += 1;
 +      if(position >= attributes.length) {
 +        return pattern
 +      }
 +      a = attributes.item(position)
 +    }
 +    a = attsDeriv(context, pattern.attDeriv(context, attributes.item(position)), attributes, position + 1);
 +    return a
 +  }
 +  function childrenDeriv(context, pattern, walker) {
 +    var element = walker.currentNode, childNode = walker.firstChild(), childNodes = [], i, p;
 +    while(childNode) {
 +      if(childNode.nodeType === Node.ELEMENT_NODE) {
 +        childNodes.push(childNode)
 +      }else {
 +        if(childNode.nodeType === Node.TEXT_NODE && !/^\s*$/.test(childNode.nodeValue)) {
 +          childNodes.push(childNode.nodeValue)
 +        }
 +      }
 +      childNode = walker.nextSibling()
 +    }
 +    if(childNodes.length === 0) {
 +      childNodes = [""]
 +    }
 +    p = pattern;
 +    for(i = 0;p !== notAllowed && i < childNodes.length;i += 1) {
 +      childNode = childNodes[i];
 +      if(typeof childNode === "string") {
 +        if(/^\s*$/.test(childNode)) {
 +          p = createChoice(p, p.textDeriv(context, childNode))
 +        }else {
 +          p = p.textDeriv(context, childNode)
 +        }
 +      }else {
 +        walker.currentNode = childNode;
 +        p = childDeriv(context, p, walker)
 +      }
 +    }
 +    walker.currentNode = element;
 +    return p
 +  }
 +  childDeriv = function childDeriv(context, pattern, walker) {
 +    var childNode = walker.currentNode, p;
 +    p = pattern.startTagOpenDeriv(childNode);
 +    p = attsDeriv(context, p, childNode.attributes, 0);
 +    p = p.startTagCloseDeriv();
 +    p = childrenDeriv(context, p, walker);
 +    p = p.endTagDeriv();
 +    return p
 +  };
 +  function addNames(name, ns, pattern) {
 +    if(pattern.e[0].a) {
 +      name.push(pattern.e[0].text);
 +      ns.push(pattern.e[0].a.ns)
 +    }else {
 +      addNames(name, ns, pattern.e[0])
 +    }
 +    if(pattern.e[1].a) {
 +      name.push(pattern.e[1].text);
 +      ns.push(pattern.e[1].a.ns)
 +    }else {
 +      addNames(name, ns, pattern.e[1])
 +    }
 +  }
 +  createNameClass = function createNameClass(pattern) {
 +    var name, ns, hash, i, result;
 +    if(pattern.name === "name") {
 +      name = pattern.text;
 +      ns = pattern.a.ns;
 +      result = {name:name, ns:ns, hash:"{" + ns + "}" + name, contains:function(node) {
 +        return node.namespaceURI === ns && node.localName === name
 +      }}
 +    }else {
 +      if(pattern.name === "choice") {
 +        name = [];
 +        ns = [];
 +        addNames(name, ns, pattern);
 +        hash = "";
 +        for(i = 0;i < name.length;i += 1) {
 +          hash += "{" + ns[i] + "}" + name[i] + ","
 +        }
 +        result = {hash:hash, contains:function(node) {
 +          var j;
 +          for(j = 0;j < name.length;j += 1) {
 +            if(name[j] === node.localName && ns[j] === node.namespaceURI) {
 +              return true
 +            }
 +          }
 +          return false
 +        }}
 +      }else {
 +        result = {hash:"anyName", contains:function() {
 +          return true
 +        }}
 +      }
 +    }
 +    return result
 +  };
 +  function resolveElement(pattern, elements) {
 +    var element, p, i, hash;
 +    hash = "element" + pattern.id.toString();
 +    p = elements[pattern.id] = {hash:hash};
 +    element = createElement(createNameClass(pattern.e[0]), makePattern(pattern.e[1], elements));
 +    for(i in element) {
 +      if(element.hasOwnProperty(i)) {
 +        p[i] = element[i]
 +      }
 +    }
 +    return p
 +  }
 +  makePattern = function makePattern(pattern, elements) {
 +    var p, i;
 +    if(pattern.name === "elementref") {
 +      p = pattern.id || 0;
 +      pattern = elements[p];
 +      if(pattern.name !== undefined) {
 +        return resolveElement(pattern, elements)
 +      }
 +      return pattern
 +    }
 +    switch(pattern.name) {
 +      case "empty":
 +        return empty;
 +      case "notAllowed":
 +        return notAllowed;
 +      case "text":
 +        return text;
 +      case "choice":
 +        return createChoice(makePattern(pattern.e[0], elements), makePattern(pattern.e[1], elements));
 +      case "interleave":
 +        p = makePattern(pattern.e[0], elements);
 +        for(i = 1;i < pattern.e.length;i += 1) {
 +          p = createInterleave(p, makePattern(pattern.e[i], elements))
 +        }
 +        return p;
 +      case "group":
 +        return createGroup(makePattern(pattern.e[0], elements), makePattern(pattern.e[1], elements));
 +      case "oneOrMore":
 +        return createOneOrMore(makePattern(pattern.e[0], elements));
 +      case "attribute":
 +        return createAttribute(createNameClass(pattern.e[0]), makePattern(pattern.e[1], elements));
 +      case "value":
 +        return createValue(pattern.text);
 +      case "data":
 +        p = pattern.a && pattern.a.type;
 +        if(p === undefined) {
 +          p = ""
 +        }
 +        return createData(p);
 +      case "list":
 +        return createList()
 +    }
 +    throw"No support for " + pattern.name;
 +  };
 +  this.makePattern = function(pattern, elements) {
 +    var copy = {}, i;
 +    for(i in elements) {
 +      if(elements.hasOwnProperty(i)) {
 +        copy[i] = elements[i]
 +      }
 +    }
 +    i = makePattern(pattern, copy);
 +    return i
 +  };
 +  this.validate = function validate(walker, callback) {
 +    var errors;
 +    walker.currentNode = walker.root;
 +    errors = childDeriv(null, rootPattern, walker);
 +    if(!errors.nullable) {
 +      runtime.log("Error in Relax NG validation: " + errors);
 +      callback(["Error in Relax NG validation: " + errors])
 +    }else {
 +      callback(null)
 +    }
 +  };
 +  this.init = function init(rootPattern1) {
 +    rootPattern = rootPattern1
 +  }
 +};
 +runtime.loadClass("xmldom.RelaxNGParser");
 +xmldom.RelaxNG2 = function RelaxNG2() {
 +  var start, validateNonEmptyPattern, nsmap;
 +  function RelaxNGParseError(error, context) {
 +    this.message = function() {
 +      if(context) {
 +        error += context.nodeType === Node.ELEMENT_NODE ? " Element " : " Node ";
 +        error += context.nodeName;
 +        if(context.nodeValue) {
 +          error += " with value '" + context.nodeValue + "'"
 +        }
 +        error += "."
 +      }
 +      return error
 +    }
 +  }
 +  function validateOneOrMore(elementdef, walker, element) {
 +    var node, i = 0, err;
 +    do {
 +      node = walker.currentNode;
 +      err = validateNonEmptyPattern(elementdef.e[0], walker, element);
 +      i += 1
 +    }while(!err && node !== walker.currentNode);
 +    if(i > 1) {
 +      walker.currentNode = node;
 +      return null
 +    }
 +    return err
 +  }
 +  function qName(node) {
 +    return nsmap[node.namespaceURI] + ":" + node.localName
 +  }
 +  function isWhitespace(node) {
 +    return node && (node.nodeType === Node.TEXT_NODE && /^\s+$/.test(node.nodeValue))
 +  }
 +  function validatePattern(elementdef, walker, element, data) {
 +    if(elementdef.name === "empty") {
 +      return null
 +    }
 +    return validateNonEmptyPattern(elementdef, walker, element, data)
 +  }
 +  function validateAttribute(elementdef, walker, element) {
 +    if(elementdef.e.length !== 2) {
 +      throw"Attribute with wrong # of elements: " + elementdef.e.length;
 +    }
 +    var att, a, l = elementdef.localnames.length, i;
 +    for(i = 0;i < l;i += 1) {
 +      a = element.getAttributeNS(elementdef.namespaces[i], elementdef.localnames[i]);
 +      if(a === "" && !element.hasAttributeNS(elementdef.namespaces[i], elementdef.localnames[i])) {
 +        a = undefined
 +      }
 +      if(att !== undefined && a !== undefined) {
 +        return[new RelaxNGParseError("Attribute defined too often.", element)]
 +      }
 +      att = a
 +    }
 +    if(att === undefined) {
 +      return[new RelaxNGParseError("Attribute not found: " + elementdef.names, element)]
 +    }
 +    return validatePattern(elementdef.e[1], walker, element, att)
 +  }
 +  function validateTop(elementdef, walker, element) {
 +    return validatePattern(elementdef, walker, element)
 +  }
 +  function validateElement(elementdef, walker) {
 +    if(elementdef.e.length !== 2) {
 +      throw"Element with wrong # of elements: " + elementdef.e.length;
 +    }
 +    var node = walker.currentNode, type = node ? node.nodeType : 0, error = null;
 +    while(type > Node.ELEMENT_NODE) {
 +      if(type !== Node.COMMENT_NODE && (type !== Node.TEXT_NODE || !/^\s+$/.test(walker.currentNode.nodeValue))) {
 +        return[new RelaxNGParseError("Not allowed node of type " + type + ".")]
 +      }
 +      node = walker.nextSibling();
 +      type = node ? node.nodeType : 0
 +    }
 +    if(!node) {
 +      return[new RelaxNGParseError("Missing element " + elementdef.names)]
 +    }
 +    if(elementdef.names && elementdef.names.indexOf(qName(node)) === -1) {
 +      return[new RelaxNGParseError("Found " + node.nodeName + " instead of " + elementdef.names + ".", node)]
 +    }
 +    if(walker.firstChild()) {
 +      error = validateTop(elementdef.e[1], walker, node);
 +      while(walker.nextSibling()) {
 +        type = walker.currentNode.nodeType;
 +        if(!isWhitespace(walker.currentNode) && type !== Node.COMMENT_NODE) {
 +          return[new RelaxNGParseError("Spurious content.", walker.currentNode)]
 +        }
 +      }
 +      if(walker.parentNode() !== node) {
 +        return[new RelaxNGParseError("Implementation error.")]
 +      }
 +    }else {
 +      error = validateTop(elementdef.e[1], walker, node)
 +    }
 +    node = walker.nextSibling();
 +    return error
 +  }
 +  function validateChoice(elementdef, walker, element, data) {
 +    if(elementdef.e.length !== 2) {
 +      throw"Choice with wrong # of options: " + elementdef.e.length;
 +    }
 +    var node = walker.currentNode, err;
 +    if(elementdef.e[0].name === "empty") {
 +      err = validateNonEmptyPattern(elementdef.e[1], walker, element, data);
 +      if(err) {
 +        walker.currentNode = node
 +      }
 +      return null
 +    }
 +    err = validatePattern(elementdef.e[0], walker, element, data);
 +    if(err) {
 +      walker.currentNode = node;
 +      err = validateNonEmptyPattern(elementdef.e[1], walker, element, data)
 +    }
 +    return err
 +  }
 +  function validateInterleave(elementdef, walker, element) {
 +    var l = elementdef.e.length, n = [l], err, i, todo = l, donethisround, node, subnode, e;
 +    while(todo > 0) {
 +      donethisround = 0;
 +      node = walker.currentNode;
 +      for(i = 0;i < l;i += 1) {
 +        subnode = walker.currentNode;
 +        if(n[i] !== true && n[i] !== subnode) {
 +          e = elementdef.e[i];
 +          err = validateNonEmptyPattern(e, walker, element);
 +          if(err) {
 +            walker.currentNode = subnode;
 +            if(n[i] === undefined) {
 +              n[i] = false
 +            }
 +          }else {
 +            if(subnode === walker.currentNode || (e.name === "oneOrMore" || e.name === "choice" && (e.e[0].name === "oneOrMore" || e.e[1].name === "oneOrMore"))) {
 +              donethisround += 1;
 +              n[i] = subnode
 +            }else {
 +              donethisround += 1;
 +              n[i] = true
 +            }
 +          }
 +        }
 +      }
 +      if(node === walker.currentNode && donethisround === todo) {
 +        return null
 +      }
 +      if(donethisround === 0) {
 +        for(i = 0;i < l;i += 1) {
 +          if(n[i] === false) {
 +            return[new RelaxNGParseError("Interleave does not match.", element)]
 +          }
 +        }
 +        return null
 +      }
 +      todo = 0;
 +      for(i = 0;i < l;i += 1) {
 +        if(n[i] !== true) {
 +          todo += 1
 +        }
 +      }
 +    }
 +    return null
 +  }
 +  function validateGroup(elementdef, walker, element) {
 +    if(elementdef.e.length !== 2) {
 +      throw"Group with wrong # of members: " + elementdef.e.length;
 +    }
 +    return validateNonEmptyPattern(elementdef.e[0], walker, element) || validateNonEmptyPattern(elementdef.e[1], walker, element)
 +  }
 +  function validateText(elementdef, walker, element) {
 +    var node = walker.currentNode, type = node ? node.nodeType : 0;
 +    while(node !== element && type !== 3) {
 +      if(type === 1) {
 +        return[new RelaxNGParseError("Element not allowed here.", node)]
 +      }
 +      node = walker.nextSibling();
 +      type = node ? node.nodeType : 0
 +    }
 +    walker.nextSibling();
 +    return null
 +  }
 +  validateNonEmptyPattern = function validateNonEmptyPattern(elementdef, walker, element, data) {
 +    var name = elementdef.name, err = null;
 +    if(name === "text") {
 +      err = validateText(elementdef, walker, element)
 +    }else {
 +      if(name === "data") {
 +        err = null
 +      }else {
 +        if(name === "value") {
 +          if(data !== elementdef.text) {
 +            err = [new RelaxNGParseError("Wrong value, should be '" + elementdef.text + "', not '" + data + "'", element)]
 +          }
 +        }else {
 +          if(name === "list") {
 +            err = null
 +          }else {
 +            if(name === "attribute") {
 +              err = validateAttribute(elementdef, walker, element)
 +            }else {
 +              if(name === "element") {
 +                err = validateElement(elementdef, walker)
 +              }else {
 +                if(name === "oneOrMore") {
 +                  err = validateOneOrMore(elementdef, walker, element)
 +                }else {
 +                  if(name === "choice") {
 +                    err = validateChoice(elementdef, walker, element, data)
 +                  }else {
 +                    if(name === "group") {
 +                      err = validateGroup(elementdef, walker, element)
 +                    }else {
 +                      if(name === "interleave") {
 +                        err = validateInterleave(elementdef, walker, element)
 +                      }else {
 +                        throw name + " not allowed in nonEmptyPattern.";
 +                      }
 +                    }
 +                  }
 +                }
 +              }
 +            }
 +          }
 +        }
 +      }
 +    }
 +    return err
 +  };
 +  this.validate = function validate(walker, callback) {
 +    walker.currentNode = walker.root;
 +    var errors = validatePattern(start.e[0], walker, walker.root);
 +    callback(errors)
 +  };
 +  this.init = function init(start1, nsmap1) {
 +    start = start1;
 +    nsmap = nsmap1
 +  }
 +};
 +xmldom.XPathIterator = function XPathIterator() {
 +};
 +xmldom.XPath = function() {
 +  var createXPathPathIterator, parsePredicates;
 +  function isSmallestPositive(a, b, c) {
 +    return a !== -1 && ((a < b || b === -1) && (a < c || c === -1))
 +  }
 +  function parseXPathStep(xpath, pos, end, steps) {
 +    var location = "", predicates = [], brapos = xpath.indexOf("[", pos), slapos = xpath.indexOf("/", pos), eqpos = xpath.indexOf("=", pos);
 +    if(isSmallestPositive(slapos, brapos, eqpos)) {
 +      location = xpath.substring(pos, slapos);
 +      pos = slapos + 1
 +    }else {
 +      if(isSmallestPositive(brapos, slapos, eqpos)) {
 +        location = xpath.substring(pos, brapos);
 +        pos = parsePredicates(xpath, brapos, predicates)
 +      }else {
 +        if(isSmallestPositive(eqpos, slapos, brapos)) {
 +          location = xpath.substring(pos, eqpos);
 +          pos = eqpos
 +        }else {
 +          location = xpath.substring(pos, end);
 +          pos = end
 +        }
 +      }
 +    }
 +    steps.push({location:location, predicates:predicates});
 +    return pos
 +  }
 +  function parseXPath(xpath) {
 +    var steps = [], p = 0, end = xpath.length, value;
 +    while(p < end) {
 +      p = parseXPathStep(xpath, p, end, steps);
 +      if(p < end && xpath[p] === "=") {
 +        value = xpath.substring(p + 1, end);
 +        if(value.length > 2 && (value[0] === "'" || value[0] === '"')) {
 +          value = value.slice(1, value.length - 1)
 +        }else {
 +          try {
 +            value = parseInt(value, 10)
 +          }catch(ignore) {
 +          }
 +        }
 +        p = end
 +      }
 +    }
 +    return{steps:steps, value:value}
 +  }
 +  parsePredicates = function parsePredicates(xpath, start, predicates) {
 +    var pos = start, l = xpath.length, depth = 0;
 +    while(pos < l) {
 +      if(xpath[pos] === "]") {
 +        depth -= 1;
 +        if(depth <= 0) {
 +          predicates.push(parseXPath(xpath.substring(start, pos)))
 +        }
 +      }else {
 +        if(xpath[pos] === "[") {
 +          if(depth <= 0) {
 +            start = pos + 1
 +          }
 +          depth += 1
 +        }
 +      }
 +      pos += 1
 +    }
 +    return pos
 +  };
 +  xmldom.XPathIterator.prototype.next = function() {
 +  };
 +  xmldom.XPathIterator.prototype.reset = function() {
 +  };
 +  function XPathNodeIterator() {
 +    var node, done = false;
 +    this.setNode = function setNode(n) {
 +      node = n
 +    };
 +    this.reset = function() {
 +      done = false
 +    };
 +    this.next = function next() {
 +      var val = done ? null : node;
 +      done = true;
 +      return val
 +    }
 +  }
 +  function AttributeIterator(it, namespace, localName) {
 +    this.reset = function reset() {
 +      it.reset()
 +    };
 +    this.next = function next() {
 +      var node = it.next();
 +      while(node) {
 +        node = node.getAttributeNodeNS(namespace, localName);
 +        if(node) {
 +          return node
 +        }
 +        node = it.next()
 +      }
 +      return node
 +    }
 +  }
 +  function AllChildElementIterator(it, recurse) {
 +    var root = it.next(), node = null;
 +    this.reset = function reset() {
 +      it.reset();
 +      root = it.next();
 +      node = null
 +    };
 +    this.next = function next() {
 +      while(root) {
 +        if(node) {
 +          if(recurse && node.firstChild) {
 +            node = node.firstChild
 +          }else {
 +            while(!node.nextSibling && node !== root) {
 +              node = node.parentNode
 +            }
 +            if(node === root) {
 +              root = it.next()
 +            }else {
 +              node = node.nextSibling
 +            }
 +          }
 +        }else {
 +          do {
 +            node = root.firstChild;
 +            if(!node) {
 +              root = it.next()
 +            }
 +          }while(root && !node)
 +        }
 +        if(node && node.nodeType === Node.ELEMENT_NODE) {
 +          return node
 +        }
 +      }
 +      return null
 +    }
 +  }
 +  function ConditionIterator(it, condition) {
 +    this.reset = function reset() {
 +      it.reset()
 +    };
 +    this.next = function next() {
 +      var n = it.next();
 +      while(n && !condition(n)) {
 +        n = it.next()
 +      }
 +      return n
 +    }
 +  }
 +  function createNodenameFilter(it, name, namespaceResolver) {
 +    var s = name.split(":", 2), namespace = namespaceResolver(s[0]), localName = s[1];
 +    return new ConditionIterator(it, function(node) {
 +      return node.localName === localName && node.namespaceURI === namespace
 +    })
 +  }
 +  function createPredicateFilteredIterator(it, p, namespaceResolver) {
 +    var nit = new XPathNodeIterator, pit = createXPathPathIterator(nit, p, namespaceResolver), value = p.value;
 +    if(value === undefined) {
 +      return new ConditionIterator(it, function(node) {
 +        nit.setNode(node);
 +        pit.reset();
 +        return pit.next()
 +      })
 +    }
 +    return new ConditionIterator(it, function(node) {
 +      nit.setNode(node);
 +      pit.reset();
 +      var n = pit.next();
 +      return n && n.nodeValue === value
 +    })
 +  }
 +  createXPathPathIterator = function createXPathPathIterator(it, xpath, namespaceResolver) {
 +    var i, j, step, location, p;
 +    for(i = 0;i < xpath.steps.length;i += 1) {
 +      step = xpath.steps[i];
 +      location = step.location;
 +      if(location === "") {
 +        it = new AllChildElementIterator(it, false)
 +      }else {
 +        if(location[0] === "@") {
 +          p = location.slice(1).split(":", 2);
 +          it = new AttributeIterator(it, namespaceResolver(p[0]), p[1])
 +        }else {
 +          if(location !== ".") {
 +            it = new AllChildElementIterator(it, false);
 +            if(location.indexOf(":") !== -1) {
 +              it = createNodenameFilter(it, location, namespaceResolver)
 +            }
 +          }
 +        }
 +      }
 +      for(j = 0;j < step.predicates.length;j += 1) {
 +        p = step.predicates[j];
 +        it = createPredicateFilteredIterator(it, p, namespaceResolver)
 +      }
 +    }
 +    return it
 +  };
 +  function fallback(node, xpath, namespaceResolver) {
 +    var it = new XPathNodeIterator, i, nodelist, parsedXPath;
 +    it.setNode(node);
 +    parsedXPath = parseXPath(xpath);
 +    it = createXPathPathIterator(it, parsedXPath, namespaceResolver);
 +    nodelist = [];
 +    i = it.next();
 +    while(i) {
 +      nodelist.push(i);
 +      i = it.next()
 +    }
 +    return nodelist
 +  }
 +  function getODFElementsWithXPath(node, xpath, namespaceResolver) {
 +    var doc = node.ownerDocument, nodes, elements = [], n = null;
 +    if(!doc || !doc.evaluate) {
 +      elements = fallback(node, xpath, namespaceResolver)
 +    }else {
 +      nodes = doc.evaluate(xpath, node, namespaceResolver, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
 +      n = nodes.iterateNext();
 +      while(n !== null) {
 +        if(n.nodeType === Node.ELEMENT_NODE) {
 +          elements.push(n)
 +        }
 +        n = nodes.iterateNext()
 +      }
 +    }
 +    return elements
 +  }
 +  xmldom.XPath = function XPath() {
 +    this.getODFElementsWithXPath = getODFElementsWithXPath
 +  };
 +  return xmldom.XPath
 +}();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +gui.AnnotationViewManager = function AnnotationViewManager(odfCanvas, odfFragment, annotationsPane) {
 +  var annotations = [], doc = odfFragment.ownerDocument, odfUtils = new odf.OdfUtils, CONNECTOR_MARGIN = 30, NOTE_MARGIN = 20, window = runtime.getWindow();
 +  runtime.assert(Boolean(window), "Expected to be run in an environment which has a global window, like a browser.");
 +  function wrapAnnotation(annotation) {
 +    var annotationWrapper = doc.createElement("div"), annotationNote = doc.createElement("div"), connectorHorizontal = doc.createElement("div"), connectorAngular = doc.createElement("div"), removeButton = doc.createElement("div"), annotationNode = annotation.node;
 +    annotationWrapper.className = "annotationWrapper";
 +    annotationNode.parentNode.insertBefore(annotationWrapper, annotationNode);
 +    annotationNote.className = "annotationNote";
 +    annotationNote.appendChild(annotationNode);
 +    removeButton.className = "annotationRemoveButton";
 +    annotationNote.appendChild(removeButton);
 +    connectorHorizontal.className = "annotationConnector horizontal";
 +    connectorAngular.className = "annotationConnector angular";
 +    annotationWrapper.appendChild(annotationNote);
 +    annotationWrapper.appendChild(connectorHorizontal);
 +    annotationWrapper.appendChild(connectorAngular)
 +  }
 +  function unwrapAnnotation(annotation) {
 +    var annotationNode = annotation.node, annotationWrapper = annotationNode.parentNode.parentNode;
 +    if(annotationWrapper.localName === "div") {
 +      annotationWrapper.parentNode.insertBefore(annotationNode, annotationWrapper);
 +      annotationWrapper.parentNode.removeChild(annotationWrapper)
 +    }
 +  }
 +  function highlightAnnotation(annotation) {
 +    var annotationNode = annotation.node, annotationEnd = annotation.end, range = doc.createRange(), textNodes;
 +    if(annotationEnd) {
 +      range.setStart(annotationNode, annotationNode.childNodes.length);
 +      range.setEnd(annotationEnd, 0);
 +      textNodes = odfUtils.getTextNodes(range, false);
 +      textNodes.forEach(function(n) {
 +        var container = doc.createElement("span");
 +        container.className = "annotationHighlight";
 +        container.setAttribute("annotation", annotationNode.getAttributeNS(odf.Namespaces.officens, "name"));
 +        n.parentNode.insertBefore(container, n);
 +        container.appendChild(n)
 +      })
 +    }
 +    range.detach()
 +  }
 +  function unhighlightAnnotation(annotation) {
 +    var annotationName = annotation.node.getAttributeNS(odf.Namespaces.officens, "name"), highlightSpans = doc.querySelectorAll('span.annotationHighlight[annotation="' + annotationName + '"]'), i, container;
 +    for(i = 0;i < highlightSpans.length;i += 1) {
 +      container = highlightSpans[i];
 +      while(container.firstChild) {
 +        container.parentNode.insertBefore(container.firstChild, container)
 +      }
 +      container.parentNode.removeChild(container)
 +    }
 +  }
 +  function lineDistance(point1, point2) {
 +    var xs = 0, ys = 0;
 +    xs = point2.x - point1.x;
 +    xs = xs * xs;
 +    ys = point2.y - point1.y;
 +    ys = ys * ys;
 +    return Math.sqrt(xs + ys)
 +  }
 +  function renderAnnotation(annotation) {
 +    var annotationNote = annotation.node.parentNode, connectorHorizontal = annotationNote.nextSibling, connectorAngular = connectorHorizontal.nextSibling, annotationWrapper = annotationNote.parentNode, connectorAngle = 0, previousAnnotation = annotations[annotations.indexOf(annotation) - 1], previousRect, creatorNode = annotation.node.getElementsByTagNameNS(odf.Namespaces.dcns, "creator")[0], creatorName, zoomLevel = odfCanvas.getZoomLevel();
 +    annotationNote.style.left = (annotationsPane.getBoundingClientRect().left - annotationWrapper.getBoundingClientRect().left) / zoomLevel + "px";
 +    annotationNote.style.width = annotationsPane.getBoundingClientRect().width / zoomLevel + "px";
 +    connectorHorizontal.style.width = parseFloat(annotationNote.style.left) - CONNECTOR_MARGIN + "px";
 +    if(previousAnnotation) {
 +      previousRect = previousAnnotation.node.parentNode.getBoundingClientRect();
 +      if((annotationWrapper.getBoundingClientRect().top - previousRect.bottom) / zoomLevel <= NOTE_MARGIN) {
 +        annotationNote.style.top = Math.abs(annotationWrapper.getBoundingClientRect().top - previousRect.bottom) / zoomLevel + NOTE_MARGIN + "px"
 +      }else {
 +        annotationNote.style.top = "0px"
 +      }
 +    }
 +    connectorAngular.style.left = connectorHorizontal.getBoundingClientRect().width / zoomLevel + "px";
 +    connectorAngular.style.width = lineDistance({x:connectorAngular.getBoundingClientRect().left / zoomLevel, y:connectorAngular.getBoundingClientRect().top / zoomLevel}, {x:annotationNote.getBoundingClientRect().left / zoomLevel, y:annotationNote.getBoundingClientRect().top / zoomLevel}) + "px";
 +    connectorAngle = Math.asin((annotationNote.getBoundingClientRect().top - connectorAngular.getBoundingClientRect().top) / (zoomLevel * parseFloat(connectorAngular.style.width)));
 +    connectorAngular.style.transform = "rotate(" + connectorAngle + "rad)";
 +    connectorAngular.style.MozTransform = "rotate(" + connectorAngle + "rad)";
 +    connectorAngular.style.WebkitTransform = "rotate(" + connectorAngle + "rad)";
 +    connectorAngular.style.msTransform = "rotate(" + connectorAngle + "rad)";
 +    if(creatorNode) {
 +      creatorName = window.getComputedStyle((creatorNode), ":before").content;
 +      if(creatorName && creatorName !== "none") {
 +        if(/^["'].*["']$/.test(creatorName)) {
 +          creatorName = creatorName.substring(1, creatorName.length - 1)
 +        }
 +        if(creatorNode.firstChild) {
 +          creatorNode.firstChild.nodeValue = creatorName
 +        }else {
 +          creatorNode.appendChild(doc.createTextNode(creatorName))
 +        }
 +      }
 +    }
 +  }
 +  function showAnnotationsPane(show) {
 +    var sizer = odfCanvas.getSizer();
 +    if(show) {
 +      annotationsPane.style.display = "inline-block";
 +      sizer.style.paddingRight = window.getComputedStyle(annotationsPane).width
 +    }else {
 +      annotationsPane.style.display = "none";
 +      sizer.style.paddingRight = 0
 +    }
 +    odfCanvas.refreshSize()
 +  }
 +  function sortAnnotations() {
 +    annotations.sort(function(a, b) {
 +      if(a.node.compareDocumentPosition(b.node) === Node.DOCUMENT_POSITION_FOLLOWING) {
 +        return-1
 +      }
 +      return 1
 +    })
 +  }
 +  function rerenderAnnotations() {
 +    var i;
 +    for(i = 0;i < annotations.length;i += 1) {
 +      renderAnnotation(annotations[i])
 +    }
 +  }
 +  this.rerenderAnnotations = rerenderAnnotations;
 +  function addAnnotation(annotation) {
 +    showAnnotationsPane(true);
 +    annotations.push({node:annotation.node, end:annotation.end});
 +    sortAnnotations();
 +    wrapAnnotation(annotation);
 +    if(annotation.end) {
 +      highlightAnnotation(annotation)
 +    }
 +    rerenderAnnotations()
 +  }
 +  this.addAnnotation = addAnnotation;
 +  function forgetAnnotation(annotation) {
 +    var index = annotations.indexOf(annotation);
 +    unwrapAnnotation(annotation);
 +    unhighlightAnnotation(annotation);
 +    if(index !== -1) {
 +      annotations.splice(index, 1)
 +    }
 +    if(annotations.length === 0) {
 +      showAnnotationsPane(false)
 +    }
 +  }
 +  function forgetAnnotations() {
 +    while(annotations.length) {
 +      forgetAnnotation(annotations[0])
 +    }
 +  }
 +  this.forgetAnnotations = forgetAnnotations
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +odf.OdfNodeFilter = function OdfNodeFilter() {
 +  this.acceptNode = function(node) {
 +    var result;
 +    if(node.namespaceURI === "http://www.w3.org/1999/xhtml") {
 +      result = NodeFilter.FILTER_SKIP
 +    }else {
 +      if(node.namespaceURI && node.namespaceURI.match(/^urn:webodf:/)) {
 +        result = NodeFilter.FILTER_REJECT
 +      }else {
 +        result = NodeFilter.FILTER_ACCEPT
 +      }
 +    }
 +    return result
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +odf.Namespaces = function() {
 +  var dbns = "urn:oasis:names:tc:opendocument:xmlns:database:1.0", dcns = "http://purl.org/dc/elements/1.1/", dr3dns = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0", drawns = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0", chartns = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0", fons = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0", formns = "urn:oasis:names:tc:opendocument:xmlns:form:1.0", numberns = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0", offi [...]
 +  presentationns = "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0", stylens = "urn:oasis:names:tc:opendocument:xmlns:style:1.0", svgns = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0", tablens = "urn:oasis:names:tc:opendocument:xmlns:table:1.0", textns = "urn:oasis:names:tc:opendocument:xmlns:text:1.0", xlinkns = "http://www.w3.org/1999/xlink", xmlns = "http://www.w3.org/XML/1998/namespace", namespaceMap = {"db":dbns, "dc":dcns, "dr3d":dr3dns, "draw":drawns, "chart" [...]
 +  "fo":fons, "form":formns, "numberns":numberns, "office":officens, "presentation":presentationns, "style":stylens, "svg":svgns, "table":tablens, "text":textns, "xlink":xlinkns, "xml":xmlns}, namespaces;
 +  function forEachPrefix(cb) {
 +    var prefix;
 +    for(prefix in namespaceMap) {
 +      if(namespaceMap.hasOwnProperty(prefix)) {
 +        cb(prefix, namespaceMap[prefix])
 +      }
 +    }
 +  }
 +  function resolvePrefix(prefix) {
 +    return namespaceMap[prefix] || null
 +  }
 +  resolvePrefix.lookupNamespaceURI = resolvePrefix;
 +  namespaces = function Namespaces() {
 +  };
 +  namespaces.forEachPrefix = forEachPrefix;
 +  namespaces.resolvePrefix = resolvePrefix;
 +  namespaces.namespaceMap = namespaceMap;
 +  namespaces.dbns = dbns;
 +  namespaces.dcns = dcns;
 +  namespaces.dr3dns = dr3dns;
 +  namespaces.drawns = drawns;
 +  namespaces.chartns = chartns;
 +  namespaces.fons = fons;
 +  namespaces.formns = formns;
 +  namespaces.numberns = numberns;
 +  namespaces.officens = officens;
 +  namespaces.presentationns = presentationns;
 +  namespaces.stylens = stylens;
 +  namespaces.svgns = svgns;
 +  namespaces.tablens = tablens;
 +  namespaces.textns = textns;
 +  namespaces.xlinkns = xlinkns;
 +  namespaces.xmlns = xmlns;
 +  return namespaces
 +}();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("xmldom.XPath");
 +runtime.loadClass("odf.Namespaces");
 +odf.StyleInfo = function StyleInfo() {
 +  var chartns = odf.Namespaces.chartns, dbns = odf.Namespaces.dbns, dr3dns = odf.Namespaces.dr3dns, drawns = odf.Namespaces.drawns, formns = odf.Namespaces.formns, numberns = odf.Namespaces.numberns, officens = odf.Namespaces.officens, presentationns = odf.Namespaces.presentationns, stylens = odf.Namespaces.stylens, tablens = odf.Namespaces.tablens, textns = odf.Namespaces.textns, nsprefixes = {"urn:oasis:names:tc:opendocument:xmlns:chart:1.0":"chart:", "urn:oasis:names:tc:opendocument: [...]
 +  "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0":"dr3d:", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0":"draw:", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0":"fo:", "urn:oasis:names:tc:opendocument:xmlns:form:1.0":"form:", "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0":"number:", "urn:oasis:names:tc:opendocument:xmlns:office:1.0":"office:", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0":"presentation:", "urn:oasis:names:tc:opendocument:xmlns:sty [...]
 +  "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0":"svg:", "urn:oasis:names:tc:opendocument:xmlns:table:1.0":"table:", "urn:oasis:names:tc:opendocument:xmlns:text:1.0":"chart:", "http://www.w3.org/XML/1998/namespace":"xml:"}, elementstyles = {"text":[{ens:stylens, en:"tab-stop", ans:stylens, a:"leader-text-style"}, {ens:stylens, en:"drop-cap", ans:stylens, a:"style-name"}, {ens:textns, en:"notes-configuration", ans:textns, a:"citation-body-style-name"}, {ens:textns, en:"notes- [...]
 +  ans:textns, a:"citation-style-name"}, {ens:textns, en:"a", ans:textns, a:"style-name"}, {ens:textns, en:"alphabetical-index", ans:textns, a:"style-name"}, {ens:textns, en:"linenumbering-configuration", ans:textns, a:"style-name"}, {ens:textns, en:"list-level-style-number", ans:textns, a:"style-name"}, {ens:textns, en:"ruby-text", ans:textns, a:"style-name"}, {ens:textns, en:"span", ans:textns, a:"style-name"}, {ens:textns, en:"a", ans:textns, a:"visited-style-name"}, {ens:stylens, en: [...]
 +  ans:stylens, a:"text-line-through-text-style"}, {ens:textns, en:"alphabetical-index-source", ans:textns, a:"main-entry-style-name"}, {ens:textns, en:"index-entry-bibliography", ans:textns, a:"style-name"}, {ens:textns, en:"index-entry-chapter", ans:textns, a:"style-name"}, {ens:textns, en:"index-entry-link-end", ans:textns, a:"style-name"}, {ens:textns, en:"index-entry-link-start", ans:textns, a:"style-name"}, {ens:textns, en:"index-entry-page-number", ans:textns, a:"style-name"}, {en [...]
 +  en:"index-entry-span", ans:textns, a:"style-name"}, {ens:textns, en:"index-entry-tab-stop", ans:textns, a:"style-name"}, {ens:textns, en:"index-entry-text", ans:textns, a:"style-name"}, {ens:textns, en:"index-title-template", ans:textns, a:"style-name"}, {ens:textns, en:"list-level-style-bullet", ans:textns, a:"style-name"}, {ens:textns, en:"outline-level-style", ans:textns, a:"style-name"}], "paragraph":[{ens:drawns, en:"caption", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"ci [...]
 +  a:"text-style-name"}, {ens:drawns, en:"connector", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"control", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"custom-shape", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"ellipse", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"frame", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"line", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"measure", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"path", ans:drawns, a: [...]
 +  {ens:drawns, en:"polygon", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"polyline", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"rect", ans:drawns, a:"text-style-name"}, {ens:drawns, en:"regular-polygon", ans:drawns, a:"text-style-name"}, {ens:officens, en:"annotation", ans:drawns, a:"text-style-name"}, {ens:formns, en:"column", ans:formns, a:"text-style-name"}, {ens:stylens, en:"style", ans:stylens, a:"next-style-name"}, {ens:tablens, en:"body", ans:tablens, a:"paragraph-s [...]
 +  {ens:tablens, en:"even-columns", ans:tablens, a:"paragraph-style-name"}, {ens:tablens, en:"even-rows", ans:tablens, a:"paragraph-style-name"}, {ens:tablens, en:"first-column", ans:tablens, a:"paragraph-style-name"}, {ens:tablens, en:"first-row", ans:tablens, a:"paragraph-style-name"}, {ens:tablens, en:"last-column", ans:tablens, a:"paragraph-style-name"}, {ens:tablens, en:"last-row", ans:tablens, a:"paragraph-style-name"}, {ens:tablens, en:"odd-columns", ans:tablens, a:"paragraph-styl [...]
 +  {ens:tablens, en:"odd-rows", ans:tablens, a:"paragraph-style-name"}, {ens:textns, en:"notes-configuration", ans:textns, a:"default-style-name"}, {ens:textns, en:"alphabetical-index-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"bibliography-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"h", ans:textns, a:"style-name"}, {ens:textns, en:"illustration-index-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"index-source-style", ans:textns, a:"s [...]
 +  {ens:textns, en:"object-index-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"p", ans:textns, a:"style-name"}, {ens:textns, en:"table-index-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"table-of-content-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"table-index-entry-template", ans:textns, a:"style-name"}, {ens:textns, en:"user-index-entry-template", ans:textns, a:"style-name"}, {ens:stylens, en:"page-layout-properties", ans:stylens, a:" [...]
 +  "chart":[{ens:chartns, en:"axis", ans:chartns, a:"style-name"}, {ens:chartns, en:"chart", ans:chartns, a:"style-name"}, {ens:chartns, en:"data-label", ans:chartns, a:"style-name"}, {ens:chartns, en:"data-point", ans:chartns, a:"style-name"}, {ens:chartns, en:"equation", ans:chartns, a:"style-name"}, {ens:chartns, en:"error-indicator", ans:chartns, a:"style-name"}, {ens:chartns, en:"floor", ans:chartns, a:"style-name"}, {ens:chartns, en:"footer", ans:chartns, a:"style-name"}, {ens:char [...]
 +  ans:chartns, a:"style-name"}, {ens:chartns, en:"legend", ans:chartns, a:"style-name"}, {ens:chartns, en:"mean-value", ans:chartns, a:"style-name"}, {ens:chartns, en:"plot-area", ans:chartns, a:"style-name"}, {ens:chartns, en:"regression-curve", ans:chartns, a:"style-name"}, {ens:chartns, en:"series", ans:chartns, a:"style-name"}, {ens:chartns, en:"stock-gain-marker", ans:chartns, a:"style-name"}, {ens:chartns, en:"stock-loss-marker", ans:chartns, a:"style-name"}, {ens:chartns, en:"sto [...]
 +  ans:chartns, a:"style-name"}, {ens:chartns, en:"subtitle", ans:chartns, a:"style-name"}, {ens:chartns, en:"title", ans:chartns, a:"style-name"}, {ens:chartns, en:"wall", ans:chartns, a:"style-name"}], "section":[{ens:textns, en:"alphabetical-index", ans:textns, a:"style-name"}, {ens:textns, en:"bibliography", ans:textns, a:"style-name"}, {ens:textns, en:"illustration-index", ans:textns, a:"style-name"}, {ens:textns, en:"index-title", ans:textns, a:"style-name"}, {ens:textns, en:"objec [...]
 +  ans:textns, a:"style-name"}, {ens:textns, en:"section", ans:textns, a:"style-name"}, {ens:textns, en:"table-of-content", ans:textns, a:"style-name"}, {ens:textns, en:"table-index", ans:textns, a:"style-name"}, {ens:textns, en:"user-index", ans:textns, a:"style-name"}], "ruby":[{ens:textns, en:"ruby", ans:textns, a:"style-name"}], "table":[{ens:dbns, en:"query", ans:dbns, a:"style-name"}, {ens:dbns, en:"table-representation", ans:dbns, a:"style-name"}, {ens:tablens, en:"background", an [...]
 +  a:"style-name"}, {ens:tablens, en:"table", ans:tablens, a:"style-name"}], "table-column":[{ens:dbns, en:"column", ans:dbns, a:"style-name"}, {ens:tablens, en:"table-column", ans:tablens, a:"style-name"}], "table-row":[{ens:dbns, en:"query", ans:dbns, a:"default-row-style-name"}, {ens:dbns, en:"table-representation", ans:dbns, a:"default-row-style-name"}, {ens:tablens, en:"table-row", ans:tablens, a:"style-name"}], "table-cell":[{ens:dbns, en:"column", ans:dbns, a:"default-cell-style-n [...]
 +  en:"table-column", ans:tablens, a:"default-cell-style-name"}, {ens:tablens, en:"table-row", ans:tablens, a:"default-cell-style-name"}, {ens:tablens, en:"body", ans:tablens, a:"style-name"}, {ens:tablens, en:"covered-table-cell", ans:tablens, a:"style-name"}, {ens:tablens, en:"even-columns", ans:tablens, a:"style-name"}, {ens:tablens, en:"covered-table-cell", ans:tablens, a:"style-name"}, {ens:tablens, en:"even-columns", ans:tablens, a:"style-name"}, {ens:tablens, en:"even-rows", ans:t [...]
 +  {ens:tablens, en:"first-column", ans:tablens, a:"style-name"}, {ens:tablens, en:"first-row", ans:tablens, a:"style-name"}, {ens:tablens, en:"last-column", ans:tablens, a:"style-name"}, {ens:tablens, en:"last-row", ans:tablens, a:"style-name"}, {ens:tablens, en:"odd-columns", ans:tablens, a:"style-name"}, {ens:tablens, en:"odd-rows", ans:tablens, a:"style-name"}, {ens:tablens, en:"table-cell", ans:tablens, a:"style-name"}], "graphic":[{ens:dr3dns, en:"cube", ans:drawns, a:"style-name"} [...]
 +  en:"extrude", ans:drawns, a:"style-name"}, {ens:dr3dns, en:"rotate", ans:drawns, a:"style-name"}, {ens:dr3dns, en:"scene", ans:drawns, a:"style-name"}, {ens:dr3dns, en:"sphere", ans:drawns, a:"style-name"}, {ens:drawns, en:"caption", ans:drawns, a:"style-name"}, {ens:drawns, en:"circle", ans:drawns, a:"style-name"}, {ens:drawns, en:"connector", ans:drawns, a:"style-name"}, {ens:drawns, en:"control", ans:drawns, a:"style-name"}, {ens:drawns, en:"custom-shape", ans:drawns, a:"style-name [...]
 +  en:"ellipse", ans:drawns, a:"style-name"}, {ens:drawns, en:"frame", ans:drawns, a:"style-name"}, {ens:drawns, en:"g", ans:drawns, a:"style-name"}, {ens:drawns, en:"line", ans:drawns, a:"style-name"}, {ens:drawns, en:"measure", ans:drawns, a:"style-name"}, {ens:drawns, en:"page-thumbnail", ans:drawns, a:"style-name"}, {ens:drawns, en:"path", ans:drawns, a:"style-name"}, {ens:drawns, en:"polygon", ans:drawns, a:"style-name"}, {ens:drawns, en:"polyline", ans:drawns, a:"style-name"}, {ens [...]
 +  ans:drawns, a:"style-name"}, {ens:drawns, en:"regular-polygon", ans:drawns, a:"style-name"}, {ens:officens, en:"annotation", ans:drawns, a:"style-name"}], "presentation":[{ens:dr3dns, en:"cube", ans:presentationns, a:"style-name"}, {ens:dr3dns, en:"extrude", ans:presentationns, a:"style-name"}, {ens:dr3dns, en:"rotate", ans:presentationns, a:"style-name"}, {ens:dr3dns, en:"scene", ans:presentationns, a:"style-name"}, {ens:dr3dns, en:"sphere", ans:presentationns, a:"style-name"}, {ens: [...]
 +  ans:presentationns, a:"style-name"}, {ens:drawns, en:"circle", ans:presentationns, a:"style-name"}, {ens:drawns, en:"connector", ans:presentationns, a:"style-name"}, {ens:drawns, en:"control", ans:presentationns, a:"style-name"}, {ens:drawns, en:"custom-shape", ans:presentationns, a:"style-name"}, {ens:drawns, en:"ellipse", ans:presentationns, a:"style-name"}, {ens:drawns, en:"frame", ans:presentationns, a:"style-name"}, {ens:drawns, en:"g", ans:presentationns, a:"style-name"}, {ens:d [...]
 +  ans:presentationns, a:"style-name"}, {ens:drawns, en:"measure", ans:presentationns, a:"style-name"}, {ens:drawns, en:"page-thumbnail", ans:presentationns, a:"style-name"}, {ens:drawns, en:"path", ans:presentationns, a:"style-name"}, {ens:drawns, en:"polygon", ans:presentationns, a:"style-name"}, {ens:drawns, en:"polyline", ans:presentationns, a:"style-name"}, {ens:drawns, en:"rect", ans:presentationns, a:"style-name"}, {ens:drawns, en:"regular-polygon", ans:presentationns, a:"style-na [...]
 +  en:"annotation", ans:presentationns, a:"style-name"}], "drawing-page":[{ens:drawns, en:"page", ans:drawns, a:"style-name"}, {ens:presentationns, en:"notes", ans:drawns, a:"style-name"}, {ens:stylens, en:"handout-master", ans:drawns, a:"style-name"}, {ens:stylens, en:"master-page", ans:drawns, a:"style-name"}], "list-style":[{ens:textns, en:"list", ans:textns, a:"style-name"}, {ens:textns, en:"numbered-paragraph", ans:textns, a:"style-name"}, {ens:textns, en:"list-item", ans:textns, a: [...]
 +  {ens:stylens, en:"style", ans:stylens, a:"list-style-name"}], "data":[{ens:stylens, en:"style", ans:stylens, a:"data-style-name"}, {ens:stylens, en:"style", ans:stylens, a:"percentage-data-style-name"}, {ens:presentationns, en:"date-time-decl", ans:stylens, a:"data-style-name"}, {ens:textns, en:"creation-date", ans:stylens, a:"data-style-name"}, {ens:textns, en:"creation-time", ans:stylens, a:"data-style-name"}, {ens:textns, en:"database-display", ans:stylens, a:"data-style-name"}, {e [...]
 +  en:"date", ans:stylens, a:"data-style-name"}, {ens:textns, en:"editing-duration", ans:stylens, a:"data-style-name"}, {ens:textns, en:"expression", ans:stylens, a:"data-style-name"}, {ens:textns, en:"meta-field", ans:stylens, a:"data-style-name"}, {ens:textns, en:"modification-date", ans:stylens, a:"data-style-name"}, {ens:textns, en:"modification-time", ans:stylens, a:"data-style-name"}, {ens:textns, en:"print-date", ans:stylens, a:"data-style-name"}, {ens:textns, en:"print-time", ans [...]
 +  a:"data-style-name"}, {ens:textns, en:"table-formula", ans:stylens, a:"data-style-name"}, {ens:textns, en:"time", ans:stylens, a:"data-style-name"}, {ens:textns, en:"user-defined", ans:stylens, a:"data-style-name"}, {ens:textns, en:"user-field-get", ans:stylens, a:"data-style-name"}, {ens:textns, en:"user-field-input", ans:stylens, a:"data-style-name"}, {ens:textns, en:"variable-get", ans:stylens, a:"data-style-name"}, {ens:textns, en:"variable-input", ans:stylens, a:"data-style-name" [...]
 +  en:"variable-set", ans:stylens, a:"data-style-name"}], "page-layout":[{ens:presentationns, en:"notes", ans:stylens, a:"page-layout-name"}, {ens:stylens, en:"handout-master", ans:stylens, a:"page-layout-name"}, {ens:stylens, en:"master-page", ans:stylens, a:"page-layout-name"}]}, elements, xpath = new xmldom.XPath;
 +  function hasDerivedStyles(odfbody, nsResolver, styleElement) {
 +    var nodes, xp, resolver = nsResolver("style"), styleName = styleElement.getAttributeNS(resolver, "name"), styleFamily = styleElement.getAttributeNS(resolver, "family");
 +    xp = "//style:*[@style:parent-style-name='" + styleName + "'][@style:family='" + styleFamily + "']";
 +    nodes = xpath.getODFElementsWithXPath(odfbody, xp, nsResolver);
 +    if(nodes.length) {
 +      return true
 +    }
 +    return false
 +  }
 +  function prefixUsedStyleNames(styleUsingElementsRoot, prefix) {
 +    var elname = elements[styleUsingElementsRoot.localName], elns = elname && elname[styleUsingElementsRoot.namespaceURI], length = elns ? elns.length : 0, i, stylename, e;
 +    for(i = 0;i < length;i += 1) {
 +      stylename = styleUsingElementsRoot.getAttributeNS(elns[i].ns, elns[i].localname);
 +      if(stylename) {
 +        styleUsingElementsRoot.setAttributeNS(elns[i].ns, nsprefixes[elns[i].ns] + elns[i].localname, prefix + stylename)
 +      }
 +    }
 +    i = styleUsingElementsRoot.firstChild;
 +    while(i) {
 +      if(i.nodeType === Node.ELEMENT_NODE) {
 +        e = (i);
 +        prefixUsedStyleNames(e, prefix)
 +      }
 +      i = i.nextSibling
 +    }
 +  }
 +  function prefixStyleName(styleElement, prefix) {
 +    var stylename = styleElement.getAttributeNS(drawns, "name"), ns;
 +    if(stylename) {
 +      ns = drawns
 +    }else {
 +      stylename = styleElement.getAttributeNS(stylens, "name");
 +      if(stylename) {
 +        ns = stylens
 +      }
 +    }
 +    if(ns) {
 +      styleElement.setAttributeNS(ns, nsprefixes[ns] + "name", prefix + stylename)
 +    }
 +  }
 +  function prefixStyleNames(styleElementsRoot, prefix, styleUsingElementsRoot) {
 +    var s;
 +    if(styleElementsRoot) {
 +      s = styleElementsRoot.firstChild;
 +      while(s) {
 +        if(s.nodeType === Node.ELEMENT_NODE) {
 +          prefixStyleName((s), prefix)
 +        }
 +        s = s.nextSibling
 +      }
 +      prefixUsedStyleNames(styleElementsRoot, prefix);
 +      if(styleUsingElementsRoot) {
 +        prefixUsedStyleNames(styleUsingElementsRoot, prefix)
 +      }
 +    }
 +  }
 +  function removeRegExpFromUsedStyleNames(styleUsingElementsRoot, regExp) {
 +    var elname = elements[styleUsingElementsRoot.localName], elns = elname && elname[styleUsingElementsRoot.namespaceURI], length = elns ? elns.length : 0, i, stylename, e;
 +    for(i = 0;i < length;i += 1) {
 +      stylename = styleUsingElementsRoot.getAttributeNS(elns[i].ns, elns[i].localname);
 +      if(stylename) {
 +        stylename = stylename.replace(regExp, "");
 +        styleUsingElementsRoot.setAttributeNS(elns[i].ns, nsprefixes[elns[i].ns] + elns[i].localname, stylename)
 +      }
 +    }
 +    i = styleUsingElementsRoot.firstChild;
 +    while(i) {
 +      if(i.nodeType === Node.ELEMENT_NODE) {
 +        e = (i);
 +        removeRegExpFromUsedStyleNames(e, regExp)
 +      }
 +      i = i.nextSibling
 +    }
 +  }
 +  function removeRegExpFromStyleName(styleElement, regExp) {
 +    var stylename = styleElement.getAttributeNS(drawns, "name"), ns;
 +    if(stylename) {
 +      ns = drawns
 +    }else {
 +      stylename = styleElement.getAttributeNS(stylens, "name");
 +      if(stylename) {
 +        ns = stylens
 +      }
 +    }
 +    if(ns) {
 +      stylename = stylename.replace(regExp, "");
 +      styleElement.setAttributeNS(ns, nsprefixes[ns] + "name", stylename)
 +    }
 +  }
 +  function removePrefixFromStyleNames(styleElementsRoot, prefix, styleUsingElementsRoot) {
 +    var s, regExp = new RegExp("^" + prefix);
 +    if(styleElementsRoot) {
 +      s = styleElementsRoot.firstChild;
 +      while(s) {
 +        if(s.nodeType === Node.ELEMENT_NODE) {
 +          removeRegExpFromStyleName((s), regExp)
 +        }
 +        s = s.nextSibling
 +      }
 +      removeRegExpFromUsedStyleNames(styleElementsRoot, regExp);
 +      if(styleUsingElementsRoot) {
 +        removeRegExpFromUsedStyleNames(styleUsingElementsRoot, regExp)
 +      }
 +    }
 +  }
 +  function determineStylesForNode(node, usedStyles) {
 +    var elname = elements[node.localName], elns = elname && elname[node.namespaceURI], length = elns ? elns.length : 0, stylename, keyname, map, i;
 +    for(i = 0;i < length;i += 1) {
 +      stylename = node.getAttributeNS(elns[i].ns, elns[i].localname);
 +      if(stylename) {
 +        usedStyles = usedStyles || {};
 +        keyname = elns[i].keyname;
 +        map = usedStyles[keyname] = usedStyles[keyname] || {};
 +        map[stylename] = 1
 +      }
 +    }
 +    return usedStyles
 +  }
 +  function determineUsedStyles(styleUsingElementsRoot, usedStyles) {
 +    var i, e;
 +    determineStylesForNode(styleUsingElementsRoot, usedStyles);
 +    i = styleUsingElementsRoot.firstChild;
 +    while(i) {
 +      if(i.nodeType === Node.ELEMENT_NODE) {
 +        e = (i);
 +        determineUsedStyles(e, usedStyles)
 +      }
 +      i = i.nextSibling
 +    }
 +  }
 +  function StyleDefinition(key, name, family) {
 +    this.key = key;
 +    this.name = name;
 +    this.family = family;
 +    this.requires = {}
 +  }
 +  function getStyleDefinition(stylename, stylefamily, knownStyles) {
 +    var styleKey = stylename + '"' + stylefamily, styleDefinition = knownStyles[styleKey];
 +    if(!styleDefinition) {
 +      styleDefinition = knownStyles[styleKey] = new StyleDefinition(styleKey, stylename, stylefamily)
 +    }
 +    return styleDefinition
 +  }
 +  function determineDependentStyles(styleUsingElementsRoot, styleScope, knownStyles) {
 +    var elname = elements[styleUsingElementsRoot.localName], elns = elname && elname[styleUsingElementsRoot.namespaceURI], length = elns ? elns.length : 0, newScopeName = styleUsingElementsRoot.getAttributeNS(stylens, "name"), newScopeFamily = styleUsingElementsRoot.getAttributeNS(stylens, "family"), referencedStyleName, referencedStyleFamily, referencedStyleDef, i, e;
 +    if(newScopeName && newScopeFamily) {
 +      styleScope = getStyleDefinition(newScopeName, newScopeFamily, knownStyles)
 +    }
 +    if(styleScope) {
 +      for(i = 0;i < length;i += 1) {
 +        referencedStyleName = styleUsingElementsRoot.getAttributeNS(elns[i].ns, elns[i].localname);
 +        if(referencedStyleName) {
 +          referencedStyleFamily = elns[i].keyname;
 +          referencedStyleDef = getStyleDefinition(referencedStyleName, referencedStyleFamily, knownStyles);
 +          styleScope.requires[referencedStyleDef.key] = referencedStyleDef
 +        }
 +      }
 +    }
 +    i = styleUsingElementsRoot.firstChild;
 +    while(i) {
 +      if(i.nodeType === Node.ELEMENT_NODE) {
 +        e = (i);
 +        determineDependentStyles(e, styleScope, knownStyles)
 +      }
 +      i = i.nextSibling
 +    }
 +    return knownStyles
 +  }
 +  function inverse(elementstyles) {
 +    var keyname, i, l, list, item, e = {}, map, array;
 +    for(keyname in elementstyles) {
 +      if(elementstyles.hasOwnProperty(keyname)) {
 +        list = elementstyles[keyname];
 +        l = list.length;
 +        for(i = 0;i < l;i += 1) {
 +          item = list[i];
 +          map = e[item.en] = e[item.en] || {};
 +          array = map[item.ens] = map[item.ens] || [];
 +          array.push({ns:item.ans, localname:item.a, keyname:keyname})
 +        }
 +      }
 +    }
 +    return e
 +  }
 +  function mergeRequiredStyles(styleDependency, usedStyles) {
 +    var family = usedStyles[styleDependency.family];
 +    if(!family) {
 +      family = usedStyles[styleDependency.family] = {}
 +    }
 +    family[styleDependency.name] = 1;
 +    Object.keys((styleDependency.requires)).forEach(function(requiredStyleKey) {
 +      mergeRequiredStyles((styleDependency.requires[requiredStyleKey]), usedStyles)
 +    })
 +  }
 +  function mergeUsedAutomaticStyles(automaticStylesRoot, usedStyles) {
 +    var automaticStyles = determineDependentStyles(automaticStylesRoot, null, {});
 +    Object.keys(automaticStyles).forEach(function(styleKey) {
 +      var automaticStyleDefinition = automaticStyles[styleKey], usedFamily = usedStyles[automaticStyleDefinition.family];
 +      if(usedFamily && usedFamily.hasOwnProperty(automaticStyleDefinition.name)) {
 +        mergeRequiredStyles(automaticStyleDefinition, usedStyles)
 +      }
 +    })
 +  }
 +  function collectUsedFontFaces(usedFontFaceDeclMap, styleElementsRoot) {
 +    var localNames = ["font-name", "font-name-asian", "font-name-complex"], currentNode;
 +    function collectByAttribute(localName) {
 +      var fontFaceName = currentNode.getAttributeNS(stylens, localName);
 +      if(fontFaceName) {
 +        usedFontFaceDeclMap[fontFaceName] = true
 +      }
 +    }
 +    if(styleElementsRoot) {
 +      currentNode = styleElementsRoot.firstChild;
 +      while(currentNode) {
 +        if(currentNode.nodeType === Node.ELEMENT_NODE) {
 +          localNames.forEach(collectByAttribute);
 +          collectUsedFontFaces(usedFontFaceDeclMap, (currentNode))
 +        }
 +        currentNode = currentNode.nextSibling
 +      }
 +    }
 +  }
 +  this.collectUsedFontFaces = collectUsedFontFaces;
 +  function changeFontFaceNames(styleElementsRoot, fontFaceNameChangeMap) {
 +    var localNames = ["font-name", "font-name-asian", "font-name-complex"], currentNode;
 +    function changeFontFaceNameByAttribute(localName) {
 +      var fontFaceName = currentNode.getAttributeNS(stylens, localName);
 +      if(fontFaceName && fontFaceNameChangeMap.hasOwnProperty(fontFaceName)) {
 +        currentNode.setAttributeNS(stylens, "style:" + localName, fontFaceNameChangeMap[fontFaceName])
 +      }
 +    }
 +    if(styleElementsRoot) {
 +      currentNode = styleElementsRoot.firstChild;
 +      while(currentNode) {
 +        if(currentNode.nodeType === Node.ELEMENT_NODE) {
 +          localNames.forEach(changeFontFaceNameByAttribute);
 +          changeFontFaceNames((currentNode), fontFaceNameChangeMap)
 +        }
 +        currentNode = currentNode.nextSibling
 +      }
 +    }
 +  }
 +  this.changeFontFaceNames = changeFontFaceNames;
 +  this.UsedStyleList = function(styleUsingElementsRoot, automaticStylesRoot) {
 +    var usedStyles = {};
 +    this.uses = function(element) {
 +      var localName = element.localName, name = element.getAttributeNS(drawns, "name") || element.getAttributeNS(stylens, "name"), keyName, map;
 +      if(localName === "style") {
 +        keyName = element.getAttributeNS(stylens, "family")
 +      }else {
 +        if(element.namespaceURI === numberns) {
 +          keyName = "data"
 +        }else {
 +          keyName = localName
 +        }
 +      }
 +      map = usedStyles[keyName];
 +      return map ? map[name] > 0 : false
 +    };
 +    determineUsedStyles(styleUsingElementsRoot, usedStyles);
 +    if(automaticStylesRoot) {
 +      mergeUsedAutomaticStyles(automaticStylesRoot, usedStyles)
 +    }
 +  };
 +  this.hasDerivedStyles = hasDerivedStyles;
 +  this.prefixStyleNames = prefixStyleNames;
 +  this.removePrefixFromStyleNames = removePrefixFromStyleNames;
 +  this.determineStylesForNode = determineStylesForNode;
 +  elements = inverse(elementstyles)
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("odf.Namespaces");
 +odf.OdfUtils = function OdfUtils() {
 +  var textns = odf.Namespaces.textns, drawns = odf.Namespaces.drawns, whitespaceOnly = /^\s*$/, domUtils = new core.DomUtils;
 +  function isImage(e) {
 +    var name = e && e.localName;
 +    return name === "image" && e.namespaceURI === drawns
 +  }
 +  this.isImage = isImage;
 +  function isCharacterFrame(e) {
 +    var name = e && e.localName;
 +    return name === "frame" && (e.namespaceURI === drawns && e.getAttributeNS(textns, "anchor-type") === "as-char")
 +  }
 +  this.isCharacterFrame = isCharacterFrame;
 +  this.isTextSpan = function(e) {
 +    var name = e && e.localName;
 +    return name === "span" && e.namespaceURI === textns
 +  };
 +  function isParagraph(e) {
 +    var name = e && e.localName;
 +    return(name === "p" || name === "h") && e.namespaceURI === textns
 +  }
 +  this.isParagraph = isParagraph;
 +  function getParagraphElement(node) {
 +    while(node && !isParagraph(node)) {
 +      node = node.parentNode
 +    }
 +    return node
 +  }
 +  this.getParagraphElement = getParagraphElement;
 +  this.isWithinTrackedChanges = function(node, container) {
 +    while(node && node !== container) {
 +      if(node.namespaceURI === textns && node.localName === "tracked-changes") {
 +        return true
 +      }
 +      node = node.parentNode
 +    }
 +    return false
 +  };
 +  this.isListItem = function(e) {
 +    var name = e && e.localName;
 +    return name === "list-item" && e.namespaceURI === textns
 +  };
 +  this.isLineBreak = function(e) {
 +    var name = e && e.localName;
 +    return name === "line-break" && e.namespaceURI === textns
 +  };
 +  function isODFWhitespace(text) {
 +    return/^[ \t\r\n]+$/.test(text)
 +  }
 +  this.isODFWhitespace = isODFWhitespace;
 +  function isGroupingElement(e) {
 +    var localName = e && e.localName;
 +    if(/^(span|p|h|a|meta)$/.test(localName) && e.namespaceURI === textns || localName === "span" && e.className === "annotationHighlight") {
 +      return true
 +    }
 +    return false
 +  }
 +  this.isGroupingElement = isGroupingElement;
 +  function isCharacterElement(e) {
 +    var n = e && e.localName, ns, r = false;
 +    if(n) {
 +      ns = e.namespaceURI;
 +      if(ns === textns) {
 +        r = n === "s" || (n === "tab" || n === "line-break")
 +      }else {
 +        r = isCharacterFrame(e)
 +      }
 +    }
 +    return r
 +  }
 +  this.isCharacterElement = isCharacterElement;
 +  function isWhitespaceElement(e) {
 +    var n = e && e.localName, ns, r = false;
 +    if(n) {
 +      ns = e.namespaceURI;
 +      if(ns === textns) {
 +        r = n === "s" || n === "tab"
 +      }
 +    }
 +    return r
 +  }
 +  this.isWhitespaceElement = isWhitespaceElement;
 +  function firstChild(node) {
 +    while(node.firstChild !== null && isGroupingElement(node)) {
 +      node = node.firstChild
 +    }
 +    return node
 +  }
 +  this.firstChild = firstChild;
 +  function lastChild(node) {
 +    while(node.lastChild !== null && isGroupingElement(node)) {
 +      node = node.lastChild
 +    }
 +    return node
 +  }
 +  this.lastChild = lastChild;
 +  function previousNode(node) {
 +    while(!isParagraph(node) && node.previousSibling === null) {
 +      node = (node.parentNode)
 +    }
 +    return isParagraph(node) ? null : lastChild((node.previousSibling))
 +  }
 +  this.previousNode = previousNode;
 +  function nextNode(node) {
 +    while(!isParagraph(node) && node.nextSibling === null) {
 +      node = (node.parentNode)
 +    }
 +    return isParagraph(node) ? null : firstChild((node.nextSibling))
 +  }
 +  this.nextNode = nextNode;
 +  function scanLeftForNonWhitespace(node) {
 +    var r = false;
 +    while(node) {
 +      if(node.nodeType === Node.TEXT_NODE) {
 +        if(node.length === 0) {
 +          node = previousNode(node)
 +        }else {
 +          return!isODFWhitespace(node.data.substr(node.length - 1, 1))
 +        }
 +      }else {
 +        if(isCharacterElement(node)) {
 +          r = isWhitespaceElement(node) === false;
 +          node = null
 +        }else {
 +          node = previousNode(node)
 +        }
 +      }
 +    }
 +    return r
 +  }
 +  this.scanLeftForNonWhitespace = scanLeftForNonWhitespace;
 +  function lookLeftForCharacter(node) {
 +    var text, r = 0;
 +    if(node.nodeType === Node.TEXT_NODE && node.length > 0) {
 +      text = node.data;
 +      if(!isODFWhitespace(text.substr(text.length - 1, 1))) {
 +        r = 1
 +      }else {
 +        if(text.length === 1) {
 +          r = scanLeftForNonWhitespace(previousNode(node)) ? 2 : 0
 +        }else {
 +          r = isODFWhitespace(text.substr(text.length - 2, 1)) ? 0 : 2
 +        }
 +      }
 +    }else {
 +      if(isCharacterElement(node)) {
 +        r = 1
 +      }
 +    }
 +    return r
 +  }
 +  this.lookLeftForCharacter = lookLeftForCharacter;
 +  function lookRightForCharacter(node) {
 +    var r = false;
 +    if(node && (node.nodeType === Node.TEXT_NODE && node.length > 0)) {
 +      r = !isODFWhitespace(node.data.substr(0, 1))
 +    }else {
 +      if(isCharacterElement(node)) {
 +        r = true
 +      }
 +    }
 +    return r
 +  }
 +  this.lookRightForCharacter = lookRightForCharacter;
 +  function scanLeftForAnyCharacter(node) {
 +    var r = false;
 +    node = node && lastChild(node);
 +    while(node) {
 +      if(node.nodeType === Node.TEXT_NODE && (node.length > 0 && !isODFWhitespace(node.data))) {
 +        r = true;
 +        break
 +      }
 +      if(isCharacterElement(node)) {
 +        r = true;
 +        break
 +      }
 +      node = previousNode(node)
 +    }
 +    return r
 +  }
 +  this.scanLeftForAnyCharacter = scanLeftForAnyCharacter;
 +  function scanRightForAnyCharacter(node) {
 +    var r = false;
 +    node = node && firstChild(node);
 +    while(node) {
 +      if(node.nodeType === Node.TEXT_NODE && (node.length > 0 && !isODFWhitespace(node.data))) {
 +        r = true;
 +        break
 +      }
 +      if(isCharacterElement(node)) {
 +        r = true;
 +        break
 +      }
 +      node = nextNode(node)
 +    }
 +    return r
 +  }
 +  this.scanRightForAnyCharacter = scanRightForAnyCharacter;
 +  function isTrailingWhitespace(textnode, offset) {
 +    if(!isODFWhitespace(textnode.data.substr(offset))) {
 +      return false
 +    }
 +    return!scanRightForAnyCharacter(nextNode(textnode))
 +  }
 +  this.isTrailingWhitespace = isTrailingWhitespace;
 +  function isSignificantWhitespace(textNode, offset) {
 +    var text = textNode.data, result;
 +    if(!isODFWhitespace(text[offset])) {
 +      return false
 +    }
 +    if(isCharacterElement(textNode.parentNode)) {
 +      return false
 +    }
 +    if(offset > 0) {
 +      if(!isODFWhitespace(text[offset - 1])) {
 +        result = true
 +      }
 +    }else {
 +      if(scanLeftForNonWhitespace(previousNode(textNode))) {
 +        result = true
 +      }
 +    }
 +    if(result === true) {
 +      return isTrailingWhitespace(textNode, offset) ? false : true
 +    }
 +    return false
 +  }
 +  this.isSignificantWhitespace = isSignificantWhitespace;
 +  this.isDowngradableSpaceElement = function(node) {
 +    if(node.namespaceURI === textns && node.localName === "s") {
 +      return scanLeftForNonWhitespace(previousNode(node)) && scanRightForAnyCharacter(nextNode(node))
 +    }
 +    return false
 +  };
 +  function getFirstNonWhitespaceChild(node) {
 +    var child = node && node.firstChild;
 +    while(child && (child.nodeType === Node.TEXT_NODE && whitespaceOnly.test(child.nodeValue))) {
 +      child = child.nextSibling
 +    }
 +    return child
 +  }
 +  this.getFirstNonWhitespaceChild = getFirstNonWhitespaceChild;
 +  function parseLength(length) {
 +    var re = /(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/, m = re.exec(length);
 +    if(!m) {
 +      return null
 +    }
 +    return{value:parseFloat(m[1]), unit:m[3]}
 +  }
 +  this.parseLength = parseLength;
 +  function parsePositiveLength(length) {
 +    var result = parseLength(length);
 +    if(result && (result.value <= 0 || result.unit === "%")) {
 +      return null
 +    }
 +    return result
 +  }
 +  function parseNonNegativeLength(length) {
 +    var result = parseLength(length);
 +    if(result && (result.value < 0 || result.unit === "%")) {
 +      return null
 +    }
 +    return result
 +  }
 +  this.parseNonNegativeLength = parseNonNegativeLength;
 +  function parsePercentage(length) {
 +    var result = parseLength(length);
 +    if(result && result.unit !== "%") {
 +      return null
 +    }
 +    return result
 +  }
 +  function parseFoFontSize(fontSize) {
 +    return parsePositiveLength(fontSize) || parsePercentage(fontSize)
 +  }
 +  this.parseFoFontSize = parseFoFontSize;
 +  function parseFoLineHeight(lineHeight) {
 +    return parseNonNegativeLength(lineHeight) || parsePercentage(lineHeight)
 +  }
 +  this.parseFoLineHeight = parseFoLineHeight;
 +  function getImpactedParagraphs(range) {
 +    var outerContainer = (range.commonAncestorContainer), impactedParagraphs = [];
 +    if(outerContainer.nodeType === Node.ELEMENT_NODE) {
 +      impactedParagraphs = domUtils.getElementsByTagNameNS(outerContainer, textns, "p").concat(domUtils.getElementsByTagNameNS(outerContainer, textns, "h"))
 +    }
 +    while(outerContainer && !isParagraph(outerContainer)) {
 +      outerContainer = outerContainer.parentNode
 +    }
 +    if(outerContainer) {
 +      impactedParagraphs.push(outerContainer)
 +    }
 +    return impactedParagraphs.filter(function(n) {
 +      return domUtils.rangeIntersectsNode(range, n)
 +    })
 +  }
 +  this.getImpactedParagraphs = getImpactedParagraphs;
 +  function isAcceptedNode(node) {
 +    switch(node.namespaceURI) {
 +      case odf.Namespaces.drawns:
 +      ;
 +      case odf.Namespaces.svgns:
 +      ;
 +      case odf.Namespaces.dr3dns:
 +        return false;
 +      case odf.Namespaces.textns:
 +        switch(node.localName) {
 +          case "note-body":
 +          ;
 +          case "ruby-text":
 +            return false
 +        }
 +        break;
 +      case odf.Namespaces.officens:
 +        switch(node.localName) {
 +          case "annotation":
 +          ;
 +          case "binary-data":
 +          ;
 +          case "event-listeners":
 +            return false
 +        }
 +        break;
 +      default:
 +        switch(node.localName) {
 +          case "editinfo":
 +            return false
 +        }
 +        break
 +    }
 +    return true
 +  }
 +  function isSignificantTextContent(textNode) {
 +    return Boolean(getParagraphElement(textNode) && (!isODFWhitespace(textNode.textContent) || isSignificantWhitespace(textNode, 0)))
 +  }
 +  function includeNode(range, nodeRange, includePartial) {
 +    return includePartial && domUtils.rangesIntersect(range, nodeRange) || domUtils.containsRange(range, nodeRange)
 +  }
 +  function getTextNodes(range, includePartial) {
 +    var document = range.startContainer.ownerDocument, nodeRange = document.createRange(), textNodes;
 +    function nodeFilter(node) {
 +      nodeRange.selectNodeContents(node);
 +      if(node.nodeType === Node.TEXT_NODE) {
 +        if(includeNode(range, nodeRange, includePartial)) {
 +          return isSignificantTextContent(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT
 +        }
 +      }else {
 +        if(domUtils.rangesIntersect(range, nodeRange)) {
 +          if(isAcceptedNode(node)) {
 +            return NodeFilter.FILTER_SKIP
 +          }
 +        }
 +      }
 +      return NodeFilter.FILTER_REJECT
 +    }
 +    textNodes = domUtils.getNodesInRange(range, nodeFilter);
 +    nodeRange.detach();
 +    return textNodes
 +  }
 +  this.getTextNodes = getTextNodes;
 +  this.getTextElements = function(range, includePartial, includeInsignificantWhitespace) {
 +    var document = range.startContainer.ownerDocument, nodeRange = document.createRange(), elements;
 +    function nodeFilter(node) {
 +      nodeRange.selectNodeContents(node);
 +      if(isCharacterElement(node.parentNode)) {
 +        return NodeFilter.FILTER_REJECT
 +      }
 +      if(node.nodeType === Node.TEXT_NODE) {
 +        if(includeNode(range, nodeRange, includePartial)) {
 +          if(includeInsignificantWhitespace || isSignificantTextContent(node)) {
 +            return NodeFilter.FILTER_ACCEPT
 +          }
 +        }
 +      }else {
 +        if(isCharacterElement(node)) {
 +          if(includeNode(range, nodeRange, includePartial)) {
 +            return NodeFilter.FILTER_ACCEPT
 +          }
 +        }else {
 +          if(isAcceptedNode(node) || isGroupingElement(node)) {
 +            return NodeFilter.FILTER_SKIP
 +          }
 +        }
 +      }
 +      return NodeFilter.FILTER_REJECT
 +    }
 +    elements = domUtils.getNodesInRange(range, nodeFilter);
 +    nodeRange.detach();
 +    return elements
 +  };
 +  this.getParagraphElements = function(range) {
 +    var document = range.startContainer.ownerDocument, nodeRange = document.createRange(), elements;
 +    function nodeFilter(node) {
 +      nodeRange.selectNodeContents(node);
 +      if(isParagraph(node)) {
 +        if(domUtils.rangesIntersect(range, nodeRange)) {
 +          return NodeFilter.FILTER_ACCEPT
 +        }
 +      }else {
 +        if(isAcceptedNode(node) || isGroupingElement(node)) {
 +          return NodeFilter.FILTER_SKIP
 +        }
 +      }
 +      return NodeFilter.FILTER_REJECT
 +    }
 +    elements = domUtils.getNodesInRange(range, nodeFilter);
 +    nodeRange.detach();
 +    return elements
 +  };
 +  this.getImageElements = function(range) {
 +    var document = range.startContainer.ownerDocument, nodeRange = document.createRange(), elements;
 +    function nodeFilter(node) {
 +      nodeRange.selectNodeContents(node);
 +      if(isImage(node) && domUtils.containsRange(range, nodeRange)) {
 +        return NodeFilter.FILTER_ACCEPT
 +      }
 +      return NodeFilter.FILTER_SKIP
 +    }
 +    elements = domUtils.getNodesInRange(range, nodeFilter);
 +    nodeRange.detach();
 +    return elements
 +  }
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.OdfUtils");
 +odf.TextSerializer = function TextSerializer() {
 +  var self = this, odfUtils = new odf.OdfUtils;
 +  function serializeNode(node) {
 +    var s = "", accept = self.filter ? self.filter.acceptNode(node) : NodeFilter.FILTER_ACCEPT, nodeType = node.nodeType, child;
 +    if(accept === NodeFilter.FILTER_ACCEPT || accept === NodeFilter.FILTER_SKIP) {
 +      child = node.firstChild;
 +      while(child) {
 +        s += serializeNode(child);
 +        child = child.nextSibling
 +      }
 +    }
 +    if(accept === NodeFilter.FILTER_ACCEPT) {
 +      if(nodeType === Node.ELEMENT_NODE && odfUtils.isParagraph(node)) {
 +        s += "\n"
 +      }else {
 +        if(nodeType === Node.TEXT_NODE && node.textContent) {
 +          s += node.textContent
 +        }
 +      }
 +    }
 +    return s
 +  }
 +  this.filter = null;
 +  this.writeToString = function(node) {
++    var plainText;
 +    if(!node) {
 +      return""
 +    }
-     return serializeNode(node)
++    plainText = serializeNode(node);
++    if(plainText[plainText.length - 1] === "\n") {
++      plainText = plainText.substr(0, plainText.length - 1)
++    }
++    return plainText
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("core.LoopWatchDog");
 +runtime.loadClass("odf.Namespaces");
 +odf.TextStyleApplicator = function TextStyleApplicator(objectNameGenerator, formatting, automaticStyles) {
 +  var domUtils = new core.DomUtils, textns = odf.Namespaces.textns, stylens = odf.Namespaces.stylens, textProperties = "style:text-properties", webodfns = "urn:webodf:names:scope";
 +  function StyleLookup(info) {
 +    function compare(expected, actual) {
 +      if(typeof expected === "object" && typeof actual === "object") {
 +        return Object.keys(expected).every(function(key) {
 +          return compare(expected[key], actual[key])
 +        })
 +      }
 +      return expected === actual
 +    }
 +    this.isStyleApplied = function(textNode) {
 +      var appliedStyle = formatting.getAppliedStylesForElement(textNode);
 +      return compare(info, appliedStyle)
 +    }
 +  }
 +  function StyleManager(info) {
 +    var createdStyles = {};
 +    function createDirectFormat(existingStyleName, document) {
 +      var derivedStyleInfo, derivedStyleNode;
 +      derivedStyleInfo = existingStyleName ? formatting.createDerivedStyleObject(existingStyleName, "text", info) : info;
 +      derivedStyleNode = document.createElementNS(stylens, "style:style");
 +      formatting.updateStyle(derivedStyleNode, derivedStyleInfo);
 +      derivedStyleNode.setAttributeNS(stylens, "style:name", objectNameGenerator.generateStyleName());
 +      derivedStyleNode.setAttributeNS(stylens, "style:family", "text");
 +      derivedStyleNode.setAttributeNS(webodfns, "scope", "document-content");
 +      automaticStyles.appendChild(derivedStyleNode);
 +      return derivedStyleNode
 +    }
 +    function getDirectStyle(existingStyleName, document) {
 +      existingStyleName = existingStyleName || "";
 +      if(!createdStyles.hasOwnProperty(existingStyleName)) {
 +        createdStyles[existingStyleName] = createDirectFormat(existingStyleName, document)
 +      }
 +      return createdStyles[existingStyleName].getAttributeNS(stylens, "name")
 +    }
 +    this.applyStyleToContainer = function(container) {
 +      var name = getDirectStyle(container.getAttributeNS(textns, "style-name"), container.ownerDocument);
 +      container.setAttributeNS(textns, "text:style-name", name)
 +    }
 +  }
 +  function isTextSpan(node) {
 +    return node.localName === "span" && node.namespaceURI === textns
 +  }
 +  function moveToNewSpan(startNode, limits) {
-     var document = startNode.ownerDocument, originalContainer = (startNode.parentNode), styledContainer, trailingContainer, moveTrailing, node, nextNode, loopGuard = new core.LoopWatchDog(1E3), styledNodes = [];
++    var document = startNode.ownerDocument, originalContainer = (startNode.parentNode), styledContainer, trailingContainer, moveTrailing, node, nextNode, loopGuard = new core.LoopWatchDog(1E4), styledNodes = [];
 +    if(!isTextSpan(originalContainer)) {
 +      styledContainer = document.createElementNS(textns, "text:span");
 +      originalContainer.insertBefore(styledContainer, startNode);
 +      moveTrailing = false
 +    }else {
 +      if(startNode.previousSibling && !domUtils.rangeContainsNode(limits, (originalContainer.firstChild))) {
 +        styledContainer = originalContainer.cloneNode(false);
 +        originalContainer.parentNode.insertBefore(styledContainer, originalContainer.nextSibling);
 +        moveTrailing = true
 +      }else {
 +        styledContainer = originalContainer;
 +        moveTrailing = true
 +      }
 +    }
 +    styledNodes.push(startNode);
 +    node = startNode.nextSibling;
 +    while(node && domUtils.rangeContainsNode(limits, node)) {
 +      loopGuard.check();
 +      styledNodes.push(node);
 +      node = node.nextSibling
 +    }
 +    styledNodes.forEach(function(node) {
 +      if(node.parentNode !== styledContainer) {
 +        styledContainer.appendChild(node)
 +      }
 +    });
 +    if(node && moveTrailing) {
 +      trailingContainer = styledContainer.cloneNode(false);
 +      styledContainer.parentNode.insertBefore(trailingContainer, styledContainer.nextSibling);
 +      while(node) {
 +        loopGuard.check();
 +        nextNode = node.nextSibling;
 +        trailingContainer.appendChild(node);
 +        node = nextNode
 +      }
 +    }
 +    return(styledContainer)
 +  }
 +  this.applyStyle = function(textNodes, limits, info) {
 +    var textPropsOnly = {}, isStyled, container, styleCache, styleLookup;
 +    runtime.assert(info && info[textProperties], "applyStyle without any text properties");
 +    textPropsOnly[textProperties] = info[textProperties];
 +    styleCache = new StyleManager(textPropsOnly);
 +    styleLookup = new StyleLookup(textPropsOnly);
 +    textNodes.forEach(function(n) {
 +      isStyled = styleLookup.isStyleApplied(n);
 +      if(isStyled === false) {
 +        container = moveToNewSpan((n), limits);
 +        styleCache.applyStyleToContainer(container)
 +      }
 +    })
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("xmldom.XPath");
 +runtime.loadClass("core.CSSUnits");
 +odf.Style2CSS = function Style2CSS() {
 +  var drawns = odf.Namespaces.drawns, fons = odf.Namespaces.fons, stylens = odf.Namespaces.stylens, svgns = odf.Namespaces.svgns, tablens = odf.Namespaces.tablens, textns = odf.Namespaces.textns, xlinkns = odf.Namespaces.xlinkns, presentationns = odf.Namespaces.presentationns, familynamespaceprefixes = {"graphic":"draw", "drawing-page":"draw", "paragraph":"text", "presentation":"presentation", "ruby":"text", "section":"text", "table":"table", "table-cell":"table", "table-column":"table" [...]
 +  "text":"text", "list":"text", "page":"office"}, familytagnames = {"graphic":["circle", "connected", "control", "custom-shape", "ellipse", "frame", "g", "line", "measure", "page", "page-thumbnail", "path", "polygon", "polyline", "rect", "regular-polygon"], "paragraph":["alphabetical-index-entry-template", "h", "illustration-index-entry-template", "index-source-style", "object-index-entry-template", "p", "table-index-entry-template", "table-of-content-entry-template", "user-index-entry- [...]
 +  "presentation":["caption", "circle", "connector", "control", "custom-shape", "ellipse", "frame", "g", "line", "measure", "page-thumbnail", "path", "polygon", "polyline", "rect", "regular-polygon"], "drawing-page":["caption", "circle", "connector", "control", "page", "custom-shape", "ellipse", "frame", "g", "line", "measure", "page-thumbnail", "path", "polygon", "polyline", "rect", "regular-polygon"], "ruby":["ruby", "ruby-text"], "section":["alphabetical-index", "bibliography", "illus [...]
 +  "index-title", "object-index", "section", "table-of-content", "table-index", "user-index"], "table":["background", "table"], "table-cell":["body", "covered-table-cell", "even-columns", "even-rows", "first-column", "first-row", "last-column", "last-row", "odd-columns", "odd-rows", "table-cell"], "table-column":["table-column"], "table-row":["table-row"], "text":["a", "index-entry-chapter", "index-entry-link-end", "index-entry-link-start", "index-entry-page-number", "index-entry-span",  [...]
 +  "index-entry-text", "index-title-template", "linenumbering-configuration", "list-level-style-number", "list-level-style-bullet", "outline-level-style", "span"], "list":["list-item"]}, textPropertySimpleMapping = [[fons, "color", "color"], [fons, "background-color", "background-color"], [fons, "font-weight", "font-weight"], [fons, "font-style", "font-style"]], bgImageSimpleMapping = [[stylens, "repeat", "background-repeat"]], paragraphPropertySimpleMapping = [[fons, "background-color", [...]
 +  [fons, "text-align", "text-align"], [fons, "text-indent", "text-indent"], [fons, "padding", "padding"], [fons, "padding-left", "padding-left"], [fons, "padding-right", "padding-right"], [fons, "padding-top", "padding-top"], [fons, "padding-bottom", "padding-bottom"], [fons, "border-left", "border-left"], [fons, "border-right", "border-right"], [fons, "border-top", "border-top"], [fons, "border-bottom", "border-bottom"], [fons, "margin", "margin"], [fons, "margin-left", "margin-left"], [...]
 +  "margin-right"], [fons, "margin-top", "margin-top"], [fons, "margin-bottom", "margin-bottom"], [fons, "border", "border"]], graphicPropertySimpleMapping = [[fons, "background-color", "background-color"], [fons, "min-height", "min-height"], [drawns, "stroke", "border"], [svgns, "stroke-color", "border-color"], [svgns, "stroke-width", "border-width"], [fons, "border", "border"], [fons, "border-left", "border-left"], [fons, "border-right", "border-right"], [fons, "border-top", "border-to [...]
 +  "border-bottom", "border-bottom"]], tablecellPropertySimpleMapping = [[fons, "background-color", "background-color"], [fons, "border-left", "border-left"], [fons, "border-right", "border-right"], [fons, "border-top", "border-top"], [fons, "border-bottom", "border-bottom"], [fons, "border", "border"]], tablecolumnPropertySimpleMapping = [[stylens, "column-width", "width"]], tablerowPropertySimpleMapping = [[stylens, "row-height", "height"], [fons, "keep-together", null]], tableProperty [...]
 +  [[stylens, "width", "width"], [fons, "margin-left", "margin-left"], [fons, "margin-right", "margin-right"], [fons, "margin-top", "margin-top"], [fons, "margin-bottom", "margin-bottom"]], pageContentPropertySimpleMapping = [[fons, "background-color", "background-color"], [fons, "padding", "padding"], [fons, "padding-left", "padding-left"], [fons, "padding-right", "padding-right"], [fons, "padding-top", "padding-top"], [fons, "padding-bottom", "padding-bottom"], [fons, "border", "border [...]
 +  "border-left", "border-left"], [fons, "border-right", "border-right"], [fons, "border-top", "border-top"], [fons, "border-bottom", "border-bottom"], [fons, "margin", "margin"], [fons, "margin-left", "margin-left"], [fons, "margin-right", "margin-right"], [fons, "margin-top", "margin-top"], [fons, "margin-bottom", "margin-bottom"]], pageSizePropertySimpleMapping = [[fons, "page-width", "width"], [fons, "page-height", "height"]], borderPropertyMap = {"border":true, "border-left":true, " [...]
 +  "border-top":true, "border-bottom":true, "stroke-width":true}, fontFaceDeclsMap = {}, utils = new odf.OdfUtils, documentType, odfRoot, defaultFontSize, xpath = new xmldom.XPath, cssUnits = new core.CSSUnits;
 +  function getStyleMap(stylesnode) {
 +    var stylemap = {}, node, name, family, style;
 +    if(!stylesnode) {
 +      return stylemap
 +    }
 +    node = stylesnode.firstChild;
 +    while(node) {
 +      if(node.namespaceURI === stylens && (node.localName === "style" || node.localName === "default-style")) {
 +        family = node.getAttributeNS(stylens, "family")
 +      }else {
 +        if(node.namespaceURI === textns && node.localName === "list-style") {
 +          family = "list"
 +        }else {
 +          if(node.namespaceURI === stylens && (node.localName === "page-layout" || node.localName === "default-page-layout")) {
 +            family = "page"
 +          }else {
 +            family = undefined
 +          }
 +        }
 +      }
 +      if(family) {
 +        name = node.getAttributeNS && node.getAttributeNS(stylens, "name");
 +        if(!name) {
 +          name = ""
 +        }
 +        style = stylemap[family] = stylemap[family] || {};
 +        style[name] = node
 +      }
 +      node = node.nextSibling
 +    }
 +    return stylemap
 +  }
 +  function findStyle(stylestree, name) {
 +    if(!name || !stylestree) {
 +      return null
 +    }
 +    if(stylestree[name]) {
 +      return stylestree[name]
 +    }
 +    var n, style;
 +    for(n in stylestree) {
 +      if(stylestree.hasOwnProperty(n)) {
 +        style = findStyle(stylestree[n].derivedStyles, name);
 +        if(style) {
 +          return style
 +        }
 +      }
 +    }
 +    return null
 +  }
 +  function addStyleToStyleTree(stylename, stylesmap, stylestree) {
 +    var style = stylesmap[stylename], parentname, parentstyle;
 +    if(!style) {
 +      return
 +    }
 +    parentname = style.getAttributeNS(stylens, "parent-style-name");
 +    parentstyle = null;
 +    if(parentname) {
 +      parentstyle = findStyle(stylestree, parentname);
 +      if(!parentstyle && stylesmap[parentname]) {
 +        addStyleToStyleTree(parentname, stylesmap, stylestree);
 +        parentstyle = stylesmap[parentname];
 +        stylesmap[parentname] = null
 +      }
 +    }
 +    if(parentstyle) {
 +      if(!parentstyle.derivedStyles) {
 +        parentstyle.derivedStyles = {}
 +      }
 +      parentstyle.derivedStyles[stylename] = style
 +    }else {
 +      stylestree[stylename] = style
 +    }
 +  }
 +  function addStyleMapToStyleTree(stylesmap, stylestree) {
 +    var name;
 +    for(name in stylesmap) {
 +      if(stylesmap.hasOwnProperty(name)) {
 +        addStyleToStyleTree(name, stylesmap, stylestree);
 +        stylesmap[name] = null
 +      }
 +    }
 +  }
 +  function createSelector(family, name) {
 +    var prefix = familynamespaceprefixes[family], namepart, selector;
 +    if(prefix === null) {
 +      return null
 +    }
 +    if(name) {
 +      namepart = "[" + prefix + '|style-name="' + name + '"]'
 +    }else {
 +      namepart = ""
 +    }
 +    if(prefix === "presentation") {
 +      prefix = "draw";
 +      if(name) {
 +        namepart = '[presentation|style-name="' + name + '"]'
 +      }else {
 +        namepart = ""
 +      }
 +    }
 +    selector = prefix + "|" + familytagnames[family].join(namepart + "," + prefix + "|") + namepart;
 +    return selector
 +  }
 +  function getSelectors(family, name, node) {
 +    var selectors = [], n, ss, s;
 +    selectors.push(createSelector(family, name));
 +    for(n in node.derivedStyles) {
 +      if(node.derivedStyles.hasOwnProperty(n)) {
 +        ss = getSelectors(family, n, node.derivedStyles[n]);
 +        for(s in ss) {
 +          if(ss.hasOwnProperty(s)) {
 +            selectors.push(ss[s])
 +          }
 +        }
 +      }
 +    }
 +    return selectors
 +  }
 +  function getDirectChild(node, ns, name) {
 +    if(!node) {
 +      return null
 +    }
 +    var c = node.firstChild, e;
 +    while(c) {
 +      if(c.namespaceURI === ns && c.localName === name) {
 +        e = (c);
 +        return e
 +      }
 +      c = c.nextSibling
 +    }
 +    return null
 +  }
 +  function fixBorderWidth(value) {
 +    var index = value.indexOf(" "), width, theRestOfBorderAttributes;
 +    if(index !== -1) {
 +      width = value.substring(0, index);
 +      theRestOfBorderAttributes = value.substring(index)
 +    }else {
 +      width = value;
 +      theRestOfBorderAttributes = ""
 +    }
 +    width = utils.parseLength(width);
 +    if(width && (width.unit === "pt" && width.value < 0.75)) {
 +      value = "0.75pt" + theRestOfBorderAttributes
 +    }
 +    return value
 +  }
 +  function applySimpleMapping(props, mapping) {
 +    var rule = "", r, value;
 +    for(r in mapping) {
 +      if(mapping.hasOwnProperty(r)) {
 +        r = mapping[r];
 +        value = props.getAttributeNS(r[0], r[1]);
 +        if(value) {
 +          value = value.trim();
 +          if(borderPropertyMap.hasOwnProperty(r[1])) {
 +            value = fixBorderWidth(value)
 +          }
 +          if(r[2]) {
 +            rule += r[2] + ":" + value + ";"
 +          }
 +        }
 +      }
 +    }
 +    return rule
 +  }
 +  function getFontSize(styleNode) {
 +    var props = getDirectChild((styleNode), stylens, "text-properties");
 +    if(props) {
 +      return utils.parseFoFontSize(props.getAttributeNS(fons, "font-size"))
 +    }
 +    return null
 +  }
 +  function getParentStyleNode(styleNode) {
 +    var parentStyleName = "", parentStyleFamily = "", parentStyleNode = null, xp;
 +    if(styleNode.localName === "default-style") {
 +      return null
 +    }
 +    parentStyleName = styleNode.getAttributeNS(stylens, "parent-style-name");
 +    parentStyleFamily = styleNode.getAttributeNS(stylens, "family");
 +    if(parentStyleName) {
 +      xp = "//style:*[@style:name='" + parentStyleName + "'][@style:family='" + parentStyleFamily + "']"
 +    }else {
 +      xp = "//style:default-style[@style:family='" + parentStyleFamily + "']"
 +    }
 +    parentStyleNode = xpath.getODFElementsWithXPath((odfRoot), xp, odf.Namespaces.resolvePrefix)[0];
 +    return parentStyleNode
 +  }
 +  function getTextProperties(props) {
 +    var rule = "", fontName, fontSize, value, textDecoration = "", fontSizeRule = "", sizeMultiplier = 1, parentStyle;
 +    rule += applySimpleMapping(props, textPropertySimpleMapping);
 +    value = props.getAttributeNS(stylens, "text-underline-style");
 +    if(value === "solid") {
 +      textDecoration += " underline"
 +    }
 +    value = props.getAttributeNS(stylens, "text-line-through-style");
 +    if(value === "solid") {
 +      textDecoration += " line-through"
 +    }
 +    if(textDecoration.length) {
 +      textDecoration = "text-decoration:" + textDecoration + ";";
 +      rule += textDecoration
 +    }
 +    fontName = props.getAttributeNS(stylens, "font-name") || props.getAttributeNS(fons, "font-family");
 +    if(fontName) {
 +      value = fontFaceDeclsMap[fontName];
 +      rule += "font-family: " + (value || fontName) + ";"
 +    }
 +    parentStyle = props.parentNode;
 +    fontSize = getFontSize((parentStyle));
 +    if(!fontSize) {
 +      return rule
 +    }
 +    while(parentStyle) {
 +      fontSize = getFontSize((parentStyle));
 +      if(fontSize) {
 +        if(fontSize.unit !== "%") {
 +          fontSizeRule = "font-size: " + fontSize.value * sizeMultiplier + fontSize.unit + ";";
 +          break
 +        }
 +        sizeMultiplier *= fontSize.value / 100
 +      }
 +      parentStyle = getParentStyleNode(parentStyle)
 +    }
 +    if(!fontSizeRule) {
 +      fontSizeRule = "font-size: " + parseFloat(defaultFontSize) * sizeMultiplier + cssUnits.getUnits(defaultFontSize) + ";"
 +    }
 +    rule += fontSizeRule;
 +    return rule
 +  }
 +  function getParagraphProperties(props) {
 +    var rule = "", imageProps, url, element, lineHeight;
 +    rule += applySimpleMapping(props, paragraphPropertySimpleMapping);
 +    imageProps = props.getElementsByTagNameNS(stylens, "background-image");
 +    if(imageProps.length > 0) {
 +      url = imageProps.item(0).getAttributeNS(xlinkns, "href");
 +      if(url) {
 +        rule += "background-image: url('odfkit:" + url + "');";
 +        element = (imageProps.item(0));
 +        rule += applySimpleMapping(element, bgImageSimpleMapping)
 +      }
 +    }
 +    lineHeight = props.getAttributeNS(fons, "line-height");
 +    if(lineHeight && lineHeight !== "normal") {
 +      lineHeight = utils.parseFoLineHeight(lineHeight);
 +      if(lineHeight.unit !== "%") {
 +        rule += "line-height: " + lineHeight.value + lineHeight.unit + ";"
 +      }else {
 +        rule += "line-height: " + lineHeight.value / 100 + ";"
 +      }
 +    }
 +    return rule
 +  }
 +  function hexToRgb(hex) {
 +    var result, shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
 +    hex = hex.replace(shorthandRegex, function(m, r, g, b) {
 +      return r + r + g + g + b + b
 +    });
 +    result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
 +    return result ? {r:parseInt(result[1], 16), g:parseInt(result[2], 16), b:parseInt(result[3], 16)} : null
 +  }
 +  function isNumber(n) {
 +    return!isNaN(parseFloat(n))
 +  }
 +  function getGraphicProperties(props) {
 +    var rule = "", alpha, bgcolor, fill;
 +    rule += applySimpleMapping(props, graphicPropertySimpleMapping);
 +    alpha = props.getAttributeNS(drawns, "opacity");
 +    fill = props.getAttributeNS(drawns, "fill");
 +    bgcolor = props.getAttributeNS(drawns, "fill-color");
 +    if(fill === "solid" || fill === "hatch") {
 +      if(bgcolor && bgcolor !== "none") {
 +        alpha = isNumber(alpha) ? parseFloat(alpha) / 100 : 1;
 +        bgcolor = hexToRgb(bgcolor);
 +        if(bgcolor) {
 +          rule += "background-color: rgba(" + bgcolor.r + "," + bgcolor.g + "," + bgcolor.b + "," + alpha + ");"
 +        }
 +      }else {
 +        rule += "background: none;"
 +      }
 +    }else {
 +      if(fill === "none") {
 +        rule += "background: none;"
 +      }
 +    }
 +    return rule
 +  }
 +  function getDrawingPageProperties(props) {
 +    var rule = "";
 +    rule += applySimpleMapping(props, graphicPropertySimpleMapping);
 +    if(props.getAttributeNS(presentationns, "background-visible") === "true") {
 +      rule += "background: none;"
 +    }
 +    return rule
 +  }
 +  function getTableCellProperties(props) {
 +    var rule = "";
 +    rule += applySimpleMapping(props, tablecellPropertySimpleMapping);
 +    return rule
 +  }
 +  function getTableRowProperties(props) {
 +    var rule = "";
 +    rule += applySimpleMapping(props, tablerowPropertySimpleMapping);
 +    return rule
 +  }
 +  function getTableColumnProperties(props) {
 +    var rule = "";
 +    rule += applySimpleMapping(props, tablecolumnPropertySimpleMapping);
 +    return rule
 +  }
 +  function getTableProperties(props) {
 +    var rule = "", borderModel;
 +    rule += applySimpleMapping(props, tablePropertySimpleMapping);
 +    borderModel = props.getAttributeNS(tablens, "border-model");
 +    if(borderModel === "collapsing") {
 +      rule += "border-collapse:collapse;"
 +    }else {
 +      if(borderModel === "separating") {
 +        rule += "border-collapse:separate;"
 +      }
 +    }
 +    return rule
 +  }
 +  function addStyleRule(sheet, family, name, node) {
 +    var selectors = getSelectors(family, name, node), selector = selectors.join(","), rule = "", properties = getDirectChild(node, stylens, "text-properties");
 +    if(properties) {
 +      rule += getTextProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "paragraph-properties");
 +    if(properties) {
 +      rule += getParagraphProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "graphic-properties");
 +    if(properties) {
 +      rule += getGraphicProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "drawing-page-properties");
 +    if(properties) {
 +      rule += getDrawingPageProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "table-cell-properties");
 +    if(properties) {
 +      rule += getTableCellProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "table-row-properties");
 +    if(properties) {
 +      rule += getTableRowProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "table-column-properties");
 +    if(properties) {
 +      rule += getTableColumnProperties(properties)
 +    }
 +    properties = getDirectChild(node, stylens, "table-properties");
 +    if(properties) {
 +      rule += getTableProperties(properties)
 +    }
 +    if(rule.length === 0) {
 +      return
 +    }
 +    rule = selector + "{" + rule + "}";
 +    try {
 +      sheet.insertRule(rule, sheet.cssRules.length)
 +    }catch(e) {
 +      throw e;
 +    }
 +  }
 +  function getNumberRule(node) {
 +    var style = node.getAttributeNS(stylens, "num-format"), suffix = node.getAttributeNS(stylens, "num-suffix"), prefix = node.getAttributeNS(stylens, "num-prefix"), stylemap = {1:"decimal", "a":"lower-latin", "A":"upper-latin", "i":"lower-roman", "I":"upper-roman"}, content = prefix || "";
 +    if(stylemap.hasOwnProperty(style)) {
 +      content += " counter(list, " + stylemap[style] + ")"
 +    }else {
 +      if(style) {
 +        content += "'" + style + "';"
 +      }else {
 +        content += " ''"
 +      }
 +    }
 +    if(suffix) {
 +      content += " '" + suffix + "'"
 +    }
 +    return"content: " + content + ";"
 +  }
 +  function getImageRule() {
 +    var rule = "content: none;";
 +    return rule
 +  }
 +  function getBulletRule(node) {
 +    var bulletChar = node.getAttributeNS(textns, "bullet-char");
 +    return"content: '" + bulletChar + "';"
 +  }
 +  function addListStyleRule(sheet, name, node, itemrule) {
 +    var selector = 'text|list[text|style-name="' + name + '"]', level = node.getAttributeNS(textns, "level"), itemSelector, listItemRule, listLevelProps = utils.getFirstNonWhitespaceChild(node), listLevelLabelAlign = utils.getFirstNonWhitespaceChild(listLevelProps), labelAlignAttr, bulletIndent, listIndent, bulletWidth, rule;
 +    if(listLevelLabelAlign) {
 +      labelAlignAttr = listLevelLabelAlign.attributes;
 +      bulletIndent = labelAlignAttr["fo:text-indent"] ? labelAlignAttr["fo:text-indent"].value : undefined;
 +      listIndent = labelAlignAttr["fo:margin-left"] ? labelAlignAttr["fo:margin-left"].value : undefined
 +    }
 +    if(!bulletIndent) {
 +      bulletIndent = "-0.6cm"
 +    }
 +    if(bulletIndent.charAt(0) === "-") {
 +      bulletWidth = bulletIndent.substring(1)
 +    }else {
 +      bulletWidth = "-" + bulletIndent
 +    }
 +    level = level && parseInt(level, 10);
 +    while(level > 1) {
 +      selector += " > text|list-item > text|list";
 +      level -= 1
 +    }
 +    itemSelector = selector;
 +    itemSelector += " > text|list-item > *:not(text|list):first-child";
 +    if(listIndent !== undefined) {
 +      listItemRule = itemSelector + "{margin-left:" + listIndent + ";}";
 +      sheet.insertRule(listItemRule, sheet.cssRules.length)
 +    }
 +    selector += " > text|list-item > *:not(text|list):first-child:before";
 +    rule = itemrule;
 +    rule = selector + "{" + rule + ";";
 +    rule += "counter-increment:list;";
 +    rule += "margin-left:" + bulletIndent + ";";
 +    rule += "width:" + bulletWidth + ";";
 +    rule += "display:inline-block}";
 +    try {
 +      sheet.insertRule(rule, sheet.cssRules.length)
 +    }catch(e) {
 +      throw e;
 +    }
 +  }
 +  function addPageStyleRules(sheet, node) {
 +    var rule = "", imageProps, url, element, contentLayoutRule = "", pageSizeRule = "", props = node.getElementsByTagNameNS(stylens, "page-layout-properties")[0], masterStyles = props.parentNode.parentNode.parentNode.masterStyles, masterPages, masterStyleName = "", i;
 +    rule += applySimpleMapping(props, pageContentPropertySimpleMapping);
 +    imageProps = props.getElementsByTagNameNS(stylens, "background-image");
 +    if(imageProps.length > 0) {
 +      url = imageProps.item(0).getAttributeNS(xlinkns, "href");
 +      if(url) {
 +        rule += "background-image: url('odfkit:" + url + "');";
 +        element = (imageProps.item(0));
 +        rule += applySimpleMapping(element, bgImageSimpleMapping)
 +      }
 +    }
 +    if(documentType === "presentation") {
 +      if(masterStyles) {
 +        masterPages = masterStyles.getElementsByTagNameNS(stylens, "master-page");
 +        for(i = 0;i < masterPages.length;i += 1) {
 +          if(masterPages[i].getAttributeNS(stylens, "page-layout-name") === props.parentNode.getAttributeNS(stylens, "name")) {
 +            masterStyleName = masterPages[i].getAttributeNS(stylens, "name");
 +            contentLayoutRule = "draw|page[draw|master-page-name=" + masterStyleName + "] {" + rule + "}";
 +            pageSizeRule = "office|body, draw|page[draw|master-page-name=" + masterStyleName + "] {" + applySimpleMapping(props, pageSizePropertySimpleMapping) + " }";
 +            try {
 +              sheet.insertRule(contentLayoutRule, sheet.cssRules.length);
 +              sheet.insertRule(pageSizeRule, sheet.cssRules.length)
 +            }catch(e1) {
 +              throw e1;
 +            }
 +          }
 +        }
 +      }
 +    }else {
 +      if(documentType === "text") {
 +        contentLayoutRule = "office|text {" + rule + "}";
 +        rule = "";
 +        pageSizeRule = "office|body {" + "width: " + props.getAttributeNS(fons, "page-width") + ";" + "}";
 +        try {
 +          sheet.insertRule(contentLayoutRule, sheet.cssRules.length);
 +          sheet.insertRule(pageSizeRule, sheet.cssRules.length)
 +        }catch(e2) {
 +          throw e2;
 +        }
 +      }
 +    }
 +  }
 +  function addListStyleRules(sheet, name, node) {
 +    var n = node.firstChild, e, itemrule;
 +    while(n) {
 +      if(n.namespaceURI === textns) {
 +        e = (n);
 +        if(n.localName === "list-level-style-number") {
 +          itemrule = getNumberRule(e);
 +          addListStyleRule(sheet, name, e, itemrule)
 +        }else {
 +          if(n.localName === "list-level-style-image") {
 +            itemrule = getImageRule();
 +            addListStyleRule(sheet, name, e, itemrule)
 +          }else {
 +            if(n.localName === "list-level-style-bullet") {
 +              itemrule = getBulletRule(e);
 +              addListStyleRule(sheet, name, e, itemrule)
 +            }
 +          }
 +        }
 +      }
 +      n = n.nextSibling
 +    }
 +  }
 +  function addRule(sheet, family, name, node) {
 +    if(family === "list") {
 +      addListStyleRules(sheet, name, node)
 +    }else {
 +      if(family === "page") {
 +        addPageStyleRules(sheet, node)
 +      }else {
 +        addStyleRule(sheet, family, name, node)
 +      }
 +    }
 +  }
 +  function addRules(sheet, family, name, node) {
 +    addRule(sheet, family, name, node);
 +    var n;
 +    for(n in node.derivedStyles) {
 +      if(node.derivedStyles.hasOwnProperty(n)) {
 +        addRules(sheet, family, n, node.derivedStyles[n])
 +      }
 +    }
 +  }
 +  this.style2css = function(doctype, stylesheet, fontFaceMap, styles, autostyles) {
 +    var doc, styletree, tree, name, rule, family, stylenodes, styleautonodes;
 +    while(stylesheet.cssRules.length) {
 +      stylesheet.deleteRule(stylesheet.cssRules.length - 1)
 +    }
 +    doc = null;
 +    if(styles) {
 +      doc = styles.ownerDocument;
 +      odfRoot = styles.parentNode
 +    }
 +    if(autostyles) {
 +      doc = autostyles.ownerDocument;
 +      odfRoot = autostyles.parentNode
 +    }
 +    if(!doc) {
 +      return
 +    }
 +    odf.Namespaces.forEachPrefix(function(prefix, ns) {
 +      rule = "@namespace " + prefix + " url(" + ns + ");";
 +      try {
 +        stylesheet.insertRule(rule, stylesheet.cssRules.length)
 +      }catch(ignore) {
 +      }
 +    });
 +    fontFaceDeclsMap = fontFaceMap;
 +    documentType = doctype;
 +    defaultFontSize = runtime.getWindow().getComputedStyle(document.body, null).getPropertyValue("font-size") || "12pt";
 +    stylenodes = getStyleMap(styles);
 +    styleautonodes = getStyleMap(autostyles);
 +    styletree = {};
 +    for(family in familynamespaceprefixes) {
 +      if(familynamespaceprefixes.hasOwnProperty(family)) {
 +        tree = styletree[family] = {};
 +        addStyleMapToStyleTree(stylenodes[family], tree);
 +        addStyleMapToStyleTree(styleautonodes[family], tree);
 +        for(name in tree) {
 +          if(tree.hasOwnProperty(name)) {
 +            addRules(stylesheet, family, name, tree[name])
 +          }
 +        }
 +      }
 +    }
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Base64");
 +runtime.loadClass("core.Zip");
 +runtime.loadClass("xmldom.LSSerializer");
 +runtime.loadClass("odf.StyleInfo");
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("odf.OdfNodeFilter");
 +odf.OdfContainer = function() {
 +  var styleInfo = new odf.StyleInfo, officens = "urn:oasis:names:tc:opendocument:xmlns:office:1.0", manifestns = "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0", webodfns = "urn:webodf:names:scope", stylens = odf.Namespaces.stylens, nodeorder = ["meta", "settings", "scripts", "font-face-decls", "styles", "automatic-styles", "master-styles", "body"], automaticStylePrefix = (new Date).getTime() + "_webodf_", base64 = new core.Base64, documentStylesScope = "document-styles", documentC [...]
 +  "document-content";
 +  function getDirectChild(node, ns, name) {
 +    node = node ? node.firstChild : null;
 +    while(node) {
 +      if(node.localName === name && node.namespaceURI === ns) {
 +        return(node)
 +      }
 +      node = node.nextSibling
 +    }
 +    return null
 +  }
 +  function getNodePosition(child) {
 +    var i, l = nodeorder.length;
 +    for(i = 0;i < l;i += 1) {
 +      if(child.namespaceURI === officens && child.localName === nodeorder[i]) {
 +        return i
 +      }
 +    }
 +    return-1
 +  }
 +  function OdfStylesFilter(styleUsingElementsRoot, automaticStyles) {
 +    var usedStyleList = new styleInfo.UsedStyleList(styleUsingElementsRoot, automaticStyles), odfNodeFilter = new odf.OdfNodeFilter;
 +    this.acceptNode = function(node) {
 +      var result = odfNodeFilter.acceptNode(node);
 +      if(result === NodeFilter.FILTER_ACCEPT && (node.parentNode === automaticStyles && node.nodeType === Node.ELEMENT_NODE)) {
 +        if(usedStyleList.uses((node))) {
 +          result = NodeFilter.FILTER_ACCEPT
 +        }else {
 +          result = NodeFilter.FILTER_REJECT
 +        }
 +      }
 +      return result
 +    }
 +  }
 +  function OdfContentFilter(styleUsingElementsRoot, automaticStyles) {
 +    var odfStylesFilter = new OdfStylesFilter(styleUsingElementsRoot, automaticStyles);
 +    this.acceptNode = function(node) {
 +      var result = odfStylesFilter.acceptNode(node);
 +      if(result === NodeFilter.FILTER_ACCEPT && (node.parentNode && (node.parentNode.namespaceURI === odf.Namespaces.textns && (node.parentNode.localName === "s" || node.parentNode.localName === "tab")))) {
 +        result = NodeFilter.FILTER_REJECT
 +      }
 +      return result
 +    }
 +  }
 +  function setChild(node, child) {
 +    if(!child) {
 +      return
 +    }
 +    var childpos = getNodePosition(child), pos, c = node.firstChild;
 +    if(childpos === -1) {
 +      return
 +    }
 +    while(c) {
 +      pos = getNodePosition(c);
 +      if(pos !== -1 && pos > childpos) {
 +        break
 +      }
 +      c = c.nextSibling
 +    }
 +    node.insertBefore(child, c)
 +  }
 +  function ODFElement() {
 +  }
 +  function ODFDocumentElement(odfcontainer) {
 +    this.OdfContainer = odfcontainer
 +  }
 +  ODFDocumentElement.prototype = new ODFElement;
 +  ODFDocumentElement.prototype.constructor = ODFDocumentElement;
 +  ODFDocumentElement.namespaceURI = officens;
 +  ODFDocumentElement.localName = "document";
 +  function OdfPart(name, mimetype, container, zip) {
 +    var self = this;
 +    this.size = 0;
 +    this.type = null;
 +    this.name = name;
 +    this.container = container;
 +    this.url = null;
 +    this.mimetype = null;
 +    this.document = null;
 +    this.onreadystatechange = null;
 +    this.onchange = null;
 +    this.EMPTY = 0;
 +    this.LOADING = 1;
 +    this.DONE = 2;
 +    this.state = this.EMPTY;
 +    this.load = function() {
 +      if(zip === null) {
 +        return
 +      }
 +      this.mimetype = mimetype;
 +      zip.loadAsDataURL(name, mimetype, function(err, url) {
 +        if(err) {
 +          runtime.log(err)
 +        }
 +        self.url = url;
 +        if(self.onchange) {
 +          self.onchange(self)
 +        }
 +        if(self.onstatereadychange) {
 +          self.onstatereadychange(self)
 +        }
 +      })
 +    }
 +  }
 +  OdfPart.prototype.load = function() {
 +  };
 +  OdfPart.prototype.getUrl = function() {
 +    if(this.data) {
 +      return"data:;base64," + base64.toBase64(this.data)
 +    }
 +    return null
 +  };
 +  odf.OdfContainer = function OdfContainer(url, onstatereadychange) {
 +    var self = this, zip, partMimetypes = {}, contentElement;
 +    this.onstatereadychange = onstatereadychange;
 +    this.onchange = null;
 +    this.state = null;
 +    this.rootElement = null;
 +    function removeProcessingInstructions(element) {
 +      var n = element.firstChild, next, e;
 +      while(n) {
 +        next = n.nextSibling;
 +        if(n.nodeType === Node.ELEMENT_NODE) {
 +          e = (n);
 +          removeProcessingInstructions(e)
 +        }else {
 +          if(n.nodeType === Node.PROCESSING_INSTRUCTION_NODE) {
 +            element.removeChild(n)
 +          }
 +        }
 +        n = next
 +      }
 +    }
 +    function setAutomaticStylesScope(stylesRootElement, scope) {
 +      var n = stylesRootElement && stylesRootElement.firstChild;
 +      while(n) {
 +        if(n.nodeType === Node.ELEMENT_NODE) {
 +          n.setAttributeNS(webodfns, "scope", scope)
 +        }
 +        n = n.nextSibling
 +      }
 +    }
 +    function mergeFontFaceDecls(targetFontFaceDeclsRootElement, sourceFontFaceDeclsRootElement) {
 +      var n, s, fontFaceName, newFontFaceName, targetFontFaceDeclsMap, sourceFontFaceDeclsMap, fontFaceNameChangeMap = {};
 +      function unusedKey(key, map1, map2) {
 +        var i = 0, postFixedKey;
 +        key = key.replace(/\d+$/, "");
 +        postFixedKey = key;
 +        while(map1.hasOwnProperty(postFixedKey) || map2.hasOwnProperty(postFixedKey)) {
 +          i += 1;
 +          postFixedKey = key + i
 +        }
 +        return postFixedKey
 +      }
 +      function mapByFontFaceName(fontFaceDecls) {
 +        var fn, result = {};
 +        fn = fontFaceDecls.firstChild;
 +        while(fn) {
 +          if(fn.nodeType === Node.ELEMENT_NODE && (fn.namespaceURI === stylens && fn.localName === "font-face")) {
 +            fontFaceName = fn.getAttributeNS(stylens, "name");
 +            result[fontFaceName] = fn
 +          }
 +          fn = fn.nextSibling
 +        }
 +        return result
 +      }
 +      targetFontFaceDeclsMap = mapByFontFaceName(targetFontFaceDeclsRootElement);
 +      sourceFontFaceDeclsMap = mapByFontFaceName(sourceFontFaceDeclsRootElement);
 +      n = sourceFontFaceDeclsRootElement.firstChild;
 +      while(n) {
 +        s = n.nextSibling;
 +        if(n.nodeType === Node.ELEMENT_NODE && (n.namespaceURI === stylens && n.localName === "font-face")) {
 +          fontFaceName = n.getAttributeNS(stylens, "name");
 +          if(targetFontFaceDeclsMap.hasOwnProperty(fontFaceName)) {
 +            if(!n.isEqualNode(targetFontFaceDeclsMap[fontFaceName])) {
 +              newFontFaceName = unusedKey(fontFaceName, targetFontFaceDeclsMap, sourceFontFaceDeclsMap);
 +              n.setAttributeNS(stylens, "style:name", newFontFaceName);
 +              targetFontFaceDeclsRootElement.appendChild(n);
 +              targetFontFaceDeclsMap[newFontFaceName] = (n);
 +              delete sourceFontFaceDeclsMap[fontFaceName];
 +              fontFaceNameChangeMap[fontFaceName] = newFontFaceName
 +            }
 +          }else {
 +            targetFontFaceDeclsRootElement.appendChild(n);
 +            targetFontFaceDeclsMap[fontFaceName] = (n);
 +            delete sourceFontFaceDeclsMap[fontFaceName]
 +          }
 +        }
 +        n = s
 +      }
 +      return fontFaceNameChangeMap
 +    }
 +    function cloneStylesInScope(stylesRootElement, scope) {
 +      var copy = null, n, s, scopeAttrValue;
 +      if(stylesRootElement) {
 +        copy = stylesRootElement.cloneNode(true);
 +        n = copy.firstChild;
 +        while(n) {
 +          s = n.nextSibling;
 +          if(n.nodeType === Node.ELEMENT_NODE) {
 +            scopeAttrValue = n.getAttributeNS(webodfns, "scope");
 +            if(scopeAttrValue && scopeAttrValue !== scope) {
 +              copy.removeChild(n)
 +            }
 +          }
 +          n = s
 +        }
 +      }
 +      return copy
 +    }
 +    function cloneFontFaceDeclsUsedInStyles(fontFaceDeclsRootElement, stylesRootElementList) {
 +      var copy = null, n, nextSibling, fontFaceName, usedFontFaceDeclMap = {};
 +      if(fontFaceDeclsRootElement) {
 +        stylesRootElementList.forEach(function(stylesRootElement) {
 +          styleInfo.collectUsedFontFaces(usedFontFaceDeclMap, stylesRootElement)
 +        });
 +        copy = fontFaceDeclsRootElement.cloneNode(true);
 +        n = copy.firstChild;
 +        while(n) {
 +          nextSibling = n.nextSibling;
 +          if(n.nodeType === Node.ELEMENT_NODE) {
 +            fontFaceName = n.getAttributeNS(stylens, "name");
 +            if(!usedFontFaceDeclMap[fontFaceName]) {
 +              copy.removeChild(n)
 +            }
 +          }
 +          n = nextSibling
 +        }
 +      }
 +      return copy
 +    }
 +    function importRootNode(xmldoc) {
 +      var doc = self.rootElement.ownerDocument, node;
 +      if(xmldoc) {
 +        removeProcessingInstructions(xmldoc.documentElement);
 +        try {
 +          node = doc.importNode(xmldoc.documentElement, true)
 +        }catch(ignore) {
 +        }
 +      }
 +      return node
 +    }
 +    function setState(state) {
 +      self.state = state;
 +      if(self.onchange) {
 +        self.onchange(self)
 +      }
 +      if(self.onstatereadychange) {
 +        self.onstatereadychange(self)
 +      }
 +    }
 +    function setRootElement(root) {
 +      contentElement = null;
 +      self.rootElement = root;
 +      root.fontFaceDecls = getDirectChild(root, officens, "font-face-decls");
 +      root.styles = getDirectChild(root, officens, "styles");
 +      root.automaticStyles = getDirectChild(root, officens, "automatic-styles");
 +      root.masterStyles = getDirectChild(root, officens, "master-styles");
 +      root.body = getDirectChild(root, officens, "body");
 +      root.meta = getDirectChild(root, officens, "meta")
 +    }
 +    function handleFlatXml(xmldoc) {
 +      var root = importRootNode(xmldoc);
 +      if(!root || (root.localName !== "document" || root.namespaceURI !== officens)) {
 +        setState(OdfContainer.INVALID);
 +        return
 +      }
 +      setRootElement((root));
 +      setState(OdfContainer.DONE)
 +    }
 +    function handleStylesXml(xmldoc) {
 +      var node = importRootNode(xmldoc), root = self.rootElement;
 +      if(!node || (node.localName !== "document-styles" || node.namespaceURI !== officens)) {
 +        setState(OdfContainer.INVALID);
 +        return
 +      }
 +      root.fontFaceDecls = getDirectChild(node, officens, "font-face-decls");
 +      setChild(root, root.fontFaceDecls);
 +      root.styles = getDirectChild(node, officens, "styles");
 +      setChild(root, root.styles);
 +      root.automaticStyles = getDirectChild(node, officens, "automatic-styles");
 +      setAutomaticStylesScope(root.automaticStyles, documentStylesScope);
 +      setChild(root, root.automaticStyles);
 +      root.masterStyles = getDirectChild(node, officens, "master-styles");
 +      setChild(root, root.masterStyles);
 +      styleInfo.prefixStyleNames(root.automaticStyles, automaticStylePrefix, root.masterStyles)
 +    }
 +    function handleContentXml(xmldoc) {
 +      var node = importRootNode(xmldoc), root, automaticStyles, fontFaceDecls, fontFaceNameChangeMap, c;
 +      if(!node || (node.localName !== "document-content" || node.namespaceURI !== officens)) {
 +        setState(OdfContainer.INVALID);
 +        return
 +      }
 +      root = self.rootElement;
 +      fontFaceDecls = getDirectChild(node, officens, "font-face-decls");
 +      if(root.fontFaceDecls && fontFaceDecls) {
 +        fontFaceNameChangeMap = mergeFontFaceDecls(root.fontFaceDecls, fontFaceDecls)
 +      }else {
 +        if(fontFaceDecls) {
 +          root.fontFaceDecls = fontFaceDecls;
 +          setChild(root, fontFaceDecls)
 +        }
 +      }
 +      automaticStyles = getDirectChild(node, officens, "automatic-styles");
 +      setAutomaticStylesScope(automaticStyles, documentContentScope);
 +      if(fontFaceNameChangeMap) {
 +        styleInfo.changeFontFaceNames(automaticStyles, fontFaceNameChangeMap)
 +      }
 +      if(root.automaticStyles && automaticStyles) {
 +        c = automaticStyles.firstChild;
 +        while(c) {
 +          root.automaticStyles.appendChild(c);
 +          c = automaticStyles.firstChild
 +        }
 +      }else {
 +        if(automaticStyles) {
 +          root.automaticStyles = automaticStyles;
 +          setChild(root, automaticStyles)
 +        }
 +      }
 +      root.body = getDirectChild(node, officens, "body");
 +      setChild(root, root.body)
 +    }
 +    function handleMetaXml(xmldoc) {
 +      var node = importRootNode(xmldoc), root;
 +      if(!node || (node.localName !== "document-meta" || node.namespaceURI !== officens)) {
 +        return
 +      }
 +      root = self.rootElement;
 +      root.meta = getDirectChild(node, officens, "meta");
 +      setChild(root, root.meta)
 +    }
 +    function handleSettingsXml(xmldoc) {
 +      var node = importRootNode(xmldoc), root;
 +      if(!node || (node.localName !== "document-settings" || node.namespaceURI !== officens)) {
 +        return
 +      }
 +      root = self.rootElement;
 +      root.settings = getDirectChild(node, officens, "settings");
 +      setChild(root, root.settings)
 +    }
 +    function handleManifestXml(xmldoc) {
 +      var node = importRootNode(xmldoc), root, n;
 +      if(!node || (node.localName !== "manifest" || node.namespaceURI !== manifestns)) {
 +        return
 +      }
 +      root = self.rootElement;
 +      root.manifest = node;
 +      n = root.manifest.firstChild;
 +      while(n) {
 +        if(n.nodeType === Node.ELEMENT_NODE && (n.localName === "file-entry" && n.namespaceURI === manifestns)) {
 +          partMimetypes[n.getAttributeNS(manifestns, "full-path")] = n.getAttributeNS(manifestns, "media-type")
 +        }
 +        n = n.nextSibling
 +      }
 +    }
 +    function loadNextComponent(remainingComponents) {
 +      var component = remainingComponents.shift(), filepath, callback;
 +      if(component) {
 +        filepath = (component[0]);
 +        callback = (component[1]);
 +        zip.loadAsDOM(filepath, function(err, xmldoc) {
 +          callback(xmldoc);
 +          if(err || self.state === OdfContainer.INVALID) {
 +            return
 +          }
 +          loadNextComponent(remainingComponents)
 +        })
 +      }else {
 +        setState(OdfContainer.DONE)
 +      }
 +    }
 +    function loadComponents() {
 +      var componentOrder = [["styles.xml", handleStylesXml], ["content.xml", handleContentXml], ["meta.xml", handleMetaXml], ["settings.xml", handleSettingsXml], ["META-INF/manifest.xml", handleManifestXml]];
 +      loadNextComponent(componentOrder)
 +    }
 +    function createDocumentElement(name) {
 +      var s = "";
 +      odf.Namespaces.forEachPrefix(function(prefix, ns) {
 +        s += " xmlns:" + prefix + '="' + ns + '"'
 +      });
 +      return'<?xml version="1.0" encoding="UTF-8"?><office:' + name + " " + s + ' office:version="1.2">'
 +    }
 +    function serializeMetaXml() {
 +      var serializer = new xmldom.LSSerializer, s = createDocumentElement("document-meta");
 +      serializer.filter = new odf.OdfNodeFilter;
 +      s += serializer.writeToString(self.rootElement.meta, odf.Namespaces.namespaceMap);
 +      s += "</office:document-meta>";
 +      return s
 +    }
 +    function createManifestEntry(fullPath, mediaType) {
 +      var element = document.createElementNS(manifestns, "manifest:file-entry");
 +      element.setAttributeNS(manifestns, "manifest:full-path", fullPath);
 +      element.setAttributeNS(manifestns, "manifest:media-type", mediaType);
 +      return element
 +    }
 +    function serializeManifestXml() {
 +      var header = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n', xml = '<manifest:manifest xmlns:manifest="' + manifestns + '" manifest:version="1.2"></manifest:manifest>', manifest = (runtime.parseXML(xml)), manifestRoot = getDirectChild(manifest, manifestns, "manifest"), serializer = new xmldom.LSSerializer, fullPath;
 +      for(fullPath in partMimetypes) {
 +        if(partMimetypes.hasOwnProperty(fullPath)) {
 +          manifestRoot.appendChild(createManifestEntry(fullPath, partMimetypes[fullPath]))
 +        }
 +      }
 +      serializer.filter = new odf.OdfNodeFilter;
 +      return header + serializer.writeToString(manifest, odf.Namespaces.namespaceMap)
 +    }
 +    function serializeSettingsXml() {
 +      var serializer = new xmldom.LSSerializer, s = createDocumentElement("document-settings");
 +      serializer.filter = new odf.OdfNodeFilter;
 +      s += serializer.writeToString(self.rootElement.settings, odf.Namespaces.namespaceMap);
 +      s += "</office:document-settings>";
 +      return s
 +    }
 +    function serializeStylesXml() {
 +      var nsmap = odf.Namespaces.namespaceMap, serializer = new xmldom.LSSerializer, fontFaceDecls, automaticStyles, masterStyles, s = createDocumentElement("document-styles");
 +      automaticStyles = cloneStylesInScope(self.rootElement.automaticStyles, documentStylesScope);
 +      masterStyles = self.rootElement.masterStyles && self.rootElement.masterStyles.cloneNode(true);
 +      fontFaceDecls = cloneFontFaceDeclsUsedInStyles(self.rootElement.fontFaceDecls, [masterStyles, self.rootElement.styles, automaticStyles]);
 +      styleInfo.removePrefixFromStyleNames(automaticStyles, automaticStylePrefix, masterStyles);
 +      serializer.filter = new OdfStylesFilter(masterStyles, automaticStyles);
 +      s += serializer.writeToString(fontFaceDecls, nsmap);
 +      s += serializer.writeToString(self.rootElement.styles, nsmap);
 +      s += serializer.writeToString(automaticStyles, nsmap);
 +      s += serializer.writeToString(masterStyles, nsmap);
 +      s += "</office:document-styles>";
 +      return s
 +    }
 +    function serializeContentXml() {
 +      var nsmap = odf.Namespaces.namespaceMap, serializer = new xmldom.LSSerializer, fontFaceDecls, automaticStyles, s = createDocumentElement("document-content");
 +      automaticStyles = cloneStylesInScope(self.rootElement.automaticStyles, documentContentScope);
 +      fontFaceDecls = cloneFontFaceDeclsUsedInStyles(self.rootElement.fontFaceDecls, [automaticStyles]);
 +      serializer.filter = new OdfContentFilter(self.rootElement.body, automaticStyles);
 +      s += serializer.writeToString(fontFaceDecls, nsmap);
 +      s += serializer.writeToString(automaticStyles, nsmap);
 +      s += serializer.writeToString(self.rootElement.body, nsmap);
 +      s += "</office:document-content>";
 +      return s
 +    }
 +    function createElement(Type) {
 +      var original = document.createElementNS(Type.namespaceURI, Type.localName), method, iface = new Type;
 +      for(method in iface) {
 +        if(iface.hasOwnProperty(method)) {
 +          original[method] = iface[method]
 +        }
 +      }
 +      return original
 +    }
 +    function loadFromXML(url, callback) {
 +      runtime.loadXML(url, function(err, dom) {
 +        if(err) {
 +          callback(err)
 +        }else {
 +          handleFlatXml(dom)
 +        }
 +      })
 +    }
 +    this.setRootElement = setRootElement;
 +    this.getContentElement = function() {
 +      var body;
 +      if(!contentElement) {
 +        body = self.rootElement.body;
 +        contentElement = body.getElementsByTagNameNS(officens, "text")[0] || (body.getElementsByTagNameNS(officens, "presentation")[0] || body.getElementsByTagNameNS(officens, "spreadsheet")[0])
 +      }
 +      return contentElement
 +    };
 +    this.getDocumentType = function() {
 +      var content = self.getContentElement();
 +      return content && content.localName
 +    };
 +    this.getPart = function(partname) {
 +      return new OdfPart(partname, partMimetypes[partname], self, zip)
 +    };
 +    this.getPartData = function(url, callback) {
 +      zip.load(url, callback)
 +    };
 +    function createEmptyTextDocument() {
 +      var emptyzip = new core.Zip("", null), data = runtime.byteArrayFromString("application/vnd.oasis.opendocument.text", "utf8"), root = self.rootElement, text = document.createElementNS(officens, "text");
 +      emptyzip.save("mimetype", data, false, new Date);
 +      function addToplevelElement(memberName, realLocalName) {
 +        var element;
 +        if(!realLocalName) {
 +          realLocalName = memberName
 +        }
 +        element = document.createElementNS(officens, realLocalName);
 +        root[memberName] = element;
 +        root.appendChild(element)
 +      }
 +      addToplevelElement("meta");
 +      addToplevelElement("settings");
 +      addToplevelElement("scripts");
 +      addToplevelElement("fontFaceDecls", "font-face-decls");
 +      addToplevelElement("styles");
 +      addToplevelElement("automaticStyles", "automatic-styles");
 +      addToplevelElement("masterStyles", "master-styles");
 +      addToplevelElement("body");
 +      root.body.appendChild(text);
 +      setState(OdfContainer.DONE);
 +      return emptyzip
 +    }
 +    function fillZip() {
 +      var data, date = new Date;
 +      data = runtime.byteArrayFromString(serializeSettingsXml(), "utf8");
 +      zip.save("settings.xml", data, true, date);
 +      data = runtime.byteArrayFromString(serializeMetaXml(), "utf8");
 +      zip.save("meta.xml", data, true, date);
 +      data = runtime.byteArrayFromString(serializeStylesXml(), "utf8");
 +      zip.save("styles.xml", data, true, date);
 +      data = runtime.byteArrayFromString(serializeContentXml(), "utf8");
 +      zip.save("content.xml", data, true, date);
 +      data = runtime.byteArrayFromString(serializeManifestXml(), "utf8");
 +      zip.save("META-INF/manifest.xml", data, true, date)
 +    }
 +    function createByteArray(successCallback, errorCallback) {
 +      fillZip();
 +      zip.createByteArray(successCallback, errorCallback)
 +    }
 +    this.createByteArray = createByteArray;
 +    function saveAs(newurl, callback) {
 +      fillZip();
 +      zip.writeAs(newurl, function(err) {
 +        callback(err)
 +      })
 +    }
 +    this.saveAs = saveAs;
 +    this.save = function(callback) {
 +      saveAs(url, callback)
 +    };
 +    this.getUrl = function() {
 +      return url
 +    };
 +    this.setBlob = function(filename, mimetype, content) {
 +      var data = base64.convertBase64ToByteArray(content), date = new Date;
 +      zip.save(filename, data, false, date);
 +      if(partMimetypes.hasOwnProperty(filename)) {
 +        runtime.log(filename + " has been overwritten.")
 +      }
 +      partMimetypes[filename] = mimetype
 +    };
 +    this.removeBlob = function(filename) {
 +      var foundAndRemoved = zip.remove(filename);
 +      runtime.assert(foundAndRemoved, "file is not found: " + filename);
 +      delete partMimetypes[filename]
 +    };
 +    this.state = OdfContainer.LOADING;
 +    this.rootElement = createElement(ODFDocumentElement);
 +    if(url) {
 +      zip = new core.Zip(url, function(err, zipobject) {
 +        zip = zipobject;
 +        if(err) {
 +          loadFromXML(url, function(xmlerr) {
 +            if(err) {
 +              zip.error = err + "\n" + xmlerr;
 +              setState(OdfContainer.INVALID)
 +            }
 +          })
 +        }else {
 +          loadComponents()
 +        }
 +      })
 +    }else {
 +      zip = createEmptyTextDocument()
 +    }
 +  };
 +  odf.OdfContainer.EMPTY = 0;
 +  odf.OdfContainer.LOADING = 1;
 +  odf.OdfContainer.DONE = 2;
 +  odf.OdfContainer.INVALID = 3;
 +  odf.OdfContainer.SAVING = 4;
 +  odf.OdfContainer.MODIFIED = 5;
 +  odf.OdfContainer.getContainer = function(url) {
 +    return new odf.OdfContainer(url, null)
 +  };
 +  return odf.OdfContainer
 +}();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Base64");
 +runtime.loadClass("xmldom.XPath");
 +runtime.loadClass("odf.OdfContainer");
 +odf.FontLoader = function() {
 +  var xpath = new xmldom.XPath, base64 = new core.Base64;
 +  function getEmbeddedFontDeclarations(fontFaceDecls) {
 +    var decls = {}, fonts, i, font, name, uris, href, family;
 +    if(!fontFaceDecls) {
 +      return decls
 +    }
 +    fonts = xpath.getODFElementsWithXPath(fontFaceDecls, "style:font-face[svg:font-face-src]", odf.Namespaces.resolvePrefix);
 +    for(i = 0;i < fonts.length;i += 1) {
 +      font = fonts[i];
 +      name = font.getAttributeNS(odf.Namespaces.stylens, "name");
 +      family = font.getAttributeNS(odf.Namespaces.svgns, "font-family");
 +      uris = xpath.getODFElementsWithXPath(font, "svg:font-face-src/svg:font-face-uri", odf.Namespaces.resolvePrefix);
 +      if(uris.length > 0) {
 +        href = uris[0].getAttributeNS(odf.Namespaces.xlinkns, "href");
 +        decls[name] = {href:href, family:family}
 +      }
 +    }
 +    return decls
 +  }
 +  function addFontToCSS(name, font, fontdata, stylesheet) {
 +    var cssFamily = font.family || name, rule = "@font-face { font-family: '" + cssFamily + "'; src: " + "url(data:application/x-font-ttf;charset=binary;base64," + base64.convertUTF8ArrayToBase64(fontdata) + ') format("truetype"); }';
 +    try {
 +      stylesheet.insertRule(rule, stylesheet.cssRules.length)
 +    }catch(e) {
 +      runtime.log("Problem inserting rule in CSS: " + runtime.toJson(e) + "\nRule: " + rule)
 +    }
 +  }
 +  function loadFontIntoCSS(embeddedFontDeclarations, odfContainer, pos, stylesheet, callback) {
 +    var name, i = 0, n;
 +    for(n in embeddedFontDeclarations) {
 +      if(embeddedFontDeclarations.hasOwnProperty(n)) {
 +        if(i === pos) {
 +          name = n;
 +          break
 +        }
 +        i += 1
 +      }
 +    }
 +    if(!name) {
 +      if(callback) {
 +        callback()
 +      }
 +      return
 +    }
 +    odfContainer.getPartData(embeddedFontDeclarations[name].href, function(err, fontdata) {
 +      if(err) {
 +        runtime.log(err)
 +      }else {
 +        addFontToCSS(name, embeddedFontDeclarations[name], fontdata, stylesheet)
 +      }
 +      loadFontIntoCSS(embeddedFontDeclarations, odfContainer, pos + 1, stylesheet, callback)
 +    })
 +  }
 +  function loadFontsIntoCSS(embeddedFontDeclarations, odfContainer, stylesheet) {
 +    loadFontIntoCSS(embeddedFontDeclarations, odfContainer, 0, stylesheet)
 +  }
 +  odf.FontLoader = function FontLoader() {
 +    this.loadFonts = function(odfContainer, stylesheet) {
 +      var embeddedFontDeclarations, fontFaceDecls = odfContainer.rootElement.fontFaceDecls;
 +      while(stylesheet.cssRules.length) {
 +        stylesheet.deleteRule(stylesheet.cssRules.length - 1)
 +      }
 +      if(fontFaceDecls) {
 +        embeddedFontDeclarations = getEmbeddedFontDeclarations(fontFaceDecls);
 +        loadFontsIntoCSS(embeddedFontDeclarations, odfContainer, stylesheet)
 +      }
 +    }
 +  };
 +  return odf.FontLoader
 +}();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("core.Utils");
 +odf.ObjectNameGenerator = function ObjectNameGenerator(odfContainer, memberId) {
 +  var stylens = odf.Namespaces.stylens, drawns = odf.Namespaces.drawns, xlinkns = odf.Namespaces.xlinkns, domUtils = new core.DomUtils, utils = new core.Utils, memberIdHash = utils.hashString(memberId), styleNameGenerator = null, frameNameGenerator = null, imageNameGenerator = null, existingFrameNames = {}, existingImageNames = {};
 +  function NameGenerator(prefix, findExistingNames) {
 +    var reportedNames = {};
 +    this.generateName = function() {
 +      var existingNames = findExistingNames(), startIndex = 0, name;
 +      do {
 +        name = prefix + startIndex;
 +        startIndex += 1
 +      }while(reportedNames[name] || existingNames[name]);
 +      reportedNames[name] = true;
 +      return name
 +    }
 +  }
 +  function getAllStyleNames() {
 +    var styleElements = [odfContainer.rootElement.automaticStyles, odfContainer.rootElement.styles], node, styleNames = {};
 +    styleElements.forEach(function(styleListElement) {
 +      node = styleListElement.firstChild;
 +      while(node) {
 +        if(node.nodeType === Node.ELEMENT_NODE && (node.namespaceURI === stylens && node.localName === "style")) {
 +          styleNames[node.getAttributeNS(stylens, "name")] = true
 +        }
 +        node = node.nextSibling
 +      }
 +    });
 +    return styleNames
 +  }
 +  this.generateStyleName = function() {
 +    if(styleNameGenerator === null) {
 +      styleNameGenerator = new NameGenerator("auto" + memberIdHash + "_", function() {
 +        return getAllStyleNames()
 +      })
 +    }
 +    return styleNameGenerator.generateName()
 +  };
 +  this.generateFrameName = function() {
 +    if(frameNameGenerator === null) {
 +      var nodes = domUtils.getElementsByTagNameNS(odfContainer.rootElement.body, drawns, "frame");
 +      nodes.forEach(function(frame) {
 +        existingFrameNames[frame.getAttributeNS(drawns, "name")] = true
 +      });
 +      frameNameGenerator = new NameGenerator("fr" + memberIdHash + "_", function() {
 +        return existingFrameNames
 +      })
 +    }
 +    return frameNameGenerator.generateName()
 +  };
 +  this.generateImageName = function() {
 +    if(imageNameGenerator === null) {
 +      var nodes = domUtils.getElementsByTagNameNS(odfContainer.rootElement.body, drawns, "image");
 +      nodes.forEach(function(image) {
 +        var path = image.getAttributeNS(xlinkns, "href");
 +        path = path.substring("Pictures/".length, path.lastIndexOf("."));
 +        existingImageNames[path] = true
 +      });
 +      imageNameGenerator = new NameGenerator("img" + memberIdHash + "_", function() {
 +        return existingImageNames
 +      })
 +    }
 +    return imageNameGenerator.generateName()
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Utils");
 +runtime.loadClass("odf.ObjectNameGenerator");
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("odf.OdfContainer");
 +runtime.loadClass("odf.StyleInfo");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("odf.TextStyleApplicator");
 +odf.Formatting = function Formatting() {
 +  var self = this, odfContainer, styleInfo = new odf.StyleInfo, svgns = odf.Namespaces.svgns, stylens = odf.Namespaces.stylens, textns = odf.Namespaces.textns, numberns = odf.Namespaces.numberns, fons = odf.Namespaces.fons, odfUtils = new odf.OdfUtils, domUtils = new core.DomUtils, utils = new core.Utils, builtInDefaultStyleAttributesByFamily = {"paragraph":{"style:paragraph-properties":{"fo:text-align":"left"}}}, defaultPageFormatSettings = {width:21.001, height:29.7, margin:2, padding:0};
 +  function getBuiltInDefaultStyleAttributes(styleFamily) {
 +    var result, builtInDefaultStyleAttributes = builtInDefaultStyleAttributesByFamily[styleFamily];
 +    if(builtInDefaultStyleAttributes) {
 +      result = utils.mergeObjects({}, builtInDefaultStyleAttributes)
 +    }else {
 +      result = null
 +    }
 +    return result
 +  }
 +  this.setOdfContainer = function(odfcontainer) {
 +    odfContainer = odfcontainer
 +  };
 +  function getFontMap() {
 +    var fontFaceDecls = odfContainer.rootElement.fontFaceDecls, fontFaceDeclsMap = {}, node, name, family;
 +    node = fontFaceDecls && fontFaceDecls.firstChild;
 +    while(node) {
 +      if(node.nodeType === Node.ELEMENT_NODE) {
 +        name = node.getAttributeNS(stylens, "name");
 +        if(name) {
 +          family = node.getAttributeNS(svgns, "font-family");
 +          if(family || node.getElementsByTagNameNS(svgns, "font-face-uri")[0]) {
 +            fontFaceDeclsMap[name] = family
 +          }
 +        }
 +      }
 +      node = node.nextSibling
 +    }
 +    return fontFaceDeclsMap
 +  }
 +  this.getFontMap = getFontMap;
 +  this.getAvailableParagraphStyles = function() {
 +    var node = odfContainer.rootElement.styles && odfContainer.rootElement.styles.firstChild, p_family, p_name, p_displayName, paragraphStyles = [], style;
 +    while(node) {
 +      if(node.nodeType === Node.ELEMENT_NODE && (node.localName === "style" && node.namespaceURI === stylens)) {
 +        style = node;
 +        p_family = style.getAttributeNS(stylens, "family");
 +        if(p_family === "paragraph") {
 +          p_name = style.getAttributeNS(stylens, "name");
 +          p_displayName = style.getAttributeNS(stylens, "display-name") || p_name;
 +          if(p_name && p_displayName) {
 +            paragraphStyles.push({name:p_name, displayName:p_displayName})
 +          }
 +        }
 +      }
 +      node = node.nextSibling
 +    }
 +    return paragraphStyles
 +  };
 +  this.isStyleUsed = function(styleElement) {
 +    var hasDerivedStyles, isUsed;
 +    hasDerivedStyles = styleInfo.hasDerivedStyles(odfContainer.rootElement, odf.Namespaces.resolvePrefix, styleElement);
 +    isUsed = (new styleInfo.UsedStyleList(odfContainer.rootElement.styles)).uses(styleElement) || ((new styleInfo.UsedStyleList(odfContainer.rootElement.automaticStyles)).uses(styleElement) || (new styleInfo.UsedStyleList(odfContainer.rootElement.body)).uses(styleElement));
 +    return hasDerivedStyles || isUsed
 +  };
 +  function getDefaultStyleElement(family) {
 +    var node = odfContainer.rootElement.styles.firstChild;
 +    while(node) {
 +      if(node.nodeType === Node.ELEMENT_NODE && (node.namespaceURI === stylens && (node.localName === "default-style" && node.getAttributeNS(stylens, "family") === family))) {
 +        return node
 +      }
 +      node = node.nextSibling
 +    }
 +    return null
 +  }
 +  this.getDefaultStyleElement = getDefaultStyleElement;
 +  function getStyleElement(styleName, family, styleElements) {
 +    var node, nodeStyleName, styleListElement;
 +    styleElements = styleElements || [odfContainer.rootElement.automaticStyles, odfContainer.rootElement.styles];
 +    styleListElement = styleElements.shift();
 +    while(styleListElement) {
 +      node = styleListElement.firstChild;
 +      while(node) {
 +        if(node.nodeType === Node.ELEMENT_NODE) {
 +          nodeStyleName = node.getAttributeNS(stylens, "name");
 +          if(node.namespaceURI === stylens && (node.localName === "style" && (node.getAttributeNS(stylens, "family") === family && nodeStyleName === styleName))) {
 +            return node
 +          }
 +          if(family === "list-style" && (node.namespaceURI === textns && (node.localName === "list-style" && nodeStyleName === styleName))) {
 +            return node
 +          }
 +          if(family === "data" && (node.namespaceURI === numberns && nodeStyleName === styleName)) {
 +            return node
 +          }
 +        }
 +        node = node.nextSibling
 +      }
 +      styleListElement = styleElements.shift()
 +    }
 +    return null
 +  }
 +  this.getStyleElement = getStyleElement;
 +  function getStyleAttributes(styleNode) {
 +    var i, propertiesMap = {}, propertiesNode = styleNode.firstChild;
 +    while(propertiesNode) {
 +      if(propertiesNode.nodeType === Node.ELEMENT_NODE && propertiesNode.namespaceURI === stylens) {
 +        propertiesMap[propertiesNode.nodeName] = {};
 +        for(i = 0;i < propertiesNode.attributes.length;i += 1) {
 +          propertiesMap[propertiesNode.nodeName][propertiesNode.attributes[i].name] = propertiesNode.attributes[i].value
 +        }
 +      }
 +      propertiesNode = propertiesNode.nextSibling
 +    }
 +    for(i = 0;i < styleNode.attributes.length;i += 1) {
 +      propertiesMap[styleNode.attributes[i].name] = styleNode.attributes[i].value
 +    }
 +    return propertiesMap
 +  }
 +  this.getStyleAttributes = getStyleAttributes;
 +  function mapObjOntoNode(node, properties) {
 +    Object.keys(properties).forEach(function(key) {
 +      var parts = key.split(":"), prefix = parts[0], localName = parts[1], ns = odf.Namespaces.resolvePrefix(prefix), value = properties[key], element;
 +      if(typeof value === "object" && Object.keys(value).length) {
 +        element = node.getElementsByTagNameNS(ns, localName)[0] || node.ownerDocument.createElementNS(ns, key);
 +        node.appendChild(element);
 +        mapObjOntoNode(element, value)
 +      }else {
 +        if(ns) {
 +          node.setAttributeNS(ns, key, value)
 +        }
 +      }
 +    })
 +  }
 +  function getInheritedStyleAttributes(styleNode, includeSystemDefault) {
 +    var styleListElement = odfContainer.rootElement.styles, parentStyleName, propertiesMap, inheritedPropertiesMap = {}, styleFamily = styleNode.getAttributeNS(stylens, "family"), node = styleNode;
 +    while(node) {
 +      propertiesMap = getStyleAttributes(node);
 +      inheritedPropertiesMap = utils.mergeObjects(propertiesMap, inheritedPropertiesMap);
 +      parentStyleName = node.getAttributeNS(stylens, "parent-style-name");
 +      if(parentStyleName) {
 +        node = getStyleElement(parentStyleName, styleFamily, [styleListElement])
 +      }else {
 +        node = null
 +      }
 +    }
 +    node = getDefaultStyleElement(styleFamily);
 +    if(node) {
 +      propertiesMap = getStyleAttributes(node);
 +      inheritedPropertiesMap = utils.mergeObjects(propertiesMap, inheritedPropertiesMap)
 +    }
 +    if(includeSystemDefault) {
 +      propertiesMap = getBuiltInDefaultStyleAttributes(styleFamily);
 +      if(propertiesMap) {
 +        inheritedPropertiesMap = utils.mergeObjects(propertiesMap, inheritedPropertiesMap)
 +      }
 +    }
 +    return inheritedPropertiesMap
 +  }
 +  this.getInheritedStyleAttributes = getInheritedStyleAttributes;
 +  this.getFirstCommonParentStyleNameOrSelf = function(styleName) {
 +    var automaticStyleElementList = odfContainer.rootElement.automaticStyles, styleElementList = odfContainer.rootElement.styles, styleElement;
 +    styleElement = getStyleElement(styleName, "paragraph", [automaticStyleElementList]);
 +    while(styleElement) {
 +      styleName = styleElement.getAttributeNS(stylens, "parent-style-name");
 +      styleElement = getStyleElement(styleName, "paragraph", [automaticStyleElementList])
 +    }
 +    styleElement = getStyleElement(styleName, "paragraph", [styleElementList]);
 +    if(!styleElement) {
 +      return null
 +    }
 +    return styleName
 +  };
 +  this.hasParagraphStyle = function(styleName) {
 +    return Boolean(getStyleElement(styleName, "paragraph"))
 +  };
 +  function buildStyleChain(node, collectedChains) {
 +    var parent = node.nodeType === Node.TEXT_NODE ? node.parentNode : node, nodeStyles, appliedStyles = [], chainKey = "", foundContainer = false;
 +    while(parent) {
 +      if(!foundContainer && odfUtils.isGroupingElement(parent)) {
 +        foundContainer = true
 +      }
 +      nodeStyles = styleInfo.determineStylesForNode((parent));
 +      if(nodeStyles) {
 +        appliedStyles.push(nodeStyles)
 +      }
 +      parent = parent.parentNode
 +    }
 +    if(foundContainer) {
 +      appliedStyles.forEach(function(usedStyleMap) {
 +        Object.keys(usedStyleMap).forEach(function(styleFamily) {
 +          Object.keys(usedStyleMap[styleFamily]).forEach(function(styleName) {
 +            chainKey += "|" + styleFamily + ":" + styleName + "|"
 +          })
 +        })
 +      });
 +      if(collectedChains) {
 +        collectedChains[chainKey] = appliedStyles
 +      }
 +    }
 +    return foundContainer ? appliedStyles : undefined
 +  }
 +  function calculateAppliedStyle(styleChain) {
 +    var mergedChildStyle = {orderedStyles:[]};
 +    styleChain.forEach(function(elementStyleSet) {
 +      Object.keys((elementStyleSet)).forEach(function(styleFamily) {
 +        var styleName = Object.keys(elementStyleSet[styleFamily])[0], styleElement, parentStyle, displayName;
 +        styleElement = getStyleElement(styleName, styleFamily);
 +        if(styleElement) {
 +          parentStyle = getInheritedStyleAttributes((styleElement));
 +          mergedChildStyle = utils.mergeObjects(parentStyle, mergedChildStyle);
 +          displayName = styleElement.getAttributeNS(stylens, "display-name")
 +        }else {
 +          runtime.log("No style element found for '" + styleName + "' of family '" + styleFamily + "'")
 +        }
 +        mergedChildStyle.orderedStyles.push({name:styleName, family:styleFamily, displayName:displayName})
 +      })
 +    });
 +    return mergedChildStyle
 +  }
 +  this.getAppliedStyles = function(textNodes) {
 +    var styleChains = {}, styles = [];
 +    textNodes.forEach(function(n) {
 +      buildStyleChain(n, styleChains)
 +    });
 +    Object.keys(styleChains).forEach(function(key) {
 +      styles.push(calculateAppliedStyle(styleChains[key]))
 +    });
 +    return styles
 +  };
 +  this.getAppliedStylesForElement = function(node) {
 +    var styleChain;
 +    styleChain = buildStyleChain(node);
 +    return styleChain ? calculateAppliedStyle(styleChain) : undefined
 +  };
 +  this.applyStyle = function(memberId, textNodes, limits, info) {
 +    var textStyles = new odf.TextStyleApplicator(new odf.ObjectNameGenerator((odfContainer), memberId), self, odfContainer.rootElement.automaticStyles);
 +    textStyles.applyStyle(textNodes, limits, info)
 +  };
 +  this.updateStyle = function(styleNode, properties) {
 +    var fontName, fontFaceNode;
 +    mapObjOntoNode(styleNode, properties);
 +    fontName = properties["style:text-properties"] && properties["style:text-properties"]["style:font-name"];
 +    if(fontName && !getFontMap().hasOwnProperty(fontName)) {
 +      fontFaceNode = styleNode.ownerDocument.createElementNS(stylens, "style:font-face");
 +      fontFaceNode.setAttributeNS(stylens, "style:name", fontName);
 +      fontFaceNode.setAttributeNS(svgns, "svg:font-family", fontName);
 +      odfContainer.rootElement.fontFaceDecls.appendChild(fontFaceNode)
 +    }
 +  };
 +  function isAutomaticStyleElement(styleNode) {
 +    return styleNode.parentNode === odfContainer.rootElement.automaticStyles
 +  }
 +  this.createDerivedStyleObject = function(parentStyleName, family, overrides) {
 +    var originalStyleElement = (getStyleElement(parentStyleName, family)), newStyleObject;
 +    runtime.assert(Boolean(originalStyleElement), "No style element found for '" + parentStyleName + "' of family '" + family + "'");
 +    if(isAutomaticStyleElement(originalStyleElement)) {
 +      newStyleObject = getStyleAttributes(originalStyleElement)
 +    }else {
 +      newStyleObject = {"style:parent-style-name":parentStyleName}
 +    }
 +    newStyleObject["style:family"] = family;
 +    utils.mergeObjects(newStyleObject, overrides);
 +    return newStyleObject
 +  };
 +  this.getDefaultTabStopDistance = function() {
 +    var defaultParagraph = getDefaultStyleElement("paragraph"), paragraphProperties = defaultParagraph && defaultParagraph.getAttributeNS(stylens, "paragraph-properties"), tabStopDistance = paragraphProperties && paragraphProperties.getAttributeNS(stylens, "tab-stop-distance");
 +    if(!tabStopDistance) {
 +      tabStopDistance = "1.25cm"
 +    }
 +    return odfUtils.parseNonNegativeLength(tabStopDistance)
 +  };
 +  function getPageLayoutStyleElement(styleName, styleFamily) {
 +    var styleElement = getStyleElement(styleName, styleFamily), masterPageName, layoutName, pageLayoutElements, node, i;
 +    runtime.assert(styleFamily === "paragraph" || styleFamily === "table", "styleFamily has to be either paragraph or table");
 +    if(styleElement) {
 +      masterPageName = styleElement.getAttributeNS(stylens, "master-page-name") || "Standard";
 +      node = odfContainer.rootElement.masterStyles.lastChild;
 +      while(node && node.previousSibling) {
 +        if(node.getAttributeNS(stylens, "name") === masterPageName) {
 +          break
 +        }
 +        node = node.previousSibling
 +      }
 +      layoutName = node.getAttributeNS(stylens, "page-layout-name");
 +      pageLayoutElements = domUtils.getElementsByTagNameNS(odfContainer.rootElement.automaticStyles, stylens, "page-layout");
 +      for(i = 0;i < pageLayoutElements.length;i += 1) {
 +        node = pageLayoutElements[i];
 +        if(node.getAttributeNS(stylens, "name") === layoutName) {
 +          return(node)
 +        }
 +      }
 +    }
 +    return null
 +  }
 +  function lengthInCm(length, defaultValue) {
 +    var result = odfUtils.parseLength(length), value = defaultValue;
 +    if(result) {
 +      switch(result.unit) {
 +        case "cm":
 +          value = result.value;
 +          break;
 +        case "mm":
 +          value = result.value * 0.1;
 +          break;
 +        case "in":
 +          value = result.value * 2.54;
 +          break;
 +        case "pt":
 +          value = result.value * 0.035277778;
 +          break;
 +        case "pc":
 +        ;
 +        case "px":
 +        ;
 +        case "em":
 +          break;
 +        default:
 +          runtime.log("Unit identifier: " + result.unit + " is not supported.");
 +          break
 +      }
 +    }
 +    return value
 +  }
 +  this.getContentSize = function(styleName, styleFamily) {
 +    var pageLayoutElement, props, printOrientation, defaultOrientedPageWidth, defaultOrientedPageHeight, pageWidth, pageHeight, margin, marginLeft, marginRight, marginTop, marginBottom, padding, paddingLeft, paddingRight, paddingTop, paddingBottom;
 +    pageLayoutElement = getPageLayoutStyleElement(styleName, styleFamily);
 +    if(!pageLayoutElement) {
 +      pageLayoutElement = odfContainer.rootElement.styles.getElementsByTagNameNS(stylens, "default-page-layout")[0]
 +    }
 +    if(pageLayoutElement) {
 +      props = pageLayoutElement.getElementsByTagNameNS(stylens, "page-layout-properties")[0]
 +    }
 +    if(props) {
 +      printOrientation = props.getAttributeNS(stylens, "print-orientation") || "portrait";
 +      if(printOrientation === "portrait") {
 +        defaultOrientedPageWidth = defaultPageFormatSettings.width;
 +        defaultOrientedPageHeight = defaultPageFormatSettings.height
 +      }else {
 +        defaultOrientedPageWidth = defaultPageFormatSettings.height;
 +        defaultOrientedPageHeight = defaultPageFormatSettings.width
 +      }
 +      pageWidth = lengthInCm(props.getAttributeNS(fons, "page-width"), defaultOrientedPageWidth);
 +      pageHeight = lengthInCm(props.getAttributeNS(fons, "page-height"), defaultOrientedPageHeight);
 +      margin = lengthInCm(props.getAttributeNS(fons, "margin"), null);
 +      if(margin === null) {
 +        marginLeft = lengthInCm(props.getAttributeNS(fons, "margin-left"), defaultPageFormatSettings.margin);
 +        marginRight = lengthInCm(props.getAttributeNS(fons, "margin-right"), defaultPageFormatSettings.margin);
 +        marginTop = lengthInCm(props.getAttributeNS(fons, "margin-top"), defaultPageFormatSettings.margin);
 +        marginBottom = lengthInCm(props.getAttributeNS(fons, "margin-bottom"), defaultPageFormatSettings.margin)
 +      }else {
 +        marginLeft = marginRight = marginTop = marginBottom = margin
 +      }
 +      padding = lengthInCm(props.getAttributeNS(fons, "padding"), null);
 +      if(padding === null) {
 +        paddingLeft = lengthInCm(props.getAttributeNS(fons, "padding-left"), defaultPageFormatSettings.padding);
 +        paddingRight = lengthInCm(props.getAttributeNS(fons, "padding-right"), defaultPageFormatSettings.padding);
 +        paddingTop = lengthInCm(props.getAttributeNS(fons, "padding-top"), defaultPageFormatSettings.padding);
 +        paddingBottom = lengthInCm(props.getAttributeNS(fons, "padding-bottom"), defaultPageFormatSettings.padding)
 +      }else {
 +        paddingLeft = paddingRight = paddingTop = paddingBottom = padding
 +      }
 +    }
 +    return{width:pageWidth - marginLeft - marginRight - paddingLeft - paddingRight, height:pageHeight - marginTop - marginBottom - paddingTop - paddingBottom}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("odf.OdfContainer");
 +runtime.loadClass("odf.Formatting");
 +runtime.loadClass("xmldom.XPath");
 +runtime.loadClass("odf.FontLoader");
 +runtime.loadClass("odf.Style2CSS");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("gui.AnnotationViewManager");
 +odf.OdfCanvas = function() {
 +  function LoadingQueue() {
 +    var queue = [], taskRunning = false;
 +    function run(task) {
 +      taskRunning = true;
 +      runtime.setTimeout(function() {
 +        try {
 +          task()
 +        }catch(e) {
 +          runtime.log(e)
 +        }
 +        taskRunning = false;
 +        if(queue.length > 0) {
 +          run(queue.pop())
 +        }
 +      }, 10)
 +    }
 +    this.clearQueue = function() {
 +      queue.length = 0
 +    };
 +    this.addToQueue = function(loadingTask) {
 +      if(queue.length === 0 && !taskRunning) {
 +        return run(loadingTask)
 +      }
 +      queue.push(loadingTask)
 +    }
 +  }
 +  function PageSwitcher(css) {
 +    var sheet = css.sheet, position = 1;
 +    function updateCSS() {
 +      while(sheet.cssRules.length > 0) {
 +        sheet.deleteRule(0)
 +      }
 +      sheet.insertRule("#shadowContent draw|page {display:none;}", 0);
 +      sheet.insertRule("office|presentation draw|page {display:none;}", 1);
 +      sheet.insertRule("#shadowContent draw|page:nth-of-type(" + position + ") {display:block;}", 2);
 +      sheet.insertRule("office|presentation draw|page:nth-of-type(" + position + ") {display:block;}", 3)
 +    }
 +    this.showFirstPage = function() {
 +      position = 1;
 +      updateCSS()
 +    };
 +    this.showNextPage = function() {
 +      position += 1;
 +      updateCSS()
 +    };
 +    this.showPreviousPage = function() {
 +      if(position > 1) {
 +        position -= 1;
 +        updateCSS()
 +      }
 +    };
 +    this.showPage = function(n) {
 +      if(n > 0) {
 +        position = n;
 +        updateCSS()
 +      }
 +    };
 +    this.css = css;
 +    this.destroy = function(callback) {
 +      css.parentNode.removeChild(css);
 +      callback()
 +    }
 +  }
 +  function listenEvent(eventTarget, eventType, eventHandler) {
 +    if(eventTarget.addEventListener) {
 +      eventTarget.addEventListener(eventType, eventHandler, false)
 +    }else {
 +      if(eventTarget.attachEvent) {
 +        eventType = "on" + eventType;
 +        eventTarget.attachEvent(eventType, eventHandler)
 +      }else {
 +        eventTarget["on" + eventType] = eventHandler
 +      }
 +    }
 +  }
 +  function removeEvent(eventTarget, eventType, eventHandler) {
 +    var onVariant = "on" + eventType;
 +    if(eventTarget.removeEventListener) {
 +      eventTarget.removeEventListener(eventType, eventHandler, false)
 +    }else {
 +      if(eventTarget.detachEvent) {
 +        eventTarget.detachEvent(onVariant, eventHandler)
 +      }else {
 +        if(eventTarget[onVariant] === eventHandler) {
 +          eventTarget[onVariant] = null
 +        }
 +      }
 +    }
 +  }
 +  function SelectionWatcher(element) {
 +    var selection = [], listeners = [];
 +    function isAncestorOf(ancestor, descendant) {
 +      while(descendant) {
 +        if(descendant === ancestor) {
 +          return true
 +        }
 +        descendant = descendant.parentNode
 +      }
 +      return false
 +    }
 +    function fallsWithin(element, range) {
 +      return isAncestorOf(element, range.startContainer) && isAncestorOf(element, range.endContainer)
 +    }
 +    function getCurrentSelection() {
 +      var s = [], current = runtime.getWindow().getSelection(), i, r;
 +      for(i = 0;i < current.rangeCount;i += 1) {
 +        r = current.getRangeAt(i);
 +        if(r !== null && fallsWithin(element, r)) {
 +          s.push(r)
 +        }
 +      }
 +      return s
 +    }
 +    function rangesNotEqual(rangeA, rangeB) {
 +      if(rangeA === rangeB) {
 +        return false
 +      }
 +      if(rangeA === null || rangeB === null) {
 +        return true
 +      }
 +      return rangeA.startContainer !== rangeB.startContainer || (rangeA.startOffset !== rangeB.startOffset || (rangeA.endContainer !== rangeB.endContainer || rangeA.endOffset !== rangeB.endOffset))
 +    }
 +    function emitNewSelection() {
 +      var i, l = listeners.length;
 +      for(i = 0;i < l;i += 1) {
 +        listeners[i](element, selection)
 +      }
 +    }
 +    function copySelection(selection) {
 +      var s = [selection.length], i, oldr, r, doc = element.ownerDocument;
 +      for(i = 0;i < selection.length;i += 1) {
 +        oldr = selection[i];
 +        r = doc.createRange();
 +        r.setStart(oldr.startContainer, oldr.startOffset);
 +        r.setEnd(oldr.endContainer, oldr.endOffset);
 +        s[i] = r
 +      }
 +      return s
 +    }
 +    function checkSelection() {
 +      var s = getCurrentSelection(), i;
 +      if(s.length === selection.length) {
 +        for(i = 0;i < s.length;i += 1) {
 +          if(rangesNotEqual(s[i], selection[i])) {
 +            break
 +          }
 +        }
 +        if(i === s.length) {
 +          return
 +        }
 +      }
 +      selection = s;
 +      selection = copySelection(s);
 +      emitNewSelection()
 +    }
 +    this.addListener = function(eventName, handler) {
 +      var i, l = listeners.length;
 +      for(i = 0;i < l;i += 1) {
 +        if(listeners[i] === handler) {
 +          return
 +        }
 +      }
 +      listeners.push(handler)
 +    };
 +    this.destroy = function(callback) {
 +      removeEvent(element, "mouseup", checkSelection);
 +      removeEvent(element, "keyup", checkSelection);
 +      removeEvent(element, "keydown", checkSelection);
 +      callback()
 +    };
 +    listenEvent(element, "mouseup", checkSelection);
 +    listenEvent(element, "keyup", checkSelection);
 +    listenEvent(element, "keydown", checkSelection)
 +  }
 +  var drawns = odf.Namespaces.drawns, fons = odf.Namespaces.fons, officens = odf.Namespaces.officens, stylens = odf.Namespaces.stylens, svgns = odf.Namespaces.svgns, tablens = odf.Namespaces.tablens, textns = odf.Namespaces.textns, xlinkns = odf.Namespaces.xlinkns, xmlns = odf.Namespaces.xmlns, presentationns = odf.Namespaces.presentationns, webodfhelperns = "urn:webodf:names:helper", window = runtime.getWindow(), xpath = new xmldom.XPath, odfUtils = new odf.OdfUtils, domUtils = new cor [...]
 +  function clear(element) {
 +    while(element.firstChild) {
 +      element.removeChild(element.firstChild)
 +    }
 +  }
 +  function handleStyles(odfcontainer, formatting, stylesxmlcss) {
 +    var style2css = new odf.Style2CSS;
 +    style2css.style2css(odfcontainer.getDocumentType(), stylesxmlcss.sheet, formatting.getFontMap(), odfcontainer.rootElement.styles, odfcontainer.rootElement.automaticStyles)
 +  }
 +  function handleFonts(odfContainer, fontcss) {
 +    var fontLoader = new odf.FontLoader;
 +    fontLoader.loadFonts(odfContainer, fontcss.sheet)
 +  }
 +  function getMasterPageElement(odfContainer, masterPageName) {
 +    if(!masterPageName) {
 +      return null
 +    }
 +    var masterStyles = odfContainer.rootElement.masterStyles, masterPageElements = masterStyles.getElementsByTagNameNS(stylens, "master-page"), masterPageElement = null, i;
 +    for(i = 0;i < masterPageElements.length;i += 1) {
 +      if(masterPageElements[i].getAttributeNS(stylens, "name") === masterPageName) {
 +        masterPageElement = masterPageElements[i];
 +        break
 +      }
 +    }
 +    return masterPageElement
 +  }
 +  function dropTemplateDrawFrames(clonedNode) {
 +    var i, element, presentationClass, clonedDrawFrameElements = clonedNode.getElementsByTagNameNS(drawns, "frame");
 +    for(i = 0;i < clonedDrawFrameElements.length;i += 1) {
 +      element = clonedDrawFrameElements[i];
 +      presentationClass = element.getAttributeNS(presentationns, "class");
 +      if(presentationClass && !/^(date-time|footer|header|page-number')$/.test(presentationClass)) {
 +        element.parentNode.removeChild(element)
 +      }
 +    }
 +  }
 +  function getHeaderFooter(odfContainer, frame, headerFooterId) {
 +    var headerFooter = null, i, declElements = odfContainer.rootElement.body.getElementsByTagNameNS(presentationns, headerFooterId + "-decl"), headerFooterName = frame.getAttributeNS(presentationns, "use-" + headerFooterId + "-name");
 +    if(headerFooterName && declElements.length > 0) {
 +      for(i = 0;i < declElements.length;i += 1) {
 +        if(declElements[i].getAttributeNS(presentationns, "name") === headerFooterName) {
 +          headerFooter = declElements[i].textContent;
 +          break
 +        }
 +      }
 +    }
 +    return headerFooter
 +  }
 +  function setContainerValue(rootElement, ns, localName, value) {
 +    var i, containerList, document = rootElement.ownerDocument;
 +    containerList = rootElement.getElementsByTagNameNS(ns, localName);
 +    for(i = 0;i < containerList.length;i += 1) {
 +      clear(containerList[i]);
 +      if(value) {
 +        containerList[i].appendChild(document.createTextNode(value))
 +      }
 +    }
 +  }
 +  function setDrawElementPosition(styleid, frame, stylesheet) {
 +    frame.setAttributeNS(webodfhelperns, "styleid", styleid);
 +    var rule, anchor = frame.getAttributeNS(textns, "anchor-type"), x = frame.getAttributeNS(svgns, "x"), y = frame.getAttributeNS(svgns, "y"), width = frame.getAttributeNS(svgns, "width"), height = frame.getAttributeNS(svgns, "height"), minheight = frame.getAttributeNS(fons, "min-height"), minwidth = frame.getAttributeNS(fons, "min-width");
 +    if(anchor === "as-char") {
 +      rule = "display: inline-block;"
 +    }else {
 +      if(anchor || (x || y)) {
 +        rule = "position: absolute;"
 +      }else {
 +        if(width || (height || (minheight || minwidth))) {
 +          rule = "display: block;"
 +        }
 +      }
 +    }
 +    if(x) {
 +      rule += "left: " + x + ";"
 +    }
 +    if(y) {
 +      rule += "top: " + y + ";"
 +    }
 +    if(width) {
 +      rule += "width: " + width + ";"
 +    }
 +    if(height) {
 +      rule += "height: " + height + ";"
 +    }
 +    if(minheight) {
 +      rule += "min-height: " + minheight + ";"
 +    }
 +    if(minwidth) {
 +      rule += "min-width: " + minwidth + ";"
 +    }
 +    if(rule) {
 +      rule = "draw|" + frame.localName + '[webodfhelper|styleid="' + styleid + '"] {' + rule + "}";
 +      stylesheet.insertRule(rule, stylesheet.cssRules.length)
 +    }
 +  }
 +  function getUrlFromBinaryDataElement(image) {
 +    var node = image.firstChild;
 +    while(node) {
 +      if(node.namespaceURI === officens && node.localName === "binary-data") {
 +        return"data:image/png;base64," + node.textContent.replace(/[\r\n\s]/g, "")
 +      }
 +      node = node.nextSibling
 +    }
 +    return""
 +  }
 +  function setImage(id, container, image, stylesheet) {
 +    image.setAttributeNS(webodfhelperns, "styleid", id);
 +    var url = image.getAttributeNS(xlinkns, "href"), part;
 +    function callback(url) {
 +      var rule;
 +      if(url) {
 +        rule = "background-image: url(" + url + ");";
 +        rule = 'draw|image[webodfhelper|styleid="' + id + '"] {' + rule + "}";
 +        stylesheet.insertRule(rule, stylesheet.cssRules.length)
 +      }
 +    }
 +    if(url) {
 +      try {
 +        part = container.getPart(url);
 +        part.onchange = function(part) {
 +          callback(part.url)
 +        };
 +        part.load()
 +      }catch(e) {
 +        runtime.log("slight problem: " + e)
 +      }
 +    }else {
 +      url = getUrlFromBinaryDataElement(image);
 +      callback(url)
 +    }
 +  }
 +  function formatParagraphAnchors(odfbody) {
 +    var n, i, nodes = xpath.getODFElementsWithXPath(odfbody, ".//*[*[@text:anchor-type='paragraph']]", odf.Namespaces.resolvePrefix);
 +    for(i = 0;i < nodes.length;i += 1) {
 +      n = nodes[i];
 +      if(n.setAttributeNS) {
 +        n.setAttributeNS(webodfhelperns, "containsparagraphanchor", true)
 +      }
 +    }
 +  }
 +  function modifyTables(odffragment) {
 +    var i, tableCells, node;
 +    function modifyTableCell(node) {
 +      if(node.hasAttributeNS(tablens, "number-columns-spanned")) {
 +        node.setAttribute("colspan", node.getAttributeNS(tablens, "number-columns-spanned"))
 +      }
 +      if(node.hasAttributeNS(tablens, "number-rows-spanned")) {
 +        node.setAttribute("rowspan", node.getAttributeNS(tablens, "number-rows-spanned"))
 +      }
 +    }
 +    tableCells = odffragment.getElementsByTagNameNS(tablens, "table-cell");
 +    for(i = 0;i < tableCells.length;i += 1) {
 +      node = (tableCells.item(i));
 +      modifyTableCell(node)
 +    }
 +  }
 +  function modifyLinks(odffragment) {
 +    var i, links, node;
 +    function modifyLink(node) {
 +      var url, clickHandler;
 +      if(!node.hasAttributeNS(xlinkns, "href")) {
 +        return
 +      }
 +      url = node.getAttributeNS(xlinkns, "href");
 +      if(url[0] === "#") {
 +        url = url.substring(1);
 +        clickHandler = function() {
 +          var bookmarks = xpath.getODFElementsWithXPath(odffragment, "//text:bookmark-start[@text:name='" + url + "']", odf.Namespaces.resolvePrefix);
 +          if(bookmarks.length === 0) {
 +            bookmarks = xpath.getODFElementsWithXPath(odffragment, "//text:bookmark[@text:name='" + url + "']", odf.Namespaces.resolvePrefix)
 +          }
 +          if(bookmarks.length > 0) {
 +            bookmarks[0].scrollIntoView(true)
 +          }
 +          return false
 +        }
 +      }else {
 +        clickHandler = function() {
 +          window.open(url)
 +        }
 +      }
 +      node.onclick = clickHandler
 +    }
 +    links = odffragment.getElementsByTagNameNS(textns, "a");
 +    for(i = 0;i < links.length;i += 1) {
 +      node = (links.item(i));
 +      modifyLink(node)
 +    }
 +  }
 +  function modifyLineBreakElements(odffragment) {
 +    var document = odffragment.ownerDocument, lineBreakElements = domUtils.getElementsByTagNameNS(odffragment, textns, "line-break");
 +    lineBreakElements.forEach(function(lineBreak) {
 +      if(!lineBreak.hasChildNodes()) {
 +        lineBreak.appendChild(document.createElement("br"))
 +      }
 +    })
 +  }
 +  function expandSpaceElements(odffragment) {
 +    var spaces, doc = odffragment.ownerDocument;
 +    function expandSpaceElement(space) {
 +      var j, count;
 +      while(space.firstChild) {
 +        space.removeChild(space.firstChild)
 +      }
 +      space.appendChild(doc.createTextNode(" "));
 +      count = parseInt(space.getAttributeNS(textns, "c"), 10);
 +      if(count > 1) {
 +        space.removeAttributeNS(textns, "c");
 +        for(j = 1;j < count;j += 1) {
 +          space.parentNode.insertBefore(space.cloneNode(true), space)
 +        }
 +      }
 +    }
 +    spaces = domUtils.getElementsByTagNameNS(odffragment, textns, "s");
 +    spaces.forEach(expandSpaceElement)
 +  }
 +  function expandTabElements(odffragment) {
 +    var tabs;
 +    tabs = domUtils.getElementsByTagNameNS(odffragment, textns, "tab");
 +    tabs.forEach(function(tab) {
 +      tab.textContent = "\t"
 +    })
 +  }
 +  function modifyDrawElements(odfbody, stylesheet) {
 +    var node, drawElements, i;
 +    drawElements = [];
 +    node = odfbody.firstChild;
 +    while(node && node !== odfbody) {
 +      if(node.namespaceURI === drawns) {
 +        drawElements[drawElements.length] = node
 +      }
 +      if(node.firstChild) {
 +        node = node.firstChild
 +      }else {
 +        while(node && (node !== odfbody && !node.nextSibling)) {
 +          node = node.parentNode
 +        }
 +        if(node && node.nextSibling) {
 +          node = node.nextSibling
 +        }
 +      }
 +    }
 +    for(i = 0;i < drawElements.length;i += 1) {
 +      node = drawElements[i];
 +      setDrawElementPosition("frame" + String(i), node, stylesheet)
 +    }
 +    formatParagraphAnchors(odfbody)
 +  }
 +  function cloneMasterPages(odfContainer, shadowContent, odfbody, stylesheet) {
 +    var masterPageName, masterPageElement, styleId, clonedPageElement, clonedElement, pageNumber = 0, i, element, elementToClone, document = odfContainer.rootElement.ownerDocument;
 +    element = odfbody.firstElementChild;
 +    if(!(element && (element.namespaceURI === officens && (element.localName === "presentation" || element.localName === "drawing")))) {
 +      return
 +    }
 +    element = element.firstElementChild;
 +    while(element) {
 +      masterPageName = element.getAttributeNS(drawns, "master-page-name");
 +      masterPageElement = getMasterPageElement(odfContainer, masterPageName);
 +      if(masterPageElement) {
 +        styleId = element.getAttributeNS(webodfhelperns, "styleid");
 +        clonedPageElement = document.createElementNS(drawns, "draw:page");
 +        elementToClone = masterPageElement.firstElementChild;
 +        i = 0;
 +        while(elementToClone) {
 +          if(elementToClone.getAttributeNS(presentationns, "placeholder") !== "true") {
 +            clonedElement = elementToClone.cloneNode(true);
 +            clonedPageElement.appendChild(clonedElement);
 +            setDrawElementPosition(styleId + "_" + i, (clonedElement), stylesheet)
 +          }
 +          elementToClone = elementToClone.nextElementSibling;
 +          i += 1
 +        }
 +        dropTemplateDrawFrames(clonedPageElement);
 +        shadowContent.appendChild(clonedPageElement);
 +        pageNumber = String(shadowContent.getElementsByTagNameNS(drawns, "page").length);
 +        setContainerValue(clonedPageElement, textns, "page-number", pageNumber);
 +        setContainerValue(clonedPageElement, presentationns, "header", getHeaderFooter(odfContainer, (element), "header"));
 +        setContainerValue(clonedPageElement, presentationns, "footer", getHeaderFooter(odfContainer, (element), "footer"));
 +        setDrawElementPosition(styleId, clonedPageElement, stylesheet);
 +        clonedPageElement.setAttributeNS(drawns, "draw:master-page-name", masterPageElement.getAttributeNS(stylens, "name"))
 +      }
 +      element = element.nextElementSibling
 +    }
 +  }
 +  function setVideo(container, plugin) {
 +    var video, source, url, doc = plugin.ownerDocument, part;
 +    url = plugin.getAttributeNS(xlinkns, "href");
 +    function callback(url, mimetype) {
 +      var ns = doc.documentElement.namespaceURI;
 +      if(mimetype.substr(0, 6) === "video/") {
 +        video = doc.createElementNS(ns, "video");
 +        video.setAttribute("controls", "controls");
 +        source = doc.createElementNS(ns, "source");
 +        source.setAttribute("src", url);
 +        source.setAttribute("type", mimetype);
 +        video.appendChild(source);
 +        plugin.parentNode.appendChild(video)
 +      }else {
 +        plugin.innerHtml = "Unrecognised Plugin"
 +      }
 +    }
 +    if(url) {
 +      try {
 +        part = container.getPart(url);
 +        part.onchange = function(part) {
 +          callback(part.url, part.mimetype)
 +        };
 +        part.load()
 +      }catch(e) {
 +        runtime.log("slight problem: " + e)
 +      }
 +    }else {
 +      runtime.log("using MP4 data fallback");
 +      url = getUrlFromBinaryDataElement(plugin);
 +      callback(url, "video/mp4")
 +    }
 +  }
 +  function getNumberRule(node) {
 +    var style = node.getAttributeNS(stylens, "num-format"), suffix = node.getAttributeNS(stylens, "num-suffix"), prefix = node.getAttributeNS(stylens, "num-prefix"), rule = "", stylemap = {1:"decimal", "a":"lower-latin", "A":"upper-latin", "i":"lower-roman", "I":"upper-roman"}, content;
 +    content = prefix || "";
 +    if(stylemap.hasOwnProperty(style)) {
 +      content += " counter(list, " + stylemap[style] + ")"
 +    }else {
 +      if(style) {
 +        content += "'" + style + "';"
 +      }else {
 +        content += " ''"
 +      }
 +    }
 +    if(suffix) {
 +      content += " '" + suffix + "'"
 +    }
 +    rule = "content: " + content + ";";
 +    return rule
 +  }
 +  function getImageRule() {
 +    var rule = "content: none;";
 +    return rule
 +  }
 +  function getBulletRule(node) {
 +    var bulletChar = node.getAttributeNS(textns, "bullet-char");
 +    return"content: '" + bulletChar + "';"
 +  }
 +  function getBulletsRule(node) {
 +    var itemrule;
 +    if(node) {
 +      if(node.localName === "list-level-style-number") {
 +        itemrule = getNumberRule(node)
 +      }else {
 +        if(node.localName === "list-level-style-image") {
 +          itemrule = getImageRule()
 +        }else {
 +          if(node.localName === "list-level-style-bullet") {
 +            itemrule = getBulletRule(node)
 +          }
 +        }
 +      }
 +    }
 +    return itemrule
 +  }
 +  function loadLists(odffragment, stylesheet) {
 +    var i, lists, node, id, continueList, styleName, rule, listMap = {}, parentList, listStyles, listStyleMap = {}, bulletRule;
 +    listStyles = window.document.getElementsByTagNameNS(textns, "list-style");
 +    for(i = 0;i < listStyles.length;i += 1) {
 +      node = (listStyles.item(i));
 +      styleName = node.getAttributeNS(stylens, "name");
 +      if(styleName) {
 +        listStyleMap[styleName] = node
 +      }
 +    }
 +    lists = odffragment.getElementsByTagNameNS(textns, "list");
 +    for(i = 0;i < lists.length;i += 1) {
 +      node = (lists.item(i));
 +      id = node.getAttributeNS(xmlns, "id");
 +      if(id) {
 +        continueList = node.getAttributeNS(textns, "continue-list");
 +        node.setAttribute("id", id);
 +        rule = "text|list#" + id + " > text|list-item > *:first-child:before {";
 +        styleName = node.getAttributeNS(textns, "style-name");
 +        if(styleName) {
 +          node = listStyleMap[styleName];
 +          bulletRule = getBulletsRule((odfUtils.getFirstNonWhitespaceChild(node)))
 +        }
 +        if(continueList) {
 +          parentList = listMap[continueList];
 +          while(parentList) {
 +            continueList = parentList;
 +            parentList = listMap[continueList]
 +          }
 +          rule += "counter-increment:" + continueList + ";";
 +          if(bulletRule) {
 +            bulletRule = bulletRule.replace("list", continueList);
 +            rule += bulletRule
 +          }else {
 +            rule += "content:counter(" + continueList + ");"
 +          }
 +        }else {
 +          continueList = "";
 +          if(bulletRule) {
 +            bulletRule = bulletRule.replace("list", id);
 +            rule += bulletRule
 +          }else {
 +            rule += "content: counter(" + id + ");"
 +          }
 +          rule += "counter-increment:" + id + ";";
 +          stylesheet.insertRule("text|list#" + id + " {counter-reset:" + id + "}", stylesheet.cssRules.length)
 +        }
 +        rule += "}";
 +        listMap[id] = continueList;
 +        if(rule) {
 +          stylesheet.insertRule(rule, stylesheet.cssRules.length)
 +        }
 +      }
 +    }
 +  }
 +  function addWebODFStyleSheet(document) {
 +    var head = document.getElementsByTagName("head")[0], style, href;
 +    if(String(typeof webodf_css) !== "undefined") {
 +      style = document.createElementNS(head.namespaceURI, "style");
 +      style.setAttribute("media", "screen, print, handheld, projection");
 +      style.appendChild(document.createTextNode(webodf_css))
 +    }else {
 +      style = document.createElementNS(head.namespaceURI, "link");
 +      href = "webodf.css";
 +      if(runtime.currentDirectory) {
 +        href = runtime.currentDirectory() + "/../" + href
 +      }
 +      style.setAttribute("href", href);
 +      style.setAttribute("rel", "stylesheet")
 +    }
 +    style.setAttribute("type", "text/css");
 +    head.appendChild(style);
 +    return(style)
 +  }
 +  function addStyleSheet(document) {
 +    var head = document.getElementsByTagName("head")[0], style = document.createElementNS(head.namespaceURI, "style"), text = "";
 +    style.setAttribute("type", "text/css");
 +    style.setAttribute("media", "screen, print, handheld, projection");
 +    odf.Namespaces.forEachPrefix(function(prefix, ns) {
 +      text += "@namespace " + prefix + " url(" + ns + ");\n"
 +    });
 +    text += "@namespace webodfhelper url(" + webodfhelperns + ");\n";
 +    style.appendChild(document.createTextNode(text));
 +    head.appendChild(style);
 +    return(style)
 +  }
 +  odf.OdfCanvas = function OdfCanvas(element) {
 +    runtime.assert(element !== null && element !== undefined, "odf.OdfCanvas constructor needs DOM element");
 +    runtime.assert(element.ownerDocument !== null && element.ownerDocument !== undefined, "odf.OdfCanvas constructor needs DOM");
 +    var self = this, doc = (element.ownerDocument), odfcontainer, formatting = new odf.Formatting, selectionWatcher = new SelectionWatcher(element), pageSwitcher, sizer, annotationsPane, allowAnnotations = false, annotationManager, webodfcss, fontcss, stylesxmlcss, positioncss, shadowContent, zoomLevel = 1, eventHandlers = {}, loadingQueue = new LoadingQueue;
 +    function loadImages(container, odffragment, stylesheet) {
 +      var i, images, node;
 +      function loadImage(name, container, node, stylesheet) {
 +        loadingQueue.addToQueue(function() {
 +          setImage(name, container, node, stylesheet)
 +        })
 +      }
 +      images = odffragment.getElementsByTagNameNS(drawns, "image");
 +      for(i = 0;i < images.length;i += 1) {
 +        node = (images.item(i));
 +        loadImage("image" + String(i), container, node, stylesheet)
 +      }
 +    }
 +    function loadVideos(container, odffragment) {
 +      var i, plugins, node;
 +      function loadVideo(container, node) {
 +        loadingQueue.addToQueue(function() {
 +          setVideo(container, node)
 +        })
 +      }
 +      plugins = odffragment.getElementsByTagNameNS(drawns, "plugin");
 +      for(i = 0;i < plugins.length;i += 1) {
 +        node = (plugins.item(i));
 +        loadVideo(container, node)
 +      }
 +    }
 +    function addEventListener(eventType, eventHandler) {
 +      var handlers = eventHandlers[eventType];
 +      if(handlers === undefined) {
 +        handlers = eventHandlers[eventType] = []
 +      }
 +      if(eventHandler && handlers.indexOf(eventHandler) === -1) {
 +        handlers.push(eventHandler)
 +      }
 +    }
 +    function fireEvent(eventType, args) {
 +      if(!eventHandlers.hasOwnProperty(eventType)) {
 +        return
 +      }
 +      var handlers = eventHandlers[eventType], i;
 +      for(i = 0;i < handlers.length;i += 1) {
 +        handlers[i].apply(null, args)
 +      }
 +    }
 +    function fixContainerSize() {
 +      var odfdoc = sizer.firstChild;
 +      if(!odfdoc) {
 +        return
 +      }
 +      if(zoomLevel > 1) {
 +        sizer.style.MozTransformOrigin = "center top";
 +        sizer.style.WebkitTransformOrigin = "center top";
 +        sizer.style.OTransformOrigin = "center top";
 +        sizer.style.msTransformOrigin = "center top"
 +      }else {
 +        sizer.style.MozTransformOrigin = "left top";
 +        sizer.style.WebkitTransformOrigin = "left top";
 +        sizer.style.OTransformOrigin = "left top";
 +        sizer.style.msTransformOrigin = "left top"
 +      }
 +      sizer.style.WebkitTransform = "scale(" + zoomLevel + ")";
 +      sizer.style.MozTransform = "scale(" + zoomLevel + ")";
 +      sizer.style.OTransform = "scale(" + zoomLevel + ")";
 +      sizer.style.msTransform = "scale(" + zoomLevel + ")";
 +      element.style.width = Math.round(zoomLevel * sizer.offsetWidth) + "px";
 +      element.style.height = Math.round(zoomLevel * sizer.offsetHeight) + "px"
 +    }
 +    function handleContent(container, odfnode) {
 +      var css = positioncss.sheet;
 +      clear(element);
 +      sizer = doc.createElementNS(element.namespaceURI, "div");
 +      sizer.style.display = "inline-block";
 +      sizer.style.background = "white";
 +      sizer.appendChild(odfnode);
 +      element.appendChild(sizer);
 +      annotationsPane = doc.createElementNS(element.namespaceURI, "div");
 +      annotationsPane.id = "annotationsPane";
 +      shadowContent = doc.createElementNS(element.namespaceURI, "div");
 +      shadowContent.id = "shadowContent";
 +      shadowContent.style.position = "absolute";
 +      shadowContent.style.top = 0;
 +      shadowContent.style.left = 0;
 +      container.getContentElement().appendChild(shadowContent);
 +      modifyDrawElements(odfnode.body, css);
 +      cloneMasterPages(container, shadowContent, odfnode.body, css);
 +      modifyTables(odfnode.body);
 +      modifyLinks(odfnode.body);
 +      modifyLineBreakElements(odfnode.body);
 +      expandSpaceElements(odfnode.body);
 +      expandTabElements(odfnode.body);
 +      loadImages(container, odfnode.body, css);
 +      loadVideos(container, odfnode.body);
 +      loadLists(odfnode.body, css);
 +      sizer.insertBefore(shadowContent, sizer.firstChild);
 +      fixContainerSize()
 +    }
 +    function modifyAnnotations(odffragment) {
 +      var annotationNodes = domUtils.getElementsByTagNameNS(odffragment, officens, "annotation"), annotationEnds = domUtils.getElementsByTagNameNS(odffragment, officens, "annotation-end"), currentAnnotationName, i;
 +      function matchAnnotationEnd(element) {
 +        return currentAnnotationName === element.getAttributeNS(officens, "name")
 +      }
 +      for(i = 0;i < annotationNodes.length;i += 1) {
 +        currentAnnotationName = annotationNodes[i].getAttributeNS(officens, "name");
 +        annotationManager.addAnnotation({node:annotationNodes[i], end:annotationEnds.filter(matchAnnotationEnd)[0] || null})
 +      }
 +      annotationManager.rerenderAnnotations()
 +    }
 +    function handleAnnotations(odfnode) {
 +      if(allowAnnotations) {
 +        if(!annotationsPane.parentNode) {
 +          sizer.appendChild(annotationsPane);
 +          fixContainerSize()
 +        }
 +        if(annotationManager) {
 +          annotationManager.forgetAnnotations()
 +        }
 +        annotationManager = new gui.AnnotationViewManager(self, odfnode.body, annotationsPane);
 +        modifyAnnotations(odfnode.body)
 +      }else {
 +        if(annotationsPane.parentNode) {
 +          sizer.removeChild(annotationsPane);
 +          annotationManager.forgetAnnotations();
 +          fixContainerSize()
 +        }
 +      }
 +    }
 +    function refreshOdf(suppressEvent) {
 +      function callback() {
 +        clear(element);
 +        element.style.display = "inline-block";
 +        var odfnode = odfcontainer.rootElement;
 +        element.ownerDocument.importNode(odfnode, true);
 +        formatting.setOdfContainer(odfcontainer);
 +        handleFonts(odfcontainer, fontcss);
 +        handleStyles(odfcontainer, formatting, stylesxmlcss);
 +        handleContent(odfcontainer, odfnode);
 +        handleAnnotations(odfnode);
 +        if(!suppressEvent) {
 +          fireEvent("statereadychange", [odfcontainer])
 +        }
 +      }
 +      if(odfcontainer.state === odf.OdfContainer.DONE) {
 +        callback()
 +      }else {
 +        runtime.log("WARNING: refreshOdf called but ODF was not DONE.");
 +        runtime.setTimeout(function later_cb() {
 +          if(odfcontainer.state === odf.OdfContainer.DONE) {
 +            callback()
 +          }else {
 +            runtime.log("will be back later...");
 +            runtime.setTimeout(later_cb, 500)
 +          }
 +        }, 100)
 +      }
 +    }
 +    this.refreshCSS = function() {
 +      handleStyles(odfcontainer, formatting, stylesxmlcss);
 +      fixContainerSize()
 +    };
 +    this.refreshSize = function() {
 +      fixContainerSize()
 +    };
 +    this.odfContainer = function() {
 +      return odfcontainer
 +    };
 +    this.slidevisibilitycss = function() {
 +      return pageSwitcher.css
 +    };
 +    this.setOdfContainer = function(container, suppressEvent) {
 +      odfcontainer = container;
 +      refreshOdf(suppressEvent === true)
 +    };
 +    function load(url) {
 +      loadingQueue.clearQueue();
 +      element.innerHTML = runtime.tr("Loading") + " " + url + "...";
 +      element.removeAttribute("style");
 +      odfcontainer = new odf.OdfContainer(url, function(container) {
 +        odfcontainer = container;
 +        refreshOdf(false)
 +      })
 +    }
 +    this["load"] = load;
 +    this.load = load;
 +    this.save = function(callback) {
 +      odfcontainer.save(callback)
 +    };
 +    this.addListener = function(eventName, handler) {
 +      switch(eventName) {
 +        case "selectionchange":
 +          selectionWatcher.addListener(eventName, handler);
 +          break;
 +        case "click":
 +          listenEvent(element, eventName, handler);
 +          break;
 +        default:
 +          addEventListener(eventName, handler);
 +          break
 +      }
 +    };
 +    this.getFormatting = function() {
 +      return formatting
 +    };
 +    this.getAnnotationManager = function() {
 +      return annotationManager
 +    };
 +    this.refreshAnnotations = function() {
 +      handleAnnotations(odfcontainer.rootElement)
 +    };
 +    this.rerenderAnnotations = function() {
 +      if(annotationManager) {
 +        annotationManager.rerenderAnnotations()
 +      }
 +    };
 +    this.getSizer = function() {
 +      return sizer
 +    };
 +    this.enableAnnotations = function(allow) {
 +      if(allow !== allowAnnotations) {
 +        allowAnnotations = allow;
 +        if(odfcontainer) {
 +          handleAnnotations(odfcontainer.rootElement)
 +        }
 +      }
 +    };
 +    this.addAnnotation = function(annotation) {
 +      if(annotationManager) {
 +        annotationManager.addAnnotation(annotation)
 +      }
 +    };
 +    this.forgetAnnotations = function() {
 +      if(annotationManager) {
 +        annotationManager.forgetAnnotations()
 +      }
 +    };
 +    this.setZoomLevel = function(zoom) {
 +      zoomLevel = zoom;
 +      fixContainerSize()
 +    };
 +    this.getZoomLevel = function() {
 +      return zoomLevel
 +    };
 +    this.fitToContainingElement = function(width, height) {
 +      var realWidth = element.offsetWidth / zoomLevel, realHeight = element.offsetHeight / zoomLevel;
 +      zoomLevel = width / realWidth;
 +      if(height / realHeight < zoomLevel) {
 +        zoomLevel = height / realHeight
 +      }
 +      fixContainerSize()
 +    };
 +    this.fitToWidth = function(width) {
 +      var realWidth = element.offsetWidth / zoomLevel;
 +      zoomLevel = width / realWidth;
 +      fixContainerSize()
 +    };
 +    this.fitSmart = function(width, height) {
 +      var realWidth, realHeight, newScale;
 +      realWidth = element.offsetWidth / zoomLevel;
 +      realHeight = element.offsetHeight / zoomLevel;
 +      newScale = width / realWidth;
 +      if(height !== undefined) {
 +        if(height / realHeight < newScale) {
 +          newScale = height / realHeight
 +        }
 +      }
 +      zoomLevel = Math.min(1, newScale);
 +      fixContainerSize()
 +    };
 +    this.fitToHeight = function(height) {
 +      var realHeight = element.offsetHeight / zoomLevel;
 +      zoomLevel = height / realHeight;
 +      fixContainerSize()
 +    };
 +    this.showFirstPage = function() {
 +      pageSwitcher.showFirstPage()
 +    };
 +    this.showNextPage = function() {
 +      pageSwitcher.showNextPage()
 +    };
 +    this.showPreviousPage = function() {
 +      pageSwitcher.showPreviousPage()
 +    };
 +    this.showPage = function(n) {
 +      pageSwitcher.showPage(n);
 +      fixContainerSize()
 +    };
 +    this.getElement = function() {
 +      return element
 +    };
 +    this.addCssForFrameWithImage = function(frame) {
 +      var frameName = frame.getAttributeNS(drawns, "name");
 +      setDrawElementPosition(frameName, frame, positioncss.sheet);
 +      setImage(frameName + "img", odfcontainer, (frame.firstChild), positioncss.sheet)
 +    };
 +    this.destroy = function(callback) {
 +      var head = doc.getElementsByTagName("head")[0];
 +      if(annotationsPane && annotationsPane.parentNode) {
 +        annotationsPane.parentNode.removeChild(annotationsPane)
 +      }
 +      if(sizer) {
 +        element.removeChild(sizer)
 +      }
 +      head.removeChild(webodfcss);
 +      head.removeChild(fontcss);
 +      head.removeChild(stylesxmlcss);
 +      head.removeChild(positioncss);
 +      selectionWatcher.destroy(function(err) {
 +        if(err) {
 +          callback(err)
 +        }else {
 +          pageSwitcher.destroy(callback)
 +        }
 +      })
 +    };
 +    function init() {
 +      webodfcss = addWebODFStyleSheet(doc);
 +      pageSwitcher = new PageSwitcher(addStyleSheet(doc));
 +      fontcss = addStyleSheet(doc);
 +      stylesxmlcss = addStyleSheet(doc);
 +      positioncss = addStyleSheet(doc)
 +    }
 +    init()
 +  };
 +  return odf.OdfCanvas
 +}();
 +runtime.loadClass("odf.OdfCanvas");
 +odf.CommandLineTools = function CommandLineTools() {
 +  this.roundTrip = function(inputfilepath, outputfilepath, callback) {
 +    function onready(odfcontainer) {
 +      if(odfcontainer.state === odf.OdfContainer.INVALID) {
 +        return callback("Document " + inputfilepath + " is invalid.")
 +      }
 +      if(odfcontainer.state === odf.OdfContainer.DONE) {
 +        odfcontainer.saveAs(outputfilepath, function(err) {
 +          callback(err)
 +        })
 +      }else {
 +        callback("Document was not completely loaded.")
 +      }
 +    }
 +    var odfcontainer = new odf.OdfContainer(inputfilepath, onready);
 +    return odfcontainer
 +  };
 +  this.render = function(inputfilepath, document, callback) {
 +    var body = document.getElementsByTagName("body")[0], odfcanvas;
 +    while(body.firstChild) {
 +      body.removeChild(body.firstChild)
 +    }
 +    odfcanvas = new odf.OdfCanvas(body);
 +    odfcanvas.addListener("statereadychange", function(err) {
 +      callback(err)
 +    });
 +    odfcanvas.load(inputfilepath)
 +  }
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.Server = function Server() {
 +};
 +ops.Server.prototype.connect = function(timeout, cb) {
 +};
 +ops.Server.prototype.networkStatus = function() {
 +};
 +ops.Server.prototype.login = function(login, password, successCb, failCb) {
 +};
 +ops.Server.prototype.joinSession = function(userId, sessionId, successCb, failCb) {
 +};
 +ops.Server.prototype.leaveSession = function(sessionId, memberId, successCb, failCb) {
 +};
 +ops.Server.prototype.getGenesisUrl = function(sessionId) {
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.Operation = function Operation() {
 +};
 +ops.Operation.prototype.init = function(data) {
 +};
 +ops.Operation.prototype.execute = function(odtDocument) {
 +};
 +ops.Operation.prototype.spec = function() {
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpAddCursor = function OpAddCursor() {
 +  var memberid, timestamp;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp
 +  };
 +  this.execute = function(odtDocument) {
 +    var cursor = odtDocument.getCursor(memberid);
 +    if(cursor) {
 +      return false
 +    }
 +    cursor = new ops.OdtCursor(memberid, odtDocument);
 +    odtDocument.addCursor(cursor);
 +    odtDocument.emit(ops.OdtDocument.signalCursorAdded, cursor);
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"AddCursor", memberid:memberid, timestamp:timestamp}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("odf.OdfUtils");
 +gui.StyleHelper = function StyleHelper(formatting) {
 +  var domUtils = new core.DomUtils, odfUtils = new odf.OdfUtils, textns = odf.Namespaces.textns;
 +  function getAppliedStyles(range) {
 +    var container, nodes;
 +    if(range.collapsed) {
 +      container = range.startContainer;
 +      if(container.hasChildNodes() && range.startOffset < container.childNodes.length) {
 +        container = container.childNodes[range.startOffset]
 +      }
 +      nodes = [container]
 +    }else {
 +      nodes = odfUtils.getTextNodes(range, true)
 +    }
 +    return formatting.getAppliedStyles(nodes)
 +  }
 +  this.getAppliedStyles = getAppliedStyles;
 +  this.applyStyle = function(memberId, range, info) {
 +    var nextTextNodes = domUtils.splitBoundaries(range), textNodes = odfUtils.getTextNodes(range, false), limits;
 +    limits = {startContainer:range.startContainer, startOffset:range.startOffset, endContainer:range.endContainer, endOffset:range.endOffset};
 +    formatting.applyStyle(memberId, textNodes, limits, info);
 +    nextTextNodes.forEach(domUtils.normalizeTextNodes)
 +  };
 +  function hasTextPropertyValue(appliedStyles, propertyName, propertyValue) {
 +    var hasOtherValue = true, properties, i;
 +    for(i = 0;i < appliedStyles.length;i += 1) {
 +      properties = appliedStyles[i]["style:text-properties"];
 +      hasOtherValue = !properties || properties[propertyName] !== propertyValue;
 +      if(hasOtherValue) {
 +        break
 +      }
 +    }
 +    return!hasOtherValue
 +  }
 +  this.isBold = function(appliedStyles) {
 +    return hasTextPropertyValue(appliedStyles, "fo:font-weight", "bold")
 +  };
 +  this.isItalic = function(appliedStyles) {
 +    return hasTextPropertyValue(appliedStyles, "fo:font-style", "italic")
 +  };
 +  this.hasUnderline = function(appliedStyles) {
 +    return hasTextPropertyValue(appliedStyles, "style:text-underline-style", "solid")
 +  };
 +  this.hasStrikeThrough = function(appliedStyles) {
 +    return hasTextPropertyValue(appliedStyles, "style:text-line-through-style", "solid")
 +  };
 +  function hasParagraphPropertyValue(range, propertyName, propertyValues) {
 +    var nodes = odfUtils.getParagraphElements(range), isStyleChecked = {}, isDefaultParagraphStyleChecked = false, paragraphStyleName, paragraphStyleElement, paragraphStyleAttributes, properties;
 +    while(nodes.length > 0) {
 +      paragraphStyleName = nodes[0].getAttributeNS(textns, "style-name");
 +      if(paragraphStyleName) {
 +        if(!isStyleChecked[paragraphStyleName]) {
 +          paragraphStyleElement = formatting.getStyleElement(paragraphStyleName, "paragraph");
 +          isStyleChecked[paragraphStyleName] = true
 +        }
 +      }else {
 +        if(!isDefaultParagraphStyleChecked) {
 +          isDefaultParagraphStyleChecked = true;
 +          paragraphStyleElement = formatting.getDefaultStyleElement("paragraph")
 +        }else {
 +          paragraphStyleElement = undefined
 +        }
 +      }
 +      if(paragraphStyleElement) {
 +        paragraphStyleAttributes = formatting.getInheritedStyleAttributes((paragraphStyleElement), true);
 +        properties = paragraphStyleAttributes["style:paragraph-properties"];
 +        if(properties && propertyValues.indexOf(properties[propertyName]) === -1) {
 +          return false
 +        }
 +      }
 +      nodes.pop()
 +    }
 +    return true
 +  }
 +  this.isAlignedLeft = function(range) {
 +    return hasParagraphPropertyValue(range, "fo:text-align", ["left", "start"])
 +  };
 +  this.isAlignedCenter = function(range) {
 +    return hasParagraphPropertyValue(range, "fo:text-align", ["center"])
 +  };
 +  this.isAlignedRight = function(range) {
 +    return hasParagraphPropertyValue(range, "fo:text-align", ["right", "end"])
 +  };
 +  this.isAlignedJustified = function(range) {
 +    return hasParagraphPropertyValue(range, "fo:text-align", ["justify"])
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.StyleHelper");
 +runtime.loadClass("odf.OdfUtils");
 +ops.OpApplyDirectStyling = function OpApplyDirectStyling() {
 +  var memberid, timestamp, position, length, setProperties, odfUtils = new odf.OdfUtils;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = parseInt(data.position, 10);
 +    length = parseInt(data.length, 10);
 +    setProperties = data.setProperties
 +  };
 +  function getRange(odtDocument) {
 +    var point1 = length >= 0 ? position : position + length, point2 = length >= 0 ? position + length : position, p1 = odtDocument.getIteratorAtPosition(point1), p2 = length ? odtDocument.getIteratorAtPosition(point2) : p1, range = odtDocument.getDOM().createRange();
 +    range.setStart(p1.container(), p1.unfilteredDomOffset());
 +    range.setEnd(p2.container(), p2.unfilteredDomOffset());
 +    return range
 +  }
 +  this.execute = function(odtDocument) {
 +    var range = getRange(odtDocument), impactedParagraphs = odfUtils.getImpactedParagraphs(range), styleHelper = new gui.StyleHelper(odtDocument.getFormatting());
 +    styleHelper.applyStyle(memberid, range, setProperties);
 +    range.detach();
 +    odtDocument.getOdfCanvas().refreshCSS();
 +    odtDocument.fixCursorPositions();
 +    impactedParagraphs.forEach(function(n) {
 +      odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:n, memberId:memberid, timeStamp:timestamp})
 +    });
 +    odtDocument.getOdfCanvas().rerenderAnnotations();
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"ApplyDirectStyling", memberid:memberid, timestamp:timestamp, position:position, length:length, setProperties:setProperties}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpRemoveCursor = function OpRemoveCursor() {
 +  var memberid, timestamp;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp
 +  };
 +  this.execute = function(odtDocument) {
 +    if(!odtDocument.removeCursor(memberid)) {
 +      return false
 +    }
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"RemoveCursor", memberid:memberid, timestamp:timestamp}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpMoveCursor = function OpMoveCursor() {
 +  var memberid, timestamp, position, length, selectionType;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = data.position;
 +    length = data.length || 0;
 +    selectionType = data.selectionType || ops.OdtCursor.RangeSelection
 +  };
 +  this.execute = function(odtDocument) {
-     var cursor = odtDocument.getCursor(memberid), oldPosition = odtDocument.getCursorPosition(memberid), positionFilter = odtDocument.getPositionFilter(), number = position - oldPosition, stepsToSelectionStart, stepsToSelectionEnd, stepCounter;
++    var cursor = odtDocument.getCursor(memberid), selectedRange;
 +    if(!cursor) {
 +      return false
 +    }
-     stepCounter = cursor.getStepCounter();
-     stepsToSelectionStart = stepCounter.countSteps(number, positionFilter);
-     cursor.move(stepsToSelectionStart);
-     if(length) {
-       stepsToSelectionEnd = stepCounter.countSteps(length, positionFilter);
-       cursor.move(stepsToSelectionEnd, true)
-     }
++    selectedRange = odtDocument.convertCursorToDomRange(position, length);
++    cursor.setSelectedRange(selectedRange, length >= 0);
 +    cursor.setSelectionType(selectionType);
 +    odtDocument.emit(ops.OdtDocument.signalCursorMoved, cursor);
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"MoveCursor", memberid:memberid, timestamp:timestamp, position:position, length:length, selectionType:selectionType}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpSetBlob = function OpSetBlob() {
 +  var memberid, timestamp, filename, mimetype, content;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    filename = data.filename;
 +    mimetype = data.mimetype;
 +    content = data.content
 +  };
 +  this.execute = function(odtDocument) {
 +    odtDocument.getOdfCanvas().odfContainer().setBlob(filename, mimetype, content);
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"SetBlob", memberid:memberid, timestamp:timestamp, filename:filename, mimetype:mimetype, content:content}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpRemoveBlob = function OpRemoveBlob() {
 +  var memberid, timestamp, filename;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    filename = data.filename
 +  };
 +  this.execute = function(odtDocument) {
 +    odtDocument.getOdfCanvas().odfContainer().removeBlob(filename);
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"RemoveBlob", memberid:memberid, timestamp:timestamp, filename:filename}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpInsertImage = function OpInsertImage() {
 +  var memberid, timestamp, position, filename, frameWidth, frameHeight, frameStyleName, frameName, drawns = odf.Namespaces.drawns, svgns = odf.Namespaces.svgns, textns = odf.Namespaces.textns, xlinkns = odf.Namespaces.xlinkns;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = data.position;
 +    filename = data.filename;
 +    frameWidth = data.frameWidth;
 +    frameHeight = data.frameHeight;
 +    frameStyleName = data.frameStyleName;
 +    frameName = data.frameName
 +  };
 +  function createFrameElement(document) {
 +    var imageNode = document.createElementNS(drawns, "draw:image"), frameNode = document.createElementNS(drawns, "draw:frame");
 +    imageNode.setAttributeNS(xlinkns, "xlink:href", filename);
 +    imageNode.setAttributeNS(xlinkns, "xlink:type", "simple");
 +    imageNode.setAttributeNS(xlinkns, "xlink:show", "embed");
 +    imageNode.setAttributeNS(xlinkns, "xlink:actuate", "onLoad");
 +    frameNode.setAttributeNS(drawns, "draw:style-name", frameStyleName);
 +    frameNode.setAttributeNS(drawns, "draw:name", frameName);
 +    frameNode.setAttributeNS(textns, "text:anchor-type", "as-char");
 +    frameNode.setAttributeNS(svgns, "svg:width", frameWidth);
 +    frameNode.setAttributeNS(svgns, "svg:height", frameHeight);
 +    frameNode.appendChild(imageNode);
 +    return frameNode
 +  }
 +  this.execute = function(odtDocument) {
-     var odfCanvas = odtDocument.getOdfCanvas(), domPosition = odtDocument.getPositionInTextNode(position, memberid), textNode, refNode, paragraphElement, frameElement;
++    var odfCanvas = odtDocument.getOdfCanvas(), domPosition = odtDocument.getTextNodeAtStep(position, memberid), textNode, refNode, paragraphElement, frameElement;
 +    if(!domPosition) {
 +      return false
 +    }
 +    textNode = domPosition.textNode;
 +    paragraphElement = odtDocument.getParagraphElement(textNode);
 +    refNode = domPosition.offset !== textNode.length ? textNode.splitText(domPosition.offset) : textNode.nextSibling;
 +    frameElement = createFrameElement(odtDocument.getDOM());
 +    textNode.parentNode.insertBefore(frameElement, refNode);
++    odtDocument.emit(ops.OdtDocument.signalStepsInserted, {position:position, length:1});
 +    if(textNode.length === 0) {
 +      textNode.parentNode.removeChild(textNode)
 +    }
 +    odfCanvas.addCssForFrameWithImage(frameElement);
 +    odfCanvas.refreshCSS();
 +    odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:paragraphElement, memberId:memberid, timeStamp:timestamp});
 +    odfCanvas.rerenderAnnotations();
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"InsertImage", memberid:memberid, timestamp:timestamp, filename:filename, position:position, frameWidth:frameWidth, frameHeight:frameHeight, frameStyleName:frameStyleName, frameName:frameName}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpInsertTable = function OpInsertTable() {
 +  var memberid, timestamp, initialRows, initialColumns, position, tableName, tableStyleName, tableColumnStyleName, tableCellStyleMatrix, tablens = "urn:oasis:names:tc:opendocument:xmlns:table:1.0", textns = "urn:oasis:names:tc:opendocument:xmlns:text:1.0";
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = data.position;
 +    initialRows = data.initialRows;
 +    initialColumns = data.initialColumns;
 +    tableName = data.tableName;
 +    tableStyleName = data.tableStyleName;
 +    tableColumnStyleName = data.tableColumnStyleName;
 +    tableCellStyleMatrix = data.tableCellStyleMatrix
 +  };
 +  function getCellStyleName(row, column) {
 +    var rowStyles;
 +    if(tableCellStyleMatrix.length === 1) {
 +      rowStyles = tableCellStyleMatrix[0]
 +    }else {
 +      if(tableCellStyleMatrix.length === 3) {
 +        switch(row) {
 +          case 0:
 +            rowStyles = tableCellStyleMatrix[0];
 +            break;
 +          case initialRows - 1:
 +            rowStyles = tableCellStyleMatrix[2];
 +            break;
 +          default:
 +            rowStyles = tableCellStyleMatrix[1];
 +            break
 +        }
 +      }else {
 +        rowStyles = tableCellStyleMatrix[row]
 +      }
 +    }
 +    if(rowStyles.length === 1) {
 +      return rowStyles[0]
 +    }
 +    if(rowStyles.length === 3) {
 +      switch(column) {
 +        case 0:
 +          return rowStyles[0];
 +        case initialColumns - 1:
 +          return rowStyles[2];
 +        default:
 +          return rowStyles[1]
 +      }
 +    }
 +    return rowStyles[column]
 +  }
 +  function createTableNode(document) {
 +    var tableNode = document.createElementNS(tablens, "table:table"), columns = document.createElementNS(tablens, "table:table-column"), row, cell, paragraph, rowCounter, columnCounter, cellStyleName;
 +    if(tableStyleName) {
 +      tableNode.setAttributeNS(tablens, "table:style-name", tableStyleName)
 +    }
 +    if(tableName) {
 +      tableNode.setAttributeNS(tablens, "table:name", tableName)
 +    }
 +    columns.setAttributeNS(tablens, "table:number-columns-repeated", initialColumns);
 +    if(tableColumnStyleName) {
 +      columns.setAttributeNS(tablens, "table:style-name", tableColumnStyleName)
 +    }
 +    tableNode.appendChild(columns);
 +    for(rowCounter = 0;rowCounter < initialRows;rowCounter += 1) {
 +      row = document.createElementNS(tablens, "table:table-row");
 +      for(columnCounter = 0;columnCounter < initialColumns;columnCounter += 1) {
 +        cell = document.createElementNS(tablens, "table:table-cell");
 +        cellStyleName = getCellStyleName(rowCounter, columnCounter);
 +        if(cellStyleName) {
 +          cell.setAttributeNS(tablens, "table:style-name", cellStyleName)
 +        }
 +        paragraph = document.createElementNS(textns, "text:p");
 +        cell.appendChild(paragraph);
 +        row.appendChild(cell)
 +      }
 +      tableNode.appendChild(row)
 +    }
 +    return tableNode
 +  }
 +  this.execute = function(odtDocument) {
-     var domPosition = odtDocument.getPositionInTextNode(position), rootNode = odtDocument.getRootNode(), previousSibling, tableNode;
++    var domPosition = odtDocument.getTextNodeAtStep(position), rootNode = odtDocument.getRootNode(), previousSibling, tableNode;
 +    if(domPosition) {
 +      tableNode = createTableNode(odtDocument.getDOM());
 +      previousSibling = odtDocument.getParagraphElement(domPosition.textNode);
 +      rootNode.insertBefore(tableNode, previousSibling.nextSibling);
++      odtDocument.emit(ops.OdtDocument.signalStepsInserted, {position:position, length:initialColumns * initialRows + 1});
 +      odtDocument.getOdfCanvas().refreshSize();
 +      odtDocument.emit(ops.OdtDocument.signalTableAdded, {tableElement:tableNode, memberId:memberid, timeStamp:timestamp});
 +      odtDocument.getOdfCanvas().rerenderAnnotations();
 +      return true
 +    }
 +    return false
 +  };
 +  this.spec = function() {
 +    return{optype:"InsertTable", memberid:memberid, timestamp:timestamp, position:position, initialRows:initialRows, initialColumns:initialColumns, tableName:tableName, tableStyleName:tableStyleName, tableColumnStyleName:tableColumnStyleName, tableCellStyleMatrix:tableCellStyleMatrix}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpInsertText = function OpInsertText() {
 +  var space = " ", tab = "\t", memberid, timestamp, position, text;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = data.position;
 +    text = data.text
 +  };
 +  function triggerLayoutInWebkit(textNode) {
 +    var parent = textNode.parentNode, next = textNode.nextSibling;
 +    parent.removeChild(textNode);
 +    parent.insertBefore(textNode, next)
 +  }
 +  function requiresSpaceElement(text, index) {
 +    return text[index] === space && (index === 0 || (index === text.length - 1 || text[index - 1] === space))
 +  }
 +  this.execute = function(odtDocument) {
 +    var domPosition, previousNode, parentElement, nextNode = null, ownerDocument = odtDocument.getDOM(), paragraphElement, textns = "urn:oasis:names:tc:opendocument:xmlns:text:1.0", toInsertIndex = 0, spaceTag, spaceElement, i;
 +    function insertTextNode(toInsertText) {
 +      parentElement.insertBefore(ownerDocument.createTextNode(toInsertText), nextNode)
 +    }
 +    odtDocument.upgradeWhitespacesAtPosition(position);
-     domPosition = odtDocument.getPositionInTextNode(position, memberid);
++    domPosition = odtDocument.getTextNodeAtStep(position, memberid);
 +    if(domPosition) {
 +      previousNode = domPosition.textNode;
 +      nextNode = previousNode.nextSibling;
 +      parentElement = previousNode.parentNode;
 +      paragraphElement = odtDocument.getParagraphElement(previousNode);
 +      for(i = 0;i < text.length;i += 1) {
 +        if(requiresSpaceElement(text, i) || text[i] === tab) {
 +          if(toInsertIndex === 0) {
 +            if(domPosition.offset !== previousNode.length) {
 +              nextNode = previousNode.splitText(domPosition.offset)
 +            }
 +            if(0 < i) {
 +              previousNode.appendData(text.substring(0, i))
 +            }
 +          }else {
 +            if(toInsertIndex < i) {
 +              insertTextNode(text.substring(toInsertIndex, i))
 +            }
 +          }
 +          toInsertIndex = i + 1;
 +          spaceTag = text[i] === space ? "text:s" : "text:tab";
 +          spaceElement = ownerDocument.createElementNS(textns, spaceTag);
 +          spaceElement.appendChild(ownerDocument.createTextNode(text[i]));
 +          parentElement.insertBefore(spaceElement, nextNode)
 +        }
 +      }
 +      if(toInsertIndex === 0) {
 +        previousNode.insertData(domPosition.offset, text)
 +      }else {
 +        if(toInsertIndex < text.length) {
 +          insertTextNode(text.substring(toInsertIndex))
 +        }
 +      }
 +      triggerLayoutInWebkit(previousNode);
 +      if(previousNode.length === 0) {
 +        previousNode.parentNode.removeChild(previousNode)
 +      }
++      odtDocument.emit(ops.OdtDocument.signalStepsInserted, {position:position, length:text.length});
 +      if(position > 0) {
 +        if(position > 1) {
 +          odtDocument.downgradeWhitespacesAtPosition(position - 2)
 +        }
 +        odtDocument.downgradeWhitespacesAtPosition(position - 1)
 +      }
 +      odtDocument.downgradeWhitespacesAtPosition(position);
 +      odtDocument.downgradeWhitespacesAtPosition(position + text.length - 1);
 +      odtDocument.downgradeWhitespacesAtPosition(position + text.length);
 +      odtDocument.getOdfCanvas().refreshSize();
 +      odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:paragraphElement, memberId:memberid, timeStamp:timestamp});
 +      odtDocument.getOdfCanvas().rerenderAnnotations();
 +      return true
 +    }
 +    return false
 +  };
 +  this.spec = function() {
 +    return{optype:"InsertText", memberid:memberid, timestamp:timestamp, position:position, text:text}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("core.DomUtils");
 +ops.OpRemoveText = function OpRemoveText() {
-   var memberid, timestamp, position, length, odfUtils, domUtils, editinfons = "urn:webodf:names:editinfo", FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT, odfNodeNamespaceMap = {};
++  var memberid, timestamp, position, length, odfUtils, domUtils, editinfons = "urn:webodf:names:editinfo", odfNodeNamespaceMap = {};
 +  this.init = function(data) {
 +    runtime.assert(data.length >= 0, "OpRemoveText only supports positive lengths");
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = parseInt(data.position, 10);
 +    length = parseInt(data.length, 10);
 +    odfUtils = new odf.OdfUtils;
 +    domUtils = new core.DomUtils;
 +    odfNodeNamespaceMap[odf.Namespaces.dbns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.dcns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.dr3dns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.drawns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.chartns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.formns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.numberns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.officens] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.presentationns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.stylens] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.svgns] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.tablens] = true;
 +    odfNodeNamespaceMap[odf.Namespaces.textns] = true
 +  };
 +  function CollapsingRules(rootNode) {
 +    function isOdfNode(node) {
 +      return odfNodeNamespaceMap.hasOwnProperty(node.namespaceURI)
 +    }
 +    function shouldRemove(node) {
 +      return isOdfNode(node) || (node.localName === "br" && odfUtils.isLineBreak(node.parentNode) || node.nodeType === Node.TEXT_NODE && isOdfNode((node.parentNode)))
 +    }
 +    function isEmpty(node) {
 +      var childNode;
 +      if(odfUtils.isCharacterElement(node)) {
 +        return false
 +      }
 +      if(node.nodeType === Node.TEXT_NODE) {
 +        return node.textContent.length === 0
 +      }
 +      childNode = node.firstChild;
 +      while(childNode) {
 +        if(isOdfNode(childNode) || !isEmpty(childNode)) {
 +          return false
 +        }
 +        childNode = childNode.nextSibling
 +      }
 +      return true
 +    }
 +    this.isEmpty = isEmpty;
 +    function isCollapsibleContainer(node) {
 +      return!odfUtils.isParagraph(node) && (node !== rootNode && isEmpty(node))
 +    }
 +    function mergeChildrenIntoParent(targetNode) {
 +      var parent;
 +      if(targetNode.nodeType === Node.TEXT_NODE) {
 +        parent = targetNode.parentNode;
 +        parent.removeChild(targetNode)
 +      }else {
 +        parent = domUtils.removeUnwantedNodes(targetNode, shouldRemove)
 +      }
 +      if(isCollapsibleContainer(parent)) {
 +        return mergeChildrenIntoParent(parent)
 +      }
 +      return parent
 +    }
 +    this.mergeChildrenIntoParent = mergeChildrenIntoParent
 +  }
 +  function mergeParagraphs(first, second, collapseRules) {
 +    var child, mergeForward = false, destination = first, source = second, secondParent, insertionPoint = null;
 +    if(collapseRules.isEmpty(first)) {
 +      mergeForward = true;
 +      if(second.parentNode !== first.parentNode) {
 +        secondParent = second.parentNode;
 +        first.parentNode.insertBefore(second, first.nextSibling)
 +      }
 +      source = first;
 +      destination = second;
 +      insertionPoint = destination.getElementsByTagNameNS(editinfons, "editinfo")[0] || destination.firstChild
 +    }
 +    while(source.hasChildNodes()) {
 +      child = mergeForward ? source.lastChild : source.firstChild;
 +      source.removeChild(child);
 +      if(child.localName !== "editinfo") {
 +        destination.insertBefore(child, insertionPoint)
 +      }
 +    }
 +    if(secondParent && collapseRules.isEmpty(secondParent)) {
 +      collapseRules.mergeChildrenIntoParent(secondParent)
 +    }
 +    collapseRules.mergeChildrenIntoParent(source);
 +    return destination
 +  }
-   function stepsToRange(odtDocument) {
-     var iterator, filter = odtDocument.getPositionFilter(), startContainer, startOffset, endContainer, endOffset, remainingLength = length, range = odtDocument.getDOM().createRange();
-     iterator = odtDocument.getIteratorAtPosition(position);
-     startContainer = iterator.container();
-     startOffset = iterator.unfilteredDomOffset();
-     while(remainingLength && iterator.nextPosition()) {
-       endContainer = iterator.container();
-       endOffset = iterator.unfilteredDomOffset();
-       if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
-         remainingLength -= 1
-       }
-     }
-     range.setStart(startContainer, startOffset);
-     range.setEnd(endContainer, endOffset);
-     domUtils.splitBoundaries(range);
-     return range
-   }
 +  this.execute = function(odtDocument) {
 +    var paragraphElement, destinationParagraph, range, textNodes, paragraphs, cursor = odtDocument.getCursor(memberid), collapseRules = new CollapsingRules(odtDocument.getRootNode());
 +    odtDocument.upgradeWhitespacesAtPosition(position);
 +    odtDocument.upgradeWhitespacesAtPosition(position + length);
-     range = stepsToRange(odtDocument);
++    range = odtDocument.convertCursorToDomRange(position, length);
++    domUtils.splitBoundaries(range);
 +    paragraphElement = odtDocument.getParagraphElement(range.startContainer);
 +    textNodes = odfUtils.getTextElements(range, false, true);
 +    paragraphs = odfUtils.getParagraphElements(range);
 +    range.detach();
 +    textNodes.forEach(function(element) {
 +      collapseRules.mergeChildrenIntoParent(element)
 +    });
 +    destinationParagraph = paragraphs.reduce(function(destination, paragraph) {
 +      return mergeParagraphs(destination, paragraph, collapseRules)
 +    });
++    odtDocument.emit(ops.OdtDocument.signalStepsRemoved, {position:position, length:length});
 +    odtDocument.downgradeWhitespacesAtPosition(position);
 +    odtDocument.fixCursorPositions();
 +    odtDocument.getOdfCanvas().refreshSize();
 +    odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:destinationParagraph || paragraphElement, memberId:memberid, timeStamp:timestamp});
 +    if(cursor) {
 +      cursor.resetSelectionType();
 +      odtDocument.emit(ops.OdtDocument.signalCursorMoved, cursor)
 +    }
 +    odtDocument.getOdfCanvas().rerenderAnnotations();
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"RemoveText", memberid:memberid, timestamp:timestamp, position:position, length:length}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpSplitParagraph = function OpSplitParagraph() {
 +  var memberid, timestamp, position, odfUtils;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = data.position;
 +    odfUtils = new odf.OdfUtils
 +  };
 +  this.execute = function(odtDocument) {
 +    var domPosition, paragraphNode, targetNode, node, splitNode, splitChildNode, keptChildNode;
 +    odtDocument.upgradeWhitespacesAtPosition(position);
-     domPosition = odtDocument.getPositionInTextNode(position, memberid);
++    domPosition = odtDocument.getTextNodeAtStep(position, memberid);
 +    if(!domPosition) {
 +      return false
 +    }
 +    paragraphNode = odtDocument.getParagraphElement(domPosition.textNode);
 +    if(!paragraphNode) {
 +      return false
 +    }
 +    if(odfUtils.isListItem(paragraphNode.parentNode)) {
 +      targetNode = paragraphNode.parentNode
 +    }else {
 +      targetNode = paragraphNode
 +    }
 +    if(domPosition.offset === 0) {
 +      keptChildNode = domPosition.textNode.previousSibling;
 +      splitChildNode = null
 +    }else {
 +      keptChildNode = domPosition.textNode;
 +      if(domPosition.offset >= domPosition.textNode.length) {
 +        splitChildNode = null
 +      }else {
 +        splitChildNode = (domPosition.textNode.splitText(domPosition.offset))
 +      }
 +    }
 +    node = domPosition.textNode;
 +    while(node !== targetNode) {
 +      node = node.parentNode;
 +      splitNode = node.cloneNode(false);
-       if(!keptChildNode) {
-         node.parentNode.insertBefore(splitNode, node);
-         keptChildNode = splitNode;
-         splitChildNode = node
-       }else {
-         if(splitChildNode) {
-           splitNode.appendChild(splitChildNode)
-         }
-         while(keptChildNode.nextSibling) {
++      if(splitChildNode) {
++        splitNode.appendChild(splitChildNode)
++      }
++      if(keptChildNode) {
++        while(keptChildNode && keptChildNode.nextSibling) {
 +          splitNode.appendChild(keptChildNode.nextSibling)
 +        }
-         node.parentNode.insertBefore(splitNode, node.nextSibling);
-         keptChildNode = node;
-         splitChildNode = splitNode
++      }else {
++        while(node.firstChild) {
++          splitNode.appendChild(node.firstChild)
++        }
 +      }
++      node.parentNode.insertBefore(splitNode, node.nextSibling);
++      keptChildNode = node;
++      splitChildNode = splitNode
 +    }
 +    if(odfUtils.isListItem(splitChildNode)) {
 +      splitChildNode = splitChildNode.childNodes[0]
 +    }
 +    if(domPosition.textNode.length === 0) {
 +      domPosition.textNode.parentNode.removeChild(domPosition.textNode)
 +    }
++    odtDocument.emit(ops.OdtDocument.signalStepsInserted, {position:position, length:1});
 +    odtDocument.fixCursorPositions();
 +    odtDocument.getOdfCanvas().refreshSize();
 +    odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:paragraphNode, memberId:memberid, timeStamp:timestamp});
 +    odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:splitChildNode, memberId:memberid, timeStamp:timestamp});
 +    odtDocument.getOdfCanvas().rerenderAnnotations();
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"SplitParagraph", memberid:memberid, timestamp:timestamp, position:position}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpSetParagraphStyle = function OpSetParagraphStyle() {
 +  var memberid, timestamp, position, styleName, textns = "urn:oasis:names:tc:opendocument:xmlns:text:1.0";
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = data.position;
 +    styleName = data.styleName
 +  };
 +  this.execute = function(odtDocument) {
 +    var iterator, paragraphNode;
 +    iterator = odtDocument.getIteratorAtPosition(position);
 +    paragraphNode = odtDocument.getParagraphElement(iterator.container());
 +    if(paragraphNode) {
 +      if(styleName !== "") {
 +        paragraphNode.setAttributeNS(textns, "text:style-name", styleName)
 +      }else {
 +        paragraphNode.removeAttributeNS(textns, "style-name")
 +      }
 +      odtDocument.getOdfCanvas().refreshSize();
 +      odtDocument.emit(ops.OdtDocument.signalParagraphChanged, {paragraphElement:paragraphNode, timeStamp:timestamp, memberId:memberid});
 +      odtDocument.getOdfCanvas().rerenderAnnotations();
 +      return true
 +    }
 +    return false
 +  };
 +  this.spec = function() {
 +    return{optype:"SetParagraphStyle", memberid:memberid, timestamp:timestamp, position:position, styleName:styleName}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
 +ops.OpUpdateParagraphStyle = function OpUpdateParagraphStyle() {
 +  var memberid, timestamp, styleName, setProperties, removedProperties, paragraphPropertiesName = "style:paragraph-properties", textPropertiesName = "style:text-properties", stylens = odf.Namespaces.stylens;
 +  function removedAttributesFromStyleNode(node, removedAttributeNames) {
 +    var i, attributeNameParts, attributeNameList = removedAttributeNames ? removedAttributeNames.split(",") : [];
 +    for(i = 0;i < attributeNameList.length;i += 1) {
 +      attributeNameParts = attributeNameList[i].split(":");
 +      node.removeAttributeNS(odf.Namespaces.resolvePrefix(attributeNameParts[0]), attributeNameParts[1])
 +    }
 +  }
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    styleName = data.styleName;
 +    setProperties = data.setProperties;
 +    removedProperties = data.removedProperties
 +  };
 +  this.execute = function(odtDocument) {
 +    var formatting = odtDocument.getFormatting(), styleNode, paragraphPropertiesNode, textPropertiesNode;
 +    if(styleName !== "") {
 +      styleNode = odtDocument.getParagraphStyleElement(styleName)
 +    }else {
 +      styleNode = formatting.getDefaultStyleElement("paragraph")
 +    }
 +    if(styleNode) {
 +      paragraphPropertiesNode = styleNode.getElementsByTagNameNS(stylens, "paragraph-properties")[0];
 +      textPropertiesNode = styleNode.getElementsByTagNameNS(stylens, "text-properties")[0];
 +      if(setProperties) {
 +        formatting.updateStyle(styleNode, setProperties)
 +      }
 +      if(removedProperties) {
 +        if(removedProperties[paragraphPropertiesName]) {
 +          removedAttributesFromStyleNode(paragraphPropertiesNode, removedProperties[paragraphPropertiesName].attributes);
 +          if(paragraphPropertiesNode.attributes.length === 0) {
 +            styleNode.removeChild(paragraphPropertiesNode)
 +          }
 +        }
 +        if(removedProperties[textPropertiesName]) {
 +          removedAttributesFromStyleNode(textPropertiesNode, removedProperties[textPropertiesName].attributes);
 +          if(textPropertiesNode.attributes.length === 0) {
 +            styleNode.removeChild(textPropertiesNode)
 +          }
 +        }
 +        removedAttributesFromStyleNode(styleNode, removedProperties.attributes)
 +      }
 +      odtDocument.getOdfCanvas().refreshCSS();
 +      odtDocument.emit(ops.OdtDocument.signalParagraphStyleModified, styleName);
 +      odtDocument.getOdfCanvas().rerenderAnnotations();
 +      return true
 +    }
 +    return false
 +  };
 +  this.spec = function() {
 +    return{optype:"UpdateParagraphStyle", memberid:memberid, timestamp:timestamp, styleName:styleName, setProperties:setProperties, removedProperties:removedProperties}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
 +ops.OpAddStyle = function OpAddStyle() {
 +  var memberid, timestamp, styleName, styleFamily, isAutomaticStyle, setProperties, stylens = odf.Namespaces.stylens;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    styleName = data.styleName;
 +    styleFamily = data.styleFamily;
 +    isAutomaticStyle = data.isAutomaticStyle === "true" || data.isAutomaticStyle === true;
 +    setProperties = data.setProperties
 +  };
 +  this.execute = function(odtDocument) {
 +    var odfContainer = odtDocument.getOdfCanvas().odfContainer(), formatting = odtDocument.getFormatting(), dom = odtDocument.getDOM(), styleNode = dom.createElementNS(stylens, "style:style");
 +    if(!styleNode) {
 +      return false
 +    }
 +    if(setProperties) {
 +      formatting.updateStyle(styleNode, setProperties)
 +    }
 +    styleNode.setAttributeNS(stylens, "style:family", styleFamily);
 +    styleNode.setAttributeNS(stylens, "style:name", styleName);
 +    if(isAutomaticStyle) {
 +      odfContainer.rootElement.automaticStyles.appendChild(styleNode)
 +    }else {
 +      odfContainer.rootElement.styles.appendChild(styleNode)
 +    }
 +    odtDocument.getOdfCanvas().refreshCSS();
 +    if(!isAutomaticStyle) {
 +      odtDocument.emit(ops.OdtDocument.signalCommonStyleCreated, {name:styleName, family:styleFamily})
 +    }
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"AddStyle", memberid:memberid, timestamp:timestamp, styleName:styleName, styleFamily:styleFamily, isAutomaticStyle:isAutomaticStyle, setProperties:setProperties}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpRemoveStyle = function OpRemoveStyle() {
 +  var memberid, timestamp, styleName, styleFamily;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    styleName = data.styleName;
 +    styleFamily = data.styleFamily
 +  };
 +  this.execute = function(odtDocument) {
 +    var styleNode = odtDocument.getStyleElement(styleName, styleFamily);
 +    if(!styleNode) {
 +      return false
 +    }
 +    styleNode.parentNode.removeChild(styleNode);
 +    odtDocument.getOdfCanvas().refreshCSS();
 +    odtDocument.emit(ops.OdtDocument.signalCommonStyleDeleted, {name:styleName, family:styleFamily});
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"RemoveStyle", memberid:memberid, timestamp:timestamp, styleName:styleName, styleFamily:styleFamily}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OpAddAnnotation = function OpAddAnnotation() {
 +  var memberid, timestamp, position, length, name;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = parseInt(data.timestamp, 10);
 +    position = parseInt(data.position, 10);
 +    length = parseInt(data.length, 10) || 0;
 +    name = data.name
 +  };
 +  function createAnnotationNode(odtDocument, date) {
 +    var annotationNode, creatorNode, dateNode, listNode, listItemNode, paragraphNode, doc = odtDocument.getDOM();
 +    annotationNode = doc.createElementNS(odf.Namespaces.officens, "office:annotation");
 +    annotationNode.setAttributeNS(odf.Namespaces.officens, "office:name", name);
 +    creatorNode = doc.createElementNS(odf.Namespaces.dcns, "dc:creator");
 +    creatorNode.setAttributeNS("urn:webodf:names:editinfo", "editinfo:memberid", memberid);
 +    dateNode = doc.createElementNS(odf.Namespaces.dcns, "dc:date");
 +    dateNode.appendChild(doc.createTextNode(date.toISOString()));
 +    listNode = doc.createElementNS(odf.Namespaces.textns, "text:list");
 +    listItemNode = doc.createElementNS(odf.Namespaces.textns, "text:list-item");
 +    paragraphNode = doc.createElementNS(odf.Namespaces.textns, "text:p");
 +    listItemNode.appendChild(paragraphNode);
 +    listNode.appendChild(listItemNode);
 +    annotationNode.appendChild(creatorNode);
 +    annotationNode.appendChild(dateNode);
 +    annotationNode.appendChild(listNode);
 +    return annotationNode
 +  }
 +  function createAnnotationEnd(odtDocument) {
 +    var annotationEnd, doc = odtDocument.getDOM();
 +    annotationEnd = doc.createElementNS(odf.Namespaces.officens, "office:annotation-end");
 +    annotationEnd.setAttributeNS(odf.Namespaces.officens, "office:name", name);
 +    return annotationEnd
 +  }
 +  function insertNodeAtPosition(odtDocument, node, insertPosition) {
-     var previousNode, parentNode, domPosition = odtDocument.getPositionInTextNode(insertPosition, memberid);
++    var previousNode, parentNode, domPosition = odtDocument.getTextNodeAtStep(insertPosition, memberid);
 +    if(domPosition) {
 +      previousNode = domPosition.textNode;
 +      parentNode = previousNode.parentNode;
 +      if(domPosition.offset !== previousNode.length) {
 +        previousNode.splitText(domPosition.offset)
 +      }
 +      parentNode.insertBefore(node, previousNode.nextSibling);
 +      if(previousNode.length === 0) {
 +        parentNode.removeChild(previousNode)
 +      }
 +    }
 +  }
 +  this.execute = function(odtDocument) {
 +    var annotation = {}, positionFilter = odtDocument.getPositionFilter(), cursor = odtDocument.getCursor(memberid), oldCursorPosition = odtDocument.getCursorPosition(memberid), lengthToMove = position - oldCursorPosition - 1, stepsToParagraph;
 +    annotation.node = createAnnotationNode(odtDocument, new Date(timestamp));
 +    if(!annotation.node) {
 +      return false
 +    }
 +    if(length) {
 +      annotation.end = createAnnotationEnd(odtDocument);
 +      if(!annotation.end) {
 +        return false
 +      }
 +      insertNodeAtPosition(odtDocument, annotation.end, position + length)
 +    }
 +    insertNodeAtPosition(odtDocument, annotation.node, position);
++    odtDocument.emit(ops.OdtDocument.signalStepsInserted, {position:position, length:length});
 +    if(cursor) {
 +      stepsToParagraph = cursor.getStepCounter().countSteps(lengthToMove, positionFilter);
 +      cursor.move(stepsToParagraph);
 +      cursor.resetSelectionType();
 +      odtDocument.emit(ops.OdtDocument.signalCursorMoved, cursor)
 +    }
 +    odtDocument.getOdfCanvas().addAnnotation(annotation);
 +    odtDocument.fixCursorPositions();
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"AddAnnotation", memberid:memberid, timestamp:timestamp, position:position, length:length, name:name}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("core.DomUtils");
 +ops.OpRemoveAnnotation = function OpRemoveAnnotation() {
 +  var memberid, timestamp, position, length, domUtils;
 +  this.init = function(data) {
 +    memberid = data.memberid;
 +    timestamp = data.timestamp;
 +    position = parseInt(data.position, 10);
 +    length = parseInt(data.length, 10);
 +    domUtils = new core.DomUtils
 +  };
 +  this.execute = function(odtDocument) {
-     var iterator = odtDocument.getIteratorAtPosition(position), container = iterator.container(), annotationName, annotationNode = null, annotationEnd = null, cursors;
++    var iterator = odtDocument.getIteratorAtPosition(position), container = iterator.container(), annotationName, annotationNode, annotationEnd, cursors;
 +    while(!(container.namespaceURI === odf.Namespaces.officens && container.localName === "annotation")) {
 +      container = container.parentNode
 +    }
 +    if(container === null) {
 +      return false
 +    }
 +    annotationNode = container;
 +    annotationName = annotationNode.getAttributeNS(odf.Namespaces.officens, "name");
 +    if(annotationName) {
 +      annotationEnd = domUtils.getElementsByTagNameNS(odtDocument.getRootNode(), odf.Namespaces.officens, "annotation-end").filter(function(element) {
 +        return annotationName === element.getAttributeNS(odf.Namespaces.officens, "name")
 +      })[0] || null
 +    }
 +    odtDocument.getOdfCanvas().forgetAnnotations();
 +    cursors = domUtils.getElementsByTagNameNS(annotationNode, "urn:webodf:names:cursor", "cursor");
 +    while(cursors.length) {
 +      annotationNode.parentNode.insertBefore(cursors.pop(), annotationNode)
 +    }
 +    annotationNode.parentNode.removeChild(annotationNode);
 +    if(annotationEnd) {
 +      annotationEnd.parentNode.removeChild(annotationEnd)
 +    }
++    odtDocument.emit(ops.OdtDocument.signalStepsRemoved, {position:position > 0 ? position - 1 : position, length:length});
 +    odtDocument.fixCursorPositions();
 +    odtDocument.getOdfCanvas().refreshAnnotations();
 +    return true
 +  };
 +  this.spec = function() {
 +    return{optype:"RemoveAnnotation", memberid:memberid, timestamp:timestamp, position:position, length:length}
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.OpAddCursor");
 +runtime.loadClass("ops.OpApplyDirectStyling");
 +runtime.loadClass("ops.OpRemoveCursor");
 +runtime.loadClass("ops.OpMoveCursor");
 +runtime.loadClass("ops.OpSetBlob");
 +runtime.loadClass("ops.OpRemoveBlob");
 +runtime.loadClass("ops.OpInsertImage");
 +runtime.loadClass("ops.OpInsertTable");
 +runtime.loadClass("ops.OpInsertText");
 +runtime.loadClass("ops.OpRemoveText");
 +runtime.loadClass("ops.OpSplitParagraph");
 +runtime.loadClass("ops.OpSetParagraphStyle");
 +runtime.loadClass("ops.OpUpdateParagraphStyle");
 +runtime.loadClass("ops.OpAddStyle");
 +runtime.loadClass("ops.OpRemoveStyle");
 +runtime.loadClass("ops.OpAddAnnotation");
 +runtime.loadClass("ops.OpRemoveAnnotation");
 +ops.OperationFactory = function OperationFactory() {
 +  var specs;
 +  this.register = function(specName, specConstructor) {
 +    specs[specName] = specConstructor
 +  };
 +  this.create = function(spec) {
 +    var op = null, specConstructor = specs[spec.optype];
 +    if(specConstructor) {
 +      op = specConstructor(spec);
 +      op.init(spec)
 +    }
 +    return op
 +  };
 +  function constructor(OperationType) {
 +    return function() {
 +      return new OperationType
 +    }
 +  }
 +  function init() {
 +    specs = {AddCursor:constructor(ops.OpAddCursor), ApplyDirectStyling:constructor(ops.OpApplyDirectStyling), SetBlob:constructor(ops.OpSetBlob), RemoveBlob:constructor(ops.OpRemoveBlob), InsertImage:constructor(ops.OpInsertImage), InsertTable:constructor(ops.OpInsertTable), InsertText:constructor(ops.OpInsertText), RemoveText:constructor(ops.OpRemoveText), SplitParagraph:constructor(ops.OpSplitParagraph), SetParagraphStyle:constructor(ops.OpSetParagraphStyle), UpdateParagraphStyle:con [...]
 +    AddStyle:constructor(ops.OpAddStyle), RemoveStyle:constructor(ops.OpRemoveStyle), MoveCursor:constructor(ops.OpMoveCursor), RemoveCursor:constructor(ops.OpRemoveCursor), AddAnnotation:constructor(ops.OpAddAnnotation), RemoveAnnotation:constructor(ops.OpRemoveAnnotation)}
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Cursor");
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("core.PositionIterator");
 +runtime.loadClass("core.PositionFilter");
 +runtime.loadClass("core.LoopWatchDog");
 +runtime.loadClass("odf.OdfUtils");
 +gui.SelectionMover = function SelectionMover(cursor, rootNode) {
 +  var odfUtils, domUtils, positionIterator, cachedXOffset, timeoutHandle, FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT;
 +  function getIteratorAtCursor() {
 +    positionIterator.setUnfilteredPosition(cursor.getNode(), 0);
 +    return positionIterator
 +  }
 +  function getMaximumNodePosition(node) {
 +    return node.nodeType === Node.TEXT_NODE ? node.textContent.length : node.childNodes.length
 +  }
 +  function getClientRect(clientRectangles, useRightEdge) {
 +    var rectangle, simplifiedRectangle = null;
 +    if(clientRectangles) {
 +      rectangle = useRightEdge ? clientRectangles[clientRectangles.length - 1] : clientRectangles[0]
 +    }
 +    if(rectangle) {
 +      simplifiedRectangle = {top:rectangle.top, left:useRightEdge ? rectangle.right : rectangle.left, bottom:rectangle.bottom}
 +    }
 +    return simplifiedRectangle
 +  }
 +  function getVisibleRect(container, offset, range, useRightEdge) {
 +    var rectangle, nodeType = container.nodeType;
 +    range.setStart(container, offset);
 +    range.collapse(!useRightEdge);
 +    rectangle = getClientRect(range.getClientRects(), useRightEdge === true);
 +    if(!rectangle && offset > 0) {
 +      range.setStart(container, offset - 1);
 +      range.setEnd(container, offset);
 +      rectangle = getClientRect(range.getClientRects(), true)
 +    }
 +    if(!rectangle) {
 +      if(nodeType === Node.ELEMENT_NODE && container.childNodes[offset - 1]) {
 +        rectangle = getVisibleRect(container, offset - 1, range, true)
 +      }else {
 +        if(container.nodeType === Node.TEXT_NODE && offset > 0) {
 +          rectangle = getVisibleRect(container, offset - 1, range, true)
 +        }else {
 +          if(container.previousSibling) {
 +            rectangle = getVisibleRect(container.previousSibling, getMaximumNodePosition(container.previousSibling), range, true)
 +          }else {
 +            if(container.parentNode && container.parentNode !== rootNode) {
 +              rectangle = getVisibleRect(container.parentNode, 0, range, false)
 +            }else {
 +              range.selectNode(rootNode);
 +              rectangle = getClientRect(range.getClientRects(), false)
 +            }
 +          }
 +        }
 +      }
 +    }
 +    runtime.assert(Boolean(rectangle), "No visible rectangle found");
 +    return(rectangle)
 +  }
 +  function doMove(positions, extend, move) {
 +    var left = positions, iterator = getIteratorAtCursor(), initialRect, range = (rootNode.ownerDocument.createRange()), selectionRange = cursor.getSelectedRange() ? cursor.getSelectedRange().cloneRange() : rootNode.ownerDocument.createRange(), newRect, horizontalMovement, o, c, isForwardSelection;
 +    initialRect = getVisibleRect(iterator.container(), iterator.unfilteredDomOffset(), range);
 +    while(left > 0 && move()) {
 +      left -= 1
 +    }
 +    if(extend) {
 +      c = iterator.container();
 +      o = iterator.unfilteredDomOffset();
 +      if(selectionRange.comparePoint(c, o) === -1) {
 +        selectionRange.setStart(c, o);
 +        isForwardSelection = false
 +      }else {
 +        selectionRange.setEnd(c, o)
 +      }
 +    }else {
 +      selectionRange.setStart(iterator.container(), iterator.unfilteredDomOffset());
 +      selectionRange.collapse(true)
 +    }
 +    cursor.setSelectedRange(selectionRange, isForwardSelection);
 +    iterator = getIteratorAtCursor();
 +    newRect = getVisibleRect(iterator.container(), iterator.unfilteredDomOffset(), range);
 +    horizontalMovement = newRect.top === initialRect.top ? true : false;
 +    if(horizontalMovement || cachedXOffset === undefined) {
 +      cachedXOffset = newRect.left
 +    }
 +    runtime.clearTimeout(timeoutHandle);
 +    timeoutHandle = runtime.setTimeout(function() {
 +      cachedXOffset = undefined
 +    }, 2E3);
 +    range.detach();
 +    return positions - left
 +  }
 +  this.movePointForward = function(positions, extend) {
 +    return doMove(positions, extend || false, positionIterator.nextPosition)
 +  };
 +  this.movePointBackward = function(positions, extend) {
 +    return doMove(positions, extend || false, positionIterator.previousPosition)
 +  };
 +  function isPositionWalkable(filter) {
 +    var iterator = getIteratorAtCursor();
 +    if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +      iterator.setUnfilteredPosition(cursor.getAnchorNode(), 0);
 +      if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +        return true
 +      }
 +    }
 +    return false
 +  }
 +  function countSteps(iterator, steps, filter) {
-     var watch = new core.LoopWatchDog(1E3), positions = 0, positionsCount = 0, increment = steps >= 0 ? 1 : -1, delegate = (steps >= 0 ? iterator.nextPosition : iterator.previousPosition);
++    var watch = new core.LoopWatchDog(1E4), positions = 0, positionsCount = 0, increment = steps >= 0 ? 1 : -1, delegate = (steps >= 0 ? iterator.nextPosition : iterator.previousPosition);
 +    while(steps !== 0 && delegate()) {
 +      watch.check();
 +      positionsCount += increment;
 +      if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +        steps -= increment;
 +        positions += positionsCount;
 +        positionsCount = 0
 +      }
 +    }
 +    return positions
 +  }
 +  function convertForwardStepsBetweenFilters(stepsFilter1, filter1, filter2) {
-     var iterator = getIteratorAtCursor(), watch = new core.LoopWatchDog(1E3), pendingStepsFilter2 = 0, stepsFilter2 = 0;
++    var iterator = getIteratorAtCursor(), watch = new core.LoopWatchDog(1E4), pendingStepsFilter2 = 0, stepsFilter2 = 0;
 +    while(stepsFilter1 > 0 && iterator.nextPosition()) {
 +      watch.check();
 +      if(filter2.acceptPosition(iterator) === FILTER_ACCEPT) {
 +        pendingStepsFilter2 += 1;
 +        if(filter1.acceptPosition(iterator) === FILTER_ACCEPT) {
 +          stepsFilter2 += pendingStepsFilter2;
 +          pendingStepsFilter2 = 0;
 +          stepsFilter1 -= 1
 +        }
 +      }
 +    }
 +    return stepsFilter2
 +  }
 +  function convertBackwardStepsBetweenFilters(stepsFilter1, filter1, filter2) {
-     var iterator = getIteratorAtCursor(), watch = new core.LoopWatchDog(1E3), pendingStepsFilter2 = 0, stepsFilter2 = 0;
++    var iterator = getIteratorAtCursor(), watch = new core.LoopWatchDog(1E4), pendingStepsFilter2 = 0, stepsFilter2 = 0;
 +    while(stepsFilter1 > 0 && iterator.previousPosition()) {
 +      watch.check();
 +      if(filter2.acceptPosition(iterator) === FILTER_ACCEPT) {
 +        pendingStepsFilter2 += 1;
 +        if(filter1.acceptPosition(iterator) === FILTER_ACCEPT) {
 +          stepsFilter2 += pendingStepsFilter2;
 +          pendingStepsFilter2 = 0;
 +          stepsFilter1 -= 1
 +        }
 +      }
 +    }
 +    return stepsFilter2
 +  }
 +  function countStepsPublic(steps, filter) {
 +    var iterator = getIteratorAtCursor();
 +    return countSteps(iterator, steps, filter)
 +  }
 +  function countPositionsToClosestStep(container, offset, filter) {
 +    var iterator = getIteratorAtCursor(), paragraphNode = odfUtils.getParagraphElement(iterator.getCurrentNode()), count = 0;
 +    iterator.setUnfilteredPosition(container, offset);
 +    if(filter.acceptPosition(iterator) !== FILTER_ACCEPT) {
 +      count = countSteps(iterator, -1, filter);
 +      if(count === 0 || paragraphNode && paragraphNode !== odfUtils.getParagraphElement(iterator.getCurrentNode())) {
 +        iterator.setUnfilteredPosition(container, offset);
 +        count = countSteps(iterator, 1, filter)
 +      }
 +    }
 +    return count
 +  }
 +  function countLineSteps(filter, direction, iterator) {
-     var c = iterator.container(), steps = 0, bestContainer = null, bestOffset, bestXDiff = 10, xDiff, bestCount = 0, top, left, lastTop, rect, range = (rootNode.ownerDocument.createRange()), watch = new core.LoopWatchDog(1E3);
++    var c = iterator.container(), steps = 0, bestContainer = null, bestOffset, bestXDiff = 10, xDiff, bestCount = 0, top, left, lastTop, rect, range = (rootNode.ownerDocument.createRange()), watch = new core.LoopWatchDog(1E4);
 +    rect = getVisibleRect(c, iterator.unfilteredDomOffset(), range);
 +    top = rect.top;
 +    if(cachedXOffset === undefined) {
 +      left = rect.left
 +    }else {
 +      left = cachedXOffset
 +    }
 +    lastTop = top;
 +    while((direction < 0 ? iterator.previousPosition() : iterator.nextPosition()) === true) {
 +      watch.check();
 +      if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +        steps += 1;
 +        c = iterator.container();
 +        rect = getVisibleRect(c, iterator.unfilteredDomOffset(), range);
 +        if(rect.top !== top) {
 +          if(rect.top !== lastTop && lastTop !== top) {
 +            break
 +          }
 +          lastTop = rect.top;
 +          xDiff = Math.abs(left - rect.left);
 +          if(bestContainer === null || xDiff < bestXDiff) {
 +            bestContainer = c;
 +            bestOffset = iterator.unfilteredDomOffset();
 +            bestXDiff = xDiff;
 +            bestCount = steps
 +          }
 +        }
 +      }
 +    }
 +    if(bestContainer !== null) {
 +      iterator.setUnfilteredPosition(bestContainer, (bestOffset));
 +      steps = bestCount
 +    }else {
 +      steps = 0
 +    }
 +    range.detach();
 +    return steps
 +  }
 +  function countLinesSteps(lines, filter) {
 +    var iterator = getIteratorAtCursor(), stepCount = 0, steps = 0, direction = lines < 0 ? -1 : 1;
 +    lines = Math.abs(lines);
 +    while(lines > 0) {
 +      stepCount += countLineSteps(filter, direction, iterator);
 +      if(stepCount === 0) {
 +        break
 +      }
 +      steps += stepCount;
 +      lines -= 1
 +    }
 +    return steps * direction
 +  }
 +  function countStepsToLineBoundary(direction, filter) {
 +    var fnNextPos, increment, lastRect, rect, onSameLine, iterator = getIteratorAtCursor(), paragraphNode = odfUtils.getParagraphElement(iterator.getCurrentNode()), steps = 0, range = (rootNode.ownerDocument.createRange());
 +    if(direction < 0) {
 +      fnNextPos = iterator.previousPosition;
 +      increment = -1
 +    }else {
 +      fnNextPos = iterator.nextPosition;
 +      increment = 1
 +    }
 +    lastRect = getVisibleRect(iterator.container(), iterator.unfilteredDomOffset(), range);
 +    while(fnNextPos.call(iterator)) {
 +      if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +        if(odfUtils.getParagraphElement(iterator.getCurrentNode()) !== paragraphNode) {
 +          break
 +        }
 +        rect = getVisibleRect(iterator.container(), iterator.unfilteredDomOffset(), range);
 +        if(rect.bottom !== lastRect.bottom) {
 +          onSameLine = rect.top >= lastRect.top && rect.bottom < lastRect.bottom || rect.top <= lastRect.top && rect.bottom > lastRect.bottom;
 +          if(!onSameLine) {
 +            break
 +          }
 +        }
 +        steps += increment;
 +        lastRect = rect
 +      }
 +    }
 +    range.detach();
 +    return steps
 +  }
 +  function countStepsToPosition(targetNode, targetOffset, filter) {
 +    runtime.assert(targetNode !== null, "SelectionMover.countStepsToPosition called with element===null");
-     var iterator = getIteratorAtCursor(), c = iterator.container(), o = iterator.unfilteredDomOffset(), steps = 0, watch = new core.LoopWatchDog(1E3), comparison;
++    var iterator = getIteratorAtCursor(), c = iterator.container(), o = iterator.unfilteredDomOffset(), steps = 0, watch = new core.LoopWatchDog(1E4), comparison;
 +    iterator.setUnfilteredPosition(targetNode, targetOffset);
 +    while(filter.acceptPosition(iterator) !== FILTER_ACCEPT && iterator.previousPosition()) {
 +      watch.check()
 +    }
 +    targetNode = iterator.container();
 +    runtime.assert(Boolean(targetNode), "SelectionMover.countStepsToPosition: positionIterator.container() returned null");
 +    targetOffset = iterator.unfilteredDomOffset();
 +    iterator.setUnfilteredPosition(c, o);
 +    while(filter.acceptPosition(iterator) !== FILTER_ACCEPT && iterator.previousPosition()) {
 +      watch.check()
 +    }
 +    comparison = domUtils.comparePoints(targetNode, targetOffset, iterator.container(), iterator.unfilteredDomOffset());
 +    if(comparison < 0) {
 +      while(iterator.nextPosition()) {
 +        watch.check();
 +        if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +          steps += 1
 +        }
 +        if(iterator.container() === targetNode && iterator.unfilteredDomOffset() === targetOffset) {
 +          return steps
 +        }
 +      }
 +    }else {
 +      if(comparison > 0) {
 +        while(iterator.previousPosition()) {
 +          watch.check();
 +          if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
 +            steps -= 1;
 +            if(iterator.container() === targetNode && iterator.unfilteredDomOffset() === targetOffset) {
 +              break
 +            }
 +          }
 +        }
 +      }
 +    }
 +    return steps
 +  }
 +  this.getStepCounter = function() {
 +    return{countSteps:countStepsPublic, convertForwardStepsBetweenFilters:convertForwardStepsBetweenFilters, convertBackwardStepsBetweenFilters:convertBackwardStepsBetweenFilters, countLinesSteps:countLinesSteps, countStepsToLineBoundary:countStepsToLineBoundary, countStepsToPosition:countStepsToPosition, isPositionWalkable:isPositionWalkable, countPositionsToNearestStep:countPositionsToClosestStep}
 +  };
 +  function init() {
 +    odfUtils = new odf.OdfUtils;
 +    domUtils = new core.DomUtils;
 +    positionIterator = gui.SelectionMover.createPositionIterator(rootNode);
 +    var range = rootNode.ownerDocument.createRange();
 +    range.setStart(positionIterator.container(), positionIterator.unfilteredDomOffset());
 +    range.collapse(true);
 +    cursor.setSelectedRange(range)
 +  }
 +  init()
 +};
 +gui.SelectionMover.createPositionIterator = function(rootNode) {
 +  function CursorFilter() {
 +    this.acceptNode = function(node) {
 +      if(node.namespaceURI === "urn:webodf:names:cursor" || node.namespaceURI === "urn:webodf:names:editinfo") {
 +        return NodeFilter.FILTER_REJECT
 +      }
 +      return NodeFilter.FILTER_ACCEPT
 +    }
 +  }
 +  var filter = new CursorFilter;
 +  return new core.PositionIterator(rootNode, 5, filter, false)
 +};
 +(function() {
 +  return gui.SelectionMover
 +})();
 +/*
 +
++ Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
++
++ @licstart
++ The JavaScript code in this page is free software: you can redistribute it
++ and/or modify it under the terms of the GNU Affero General Public License
++ (GNU AGPL) as published by the Free Software Foundation, either version 3 of
++ the License, or (at your option) any later version.  The code is distributed
++ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
++
++ You should have received a copy of the GNU Affero General Public License
++ along with this code.  If not, see <http://www.gnu.org/licenses/>.
++
++ As additional permission under GNU AGPL version 3 section 7, you
++ may distribute non-source (e.g., minimized or compacted) forms of
++ that code without the copy of the GNU GPL normally required by
++ section 4, provided you include this license notice and a URL
++ through which recipients can access the Corresponding Source.
++
++ As a special exception to the AGPL, any HTML file which merely makes function
++ calls to this code, and for that purpose includes it by reference shall be
++ deemed a separate work for copyright law purposes. In addition, the copyright
++ holders of this code give you permission to combine this code with free
++ software libraries that are released under the GNU LGPL. You may copy and
++ distribute such a system following the terms of the GNU AGPL for this code
++ and the LGPL for the libraries. If you modify this code, you may extend this
++ exception to your version of the code, but you are not obligated to do so.
++ If you do not wish to do so, delete this exception statement from your
++ version.
++
++ This license applies to this entire compilation.
++ @licend
++ @source: http://www.webodf.org/
++ @source: https://github.com/kogmbh/WebODF/
++*/
++runtime.loadClass("core.DomUtils");
++runtime.loadClass("core.PositionFilter");
++runtime.loadClass("odf.OdfUtils");
++(function() {
++  var nextNodeId = 0;
++  function StepsCache(rootNode, filter, bucketSize) {
++    var coordinatens = "urn:webodf:names:steps", stepToDomPoint = {}, nodeToBookmark = {}, odfUtils = new odf.OdfUtils, domUtils = new core.DomUtils, basePoint, FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT;
++    function ParagraphBookmark(steps, paragraphNode) {
++      this.steps = steps;
++      this.node = paragraphNode;
++      function positionInContainer(node) {
++        var position = 0;
++        while(node && node.previousSibling) {
++          position += 1;
++          node = node.previousSibling
++        }
++        return position
++      }
++      this.setIteratorPosition = function(iterator) {
++        iterator.setUnfilteredPosition(paragraphNode.parentNode, positionInContainer(paragraphNode));
++        do {
++          if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
++            break
++          }
++        }while(iterator.nextPosition())
++      }
++    }
++    function RootBookmark(steps, rootNode) {
++      this.steps = steps;
++      this.node = rootNode;
++      this.setIteratorPosition = function(iterator) {
++        iterator.setUnfilteredPosition(rootNode, 0);
++        do {
++          if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
++            break
++          }
++        }while(iterator.nextPosition())
++      }
++    }
++    function getBucket(steps) {
++      return Math.floor(steps / bucketSize) * bucketSize
++    }
++    function getDestinationBucket(steps) {
++      return Math.ceil(steps / bucketSize) * bucketSize
++    }
++    function clearNodeId(node) {
++      node.removeAttributeNS(coordinatens, "nodeId")
++    }
++    function getNodeId(node) {
++      return node.nodeType === Node.ELEMENT_NODE && node.getAttributeNS(coordinatens, "nodeId")
++    }
++    function setNodeId(node) {
++      var nodeId = nextNodeId;
++      node.setAttributeNS(coordinatens, "nodeId", nodeId.toString());
++      nextNodeId += 1;
++      return nodeId
++    }
++    function isValidBookmarkForNode(node, bookmark) {
++      return bookmark.node === node
++    }
++    function getNodeBookmark(node, steps) {
++      var nodeId = getNodeId(node) || setNodeId(node), existingBookmark;
++      existingBookmark = nodeToBookmark[nodeId];
++      if(!existingBookmark) {
++        existingBookmark = nodeToBookmark[nodeId] = new ParagraphBookmark(steps, node)
++      }else {
++        if(!isValidBookmarkForNode(node, existingBookmark)) {
++          runtime.log("Cloned node detected. Creating new bookmark");
++          nodeId = setNodeId(node);
++          existingBookmark = nodeToBookmark[nodeId] = new ParagraphBookmark(steps, node)
++        }else {
++          existingBookmark.steps = steps
++        }
++      }
++      return existingBookmark
++    }
++    function isFirstPositionInParagraph(node, offset) {
++      return offset === 0 && odfUtils.isParagraph(node)
++    }
++    this.updateCache = function(steps, node, offset, isWalkable) {
++      var stablePoint, cacheBucket, existingCachePoint, bookmark;
++      if(isFirstPositionInParagraph(node, offset)) {
++        stablePoint = true;
++        if(!isWalkable) {
++          steps += 1
++        }
++      }else {
++        if(node.hasChildNodes() && node.childNodes[offset]) {
++          node = node.childNodes[offset];
++          offset = 0;
++          stablePoint = isFirstPositionInParagraph(node, offset);
++          if(stablePoint) {
++            steps += 1
++          }
++        }
++      }
++      if(stablePoint) {
++        bookmark = getNodeBookmark(node, steps);
++        cacheBucket = getDestinationBucket(bookmark.steps);
++        existingCachePoint = stepToDomPoint[cacheBucket];
++        if(!existingCachePoint || bookmark.steps > existingCachePoint.steps) {
++          stepToDomPoint[cacheBucket] = bookmark
++        }
++      }
++    };
++    this.setToClosestStep = function(steps, iterator) {
++      var cacheBucket = getBucket(steps), cachePoint;
++      while(!cachePoint && cacheBucket !== 0) {
++        cachePoint = stepToDomPoint[cacheBucket];
++        cacheBucket -= bucketSize
++      }
++      cachePoint = cachePoint || basePoint;
++      cachePoint.setIteratorPosition(iterator);
++      return cachePoint.steps
++    };
++    function findBookmarkedAncestor(node, offset) {
++      var nodeId, bookmark = null;
++      node = node.childNodes[offset] || node;
++      while(!bookmark && (node && node !== rootNode)) {
++        nodeId = getNodeId(node);
++        if(nodeId) {
++          bookmark = nodeToBookmark[nodeId];
++          if(bookmark && !isValidBookmarkForNode(node, bookmark)) {
++            runtime.log("Cloned node detected. Creating new bookmark");
++            bookmark = null;
++            clearNodeId(node)
++          }
++        }
++        node = node.parentNode
++      }
++      return bookmark
++    }
++    this.setToClosestDomPoint = function(node, offset, iterator) {
++      var bookmark;
++      if(node === rootNode && offset === 0) {
++        bookmark = basePoint
++      }else {
++        if(node === rootNode && offset === rootNode.childNodes.length) {
++          bookmark = Object.keys(stepToDomPoint).map(function(cacheBucket) {
++            return stepToDomPoint[cacheBucket]
++          }).reduce(function(largestBookmark, bookmark) {
++            return bookmark.steps > largestBookmark.steps ? bookmark : largestBookmark
++          }, basePoint)
++        }else {
++          bookmark = findBookmarkedAncestor(node, offset);
++          if(!bookmark) {
++            iterator.setUnfilteredPosition(node, offset);
++            while(!bookmark && iterator.previousNode()) {
++              bookmark = findBookmarkedAncestor(iterator.container(), iterator.unfilteredDomOffset())
++            }
++          }
++        }
++      }
++      bookmark = bookmark || basePoint;
++      bookmark.setIteratorPosition(iterator);
++      return bookmark.steps
++    };
++    this.updateCacheAtPoint = function(inflectionStep, doUpdate) {
++      var affectedBookmarks, updatedBuckets = {};
++      affectedBookmarks = Object.keys(nodeToBookmark).map(function(nodeId) {
++        return nodeToBookmark[nodeId]
++      }).filter(function(bookmark) {
++        return bookmark.steps > inflectionStep
++      });
++      affectedBookmarks.forEach(function(bookmark) {
++        var originalCacheBucket = getDestinationBucket(bookmark.steps), newCacheBucket, existingBookmark;
++        if(domUtils.containsNode(rootNode, bookmark.node)) {
++          doUpdate(bookmark);
++          newCacheBucket = getDestinationBucket(bookmark.steps);
++          existingBookmark = updatedBuckets[newCacheBucket];
++          if(!existingBookmark || bookmark.steps > existingBookmark.steps) {
++            updatedBuckets[newCacheBucket] = bookmark
++          }
++        }else {
++          delete nodeToBookmark[getNodeId(bookmark.node)]
++        }
++        if(stepToDomPoint[originalCacheBucket] === bookmark) {
++          delete stepToDomPoint[originalCacheBucket]
++        }
++      });
++      Object.keys(updatedBuckets).forEach(function(cacheBucket) {
++        stepToDomPoint[cacheBucket] = updatedBuckets[cacheBucket]
++      })
++    };
++    function init() {
++      basePoint = new RootBookmark(0, rootNode)
++    }
++    init()
++  }
++  ops.StepsTranslator = function StepsTranslator(getRootNode, newIterator, filter, bucketSize) {
++    var rootNode = getRootNode(), stepsCache = new StepsCache(rootNode, filter, bucketSize), domUtils = new core.DomUtils, iterator = newIterator(getRootNode()), FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT;
++    function verifyRootNode() {
++      var currentRootNode = getRootNode();
++      if(currentRootNode !== rootNode) {
++        runtime.log("Undo detected. Resetting steps cache");
++        rootNode = currentRootNode;
++        stepsCache = new StepsCache(rootNode, filter, bucketSize);
++        iterator = newIterator(rootNode)
++      }
++    }
++    this.convertStepsToDomPoint = function(steps) {
++      var stepsFromRoot, isWalkable;
++      if(steps < 0) {
++        runtime.log("warn", "Requested steps were negative (" + steps + ")");
++        steps = 0
++      }
++      verifyRootNode();
++      stepsFromRoot = stepsCache.setToClosestStep(steps, iterator);
++      while(stepsFromRoot < steps && iterator.nextPosition()) {
++        isWalkable = filter.acceptPosition(iterator) === FILTER_ACCEPT;
++        if(isWalkable) {
++          stepsFromRoot += 1
++        }
++        stepsCache.updateCache(stepsFromRoot, iterator.container(), iterator.unfilteredDomOffset(), isWalkable)
++      }
++      if(stepsFromRoot !== steps) {
++        runtime.log("warn", "Requested " + steps + " steps but only " + stepsFromRoot + " are available")
++      }
++      return{node:iterator.container(), offset:iterator.unfilteredDomOffset()}
++    };
++    this.convertDomPointToSteps = function(node, offset, roundUp) {
++      var stepsFromRoot, beforeRoot, destinationNode, destinationOffset, rounding = 0, isWalkable;
++      verifyRootNode();
++      if(!domUtils.containsNode(rootNode, node)) {
++        beforeRoot = domUtils.comparePoints(rootNode, 0, node, offset) < 0;
++        node = rootNode;
++        offset = beforeRoot ? 0 : rootNode.childNodes.length
++      }
++      iterator.setUnfilteredPosition(node, offset);
++      destinationNode = iterator.container();
++      destinationOffset = iterator.unfilteredDomOffset();
++      if(roundUp && filter.acceptPosition(iterator) !== FILTER_ACCEPT) {
++        rounding = 1
++      }
++      stepsFromRoot = stepsCache.setToClosestDomPoint(node, offset, iterator);
++      if(domUtils.comparePoints(iterator.container(), iterator.unfilteredDomOffset(), destinationNode, destinationOffset) < 0) {
++        return stepsFromRoot > 0 && !roundUp ? stepsFromRoot - 1 : stepsFromRoot
++      }
++      while(!(iterator.container() === destinationNode && iterator.unfilteredDomOffset() === destinationOffset) && iterator.nextPosition()) {
++        isWalkable = filter.acceptPosition(iterator) === FILTER_ACCEPT;
++        if(isWalkable) {
++          stepsFromRoot += 1
++        }
++        stepsCache.updateCache(stepsFromRoot, iterator.container(), iterator.unfilteredDomOffset(), isWalkable)
++      }
++      return stepsFromRoot + rounding
++    };
++    this.prime = function() {
++      var stepsFromRoot, isWalkable;
++      verifyRootNode();
++      stepsFromRoot = stepsCache.setToClosestStep(0, iterator);
++      while(iterator.nextPosition()) {
++        isWalkable = filter.acceptPosition(iterator) === FILTER_ACCEPT;
++        if(isWalkable) {
++          stepsFromRoot += 1
++        }
++        stepsCache.updateCache(stepsFromRoot, iterator.container(), iterator.unfilteredDomOffset(), isWalkable)
++      }
++    };
++    this.handleStepsInserted = function(eventArgs) {
++      verifyRootNode();
++      stepsCache.updateCacheAtPoint(eventArgs.position, function(bucket) {
++        bucket.steps += eventArgs.length
++      })
++    };
++    this.handleStepsRemoved = function(eventArgs) {
++      verifyRootNode();
++      stepsCache.updateCacheAtPoint(eventArgs.position, function(bucket) {
++        bucket.steps -= eventArgs.length;
++        if(bucket.steps < 0) {
++          bucket.steps = 0
++        }
++      })
++    }
++  };
++  return ops.StepsTranslator
++})();
++/*
++
++ Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
++
++ @licstart
++ The JavaScript code in this page is free software: you can redistribute it
++ and/or modify it under the terms of the GNU Affero General Public License
++ (GNU AGPL) as published by the Free Software Foundation, either version 3 of
++ the License, or (at your option) any later version.  The code is distributed
++ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
++
++ You should have received a copy of the GNU Affero General Public License
++ along with this code.  If not, see <http://www.gnu.org/licenses/>.
++
++ As additional permission under GNU AGPL version 3 section 7, you
++ may distribute non-source (e.g., minimized or compacted) forms of
++ that code without the copy of the GNU GPL normally required by
++ section 4, provided you include this license notice and a URL
++ through which recipients can access the Corresponding Source.
++
++ As a special exception to the AGPL, any HTML file which merely makes function
++ calls to this code, and for that purpose includes it by reference shall be
++ deemed a separate work for copyright law purposes. In addition, the copyright
++ holders of this code give you permission to combine this code with free
++ software libraries that are released under the GNU LGPL. You may copy and
++ distribute such a system following the terms of the GNU AGPL for this code
++ and the LGPL for the libraries. If you modify this code, you may extend this
++ exception to your version of the code, but you are not obligated to do so.
++ If you do not wish to do so, delete this exception statement from your
++ version.
++
++ This license applies to this entire compilation.
++ @licend
++ @source: http://www.webodf.org/
++ @source: https://github.com/kogmbh/WebODF/
++*/
++runtime.loadClass("core.PositionFilter");
++runtime.loadClass("odf.OdfUtils");
++ops.TextPositionFilter = function TextPositionFilter(getRootNode) {
++  var odfUtils = new odf.OdfUtils, FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT, FILTER_REJECT = core.PositionFilter.FilterResult.FILTER_REJECT;
++  function checkLeftRight(container, leftNode, rightNode) {
++    var r, firstPos, rightOfChar;
++    if(leftNode) {
++      r = odfUtils.lookLeftForCharacter(leftNode);
++      if(r === 1) {
++        return FILTER_ACCEPT
++      }
++      if(r === 2 && (odfUtils.scanRightForAnyCharacter(rightNode) || odfUtils.scanRightForAnyCharacter(odfUtils.nextNode(container)))) {
++        return FILTER_ACCEPT
++      }
++    }
++    firstPos = leftNode === null && odfUtils.isParagraph(container);
++    rightOfChar = odfUtils.lookRightForCharacter(rightNode);
++    if(firstPos) {
++      if(rightOfChar) {
++        return FILTER_ACCEPT
++      }
++      return odfUtils.scanRightForAnyCharacter(rightNode) ? FILTER_REJECT : FILTER_ACCEPT
++    }
++    if(!rightOfChar) {
++      return FILTER_REJECT
++    }
++    leftNode = leftNode || odfUtils.previousNode(container);
++    return odfUtils.scanLeftForAnyCharacter(leftNode) ? FILTER_REJECT : FILTER_ACCEPT
++  }
++  this.acceptPosition = function(iterator) {
++    var container = iterator.container(), nodeType = container.nodeType, offset, text, leftChar, rightChar, leftNode, rightNode, r;
++    if(nodeType !== Node.ELEMENT_NODE && nodeType !== Node.TEXT_NODE) {
++      return FILTER_REJECT
++    }
++    if(nodeType === Node.TEXT_NODE) {
++      if(!odfUtils.isGroupingElement(container.parentNode) || odfUtils.isWithinTrackedChanges(container.parentNode, getRootNode())) {
++        return FILTER_REJECT
++      }
++      offset = iterator.unfilteredDomOffset();
++      text = container.data;
++      runtime.assert(offset !== text.length, "Unexpected offset.");
++      if(offset > 0) {
++        leftChar = text.substr(offset - 1, 1);
++        if(!odfUtils.isODFWhitespace(leftChar)) {
++          return FILTER_ACCEPT
++        }
++        if(offset > 1) {
++          leftChar = text.substr(offset - 2, 1);
++          if(!odfUtils.isODFWhitespace(leftChar)) {
++            r = FILTER_ACCEPT
++          }else {
++            if(!odfUtils.isODFWhitespace(text.substr(0, offset))) {
++              return FILTER_REJECT
++            }
++          }
++        }else {
++          leftNode = odfUtils.previousNode(container);
++          if(odfUtils.scanLeftForNonWhitespace(leftNode)) {
++            r = FILTER_ACCEPT
++          }
++        }
++        if(r === FILTER_ACCEPT) {
++          return odfUtils.isTrailingWhitespace(container, offset) ? FILTER_REJECT : FILTER_ACCEPT
++        }
++        rightChar = text.substr(offset, 1);
++        if(odfUtils.isODFWhitespace(rightChar)) {
++          return FILTER_REJECT
++        }
++        return odfUtils.scanLeftForAnyCharacter(odfUtils.previousNode(container)) ? FILTER_REJECT : FILTER_ACCEPT
++      }
++      leftNode = iterator.leftNode();
++      rightNode = container;
++      container = (container.parentNode);
++      r = checkLeftRight(container, leftNode, rightNode)
++    }else {
++      if(!odfUtils.isGroupingElement(container) || odfUtils.isWithinTrackedChanges(container, getRootNode())) {
++        r = FILTER_REJECT
++      }else {
++        leftNode = iterator.leftNode();
++        rightNode = iterator.rightNode();
++        r = checkLeftRight(container, leftNode, rightNode)
++      }
++    }
++    return r
++  }
++};
++/*
++
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + This file is part of WebODF.
 +
 + WebODF is free software: you can redistribute it and/or modify it
 + under the terms of the GNU Affero General Public License (GNU AGPL)
 + as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.
 +
 + WebODF is distributed in the hope that it will be useful, but
 + WITHOUT ANY WARRANTY; without even the implied warranty of
 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + GNU Affero General Public License for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with WebODF.  If not, see <http://www.gnu.org/licenses/>.
 + @licend
 +
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OperationTransformMatrix = function OperationTransformMatrix() {
-   function passUnchanged(opSpecA, opSpecB) {
-     return{opSpecsA:[opSpecA], opSpecsB:[opSpecB]}
++  function invertMoveCursorSpecRange(moveCursorSpec) {
++    moveCursorSpec.position = moveCursorSpec.position + moveCursorSpec.length;
++    moveCursorSpec.length *= -1
++  }
++  function invertMoveCursorSpecRangeOnNegativeLength(moveCursorSpec) {
++    var isBackwards = moveCursorSpec.length < 0;
++    if(isBackwards) {
++      invertMoveCursorSpecRange(moveCursorSpec)
++    }
++    return isBackwards
 +  }
 +  function getStyleReferencingAttributes(setProperties, styleName) {
 +    var attributes = [];
 +    if(setProperties) {
 +      ["style:parent-style-name", "style:next-style-name"].forEach(function(attributeName) {
 +        if(setProperties[attributeName] === styleName) {
 +          attributes.push(attributeName)
 +        }
 +      })
 +    }
 +    return attributes
 +  }
 +  function dropStyleReferencingAttributes(setProperties, deletedStyleName) {
 +    if(setProperties) {
 +      ["style:parent-style-name", "style:next-style-name"].forEach(function(attributeName) {
 +        if(setProperties[attributeName] === deletedStyleName) {
 +          delete setProperties[attributeName]
 +        }
 +      })
 +    }
 +  }
-   function transformAddStyleRemoveStyle(addStyleSpec, removeStyleSpec) {
-     var setAttributes, helperOpspec, addStyleSpecResult = [addStyleSpec], removeStyleSpecResult = [removeStyleSpec];
-     if(addStyleSpec.styleFamily === removeStyleSpec.styleFamily) {
-       setAttributes = getStyleReferencingAttributes(addStyleSpec.setProperties, removeStyleSpec.styleName);
-       if(setAttributes.length > 0) {
-         helperOpspec = {optype:"UpdateParagraphStyle", memberid:removeStyleSpec.memberid, timestamp:removeStyleSpec.timestamp, styleName:addStyleSpec.styleName, removedProperties:{attributes:setAttributes.join(",")}};
-         removeStyleSpecResult.unshift(helperOpspec)
++  function cloneOpspec(opspec) {
++    var result = {};
++    Object.keys(opspec).forEach(function(key) {
++      if(typeof opspec[key] === "object") {
++        result[key] = cloneOpspec(opspec[key])
++      }else {
++        result[key] = opspec[key]
 +      }
-       dropStyleReferencingAttributes(addStyleSpec.setProperties, removeStyleSpec.styleName)
-     }
-     return{opSpecsA:addStyleSpecResult, opSpecsB:removeStyleSpecResult}
++    });
++    return result
 +  }
-   function transformInsertTextInsertText(insertTextSpecA, insertTextSpecB, hasAPriority) {
-     if(insertTextSpecA.position < insertTextSpecB.position) {
-       insertTextSpecB.position += insertTextSpecA.text.length
-     }else {
-       if(insertTextSpecA.position > insertTextSpecB.position) {
-         insertTextSpecA.position += insertTextSpecB.text.length
-       }else {
-         if(hasAPriority) {
++  function dropShadowedAttributes(minorSetProperties, minorRemovedProperties, majorSetProperties, majorRemovedProperties) {
++    var value, i, name, majorChanged = false, minorChanged = false, shadowingPropertyValue, removedPropertyNames, majorRemovedPropertyNames = majorRemovedProperties && majorRemovedProperties.attributes ? majorRemovedProperties.attributes.split(",") : [];
++    if(minorSetProperties && (majorSetProperties || majorRemovedPropertyNames.length > 0)) {
++      Object.keys(minorSetProperties).forEach(function(key) {
++        value = minorSetProperties[key];
++        if(typeof value !== "object") {
++          shadowingPropertyValue = majorSetProperties && majorSetProperties[key];
++          if(shadowingPropertyValue !== undefined) {
++            delete minorSetProperties[key];
++            minorChanged = true;
++            if(shadowingPropertyValue === value) {
++              delete majorSetProperties[key];
++              majorChanged = true
++            }
++          }else {
++            if(majorRemovedPropertyNames && majorRemovedPropertyNames.indexOf(key) !== -1) {
++              delete minorSetProperties[key];
++              minorChanged = true
++            }
++          }
++        }
++      })
++    }
++    if(minorRemovedProperties && (minorRemovedProperties.attributes && (majorSetProperties || majorRemovedPropertyNames.length > 0))) {
++      removedPropertyNames = minorRemovedProperties.attributes.split(",");
++      for(i = 0;i < removedPropertyNames.length;i += 1) {
++        name = removedPropertyNames[i];
++        if(majorSetProperties && majorSetProperties[name] !== undefined || majorRemovedPropertyNames && majorRemovedPropertyNames.indexOf(name) !== -1) {
++          removedPropertyNames.splice(i, 1);
++          i -= 1;
++          minorChanged = true
++        }
++      }
++      if(removedPropertyNames.length > 0) {
++        minorRemovedProperties.attributes = removedPropertyNames.join(",")
++      }else {
++        delete minorRemovedProperties.attributes
++      }
++    }
++    return{majorChanged:majorChanged, minorChanged:minorChanged}
++  }
++  function hasProperties(properties) {
++    var key;
++    for(key in properties) {
++      if(properties.hasOwnProperty(key)) {
++        return true
++      }
++    }
++    return false
++  }
++  function hasRemovedProperties(properties) {
++    var key;
++    for(key in properties) {
++      if(properties.hasOwnProperty(key)) {
++        if(key !== "attributes" || properties.attributes.length > 0) {
++          return true
++        }
++      }
++    }
++    return false
++  }
++  function dropShadowedProperties(minorOpspec, majorOpspec, propertiesName) {
++    var minorSP = minorOpspec.setProperties ? minorOpspec.setProperties[propertiesName] : null, minorRP = minorOpspec.removedProperties ? minorOpspec.removedProperties[propertiesName] : null, majorSP = majorOpspec.setProperties ? majorOpspec.setProperties[propertiesName] : null, majorRP = majorOpspec.removedProperties ? majorOpspec.removedProperties[propertiesName] : null, result;
++    result = dropShadowedAttributes(minorSP, minorRP, majorSP, majorRP);
++    if(minorSP && !hasProperties(minorSP)) {
++      delete minorOpspec.setProperties[propertiesName]
++    }
++    if(minorRP && !hasRemovedProperties(minorRP)) {
++      delete minorOpspec.removedProperties[propertiesName]
++    }
++    if(majorSP && !hasProperties(majorSP)) {
++      delete majorOpspec.setProperties[propertiesName]
++    }
++    if(majorRP && !hasRemovedProperties(majorRP)) {
++      delete majorOpspec.removedProperties[propertiesName]
++    }
++    return result
++  }
++  function transformAddStyleRemoveStyle(addStyleSpec, removeStyleSpec) {
++    var setAttributes, helperOpspec, addStyleSpecResult = [addStyleSpec], removeStyleSpecResult = [removeStyleSpec];
++    if(addStyleSpec.styleFamily === removeStyleSpec.styleFamily) {
++      setAttributes = getStyleReferencingAttributes(addStyleSpec.setProperties, removeStyleSpec.styleName);
++      if(setAttributes.length > 0) {
++        helperOpspec = {optype:"UpdateParagraphStyle", memberid:removeStyleSpec.memberid, timestamp:removeStyleSpec.timestamp, styleName:addStyleSpec.styleName, removedProperties:{attributes:setAttributes.join(",")}};
++        removeStyleSpecResult.unshift(helperOpspec)
++      }
++      dropStyleReferencingAttributes(addStyleSpec.setProperties, removeStyleSpec.styleName)
++    }
++    return{opSpecsA:addStyleSpecResult, opSpecsB:removeStyleSpecResult}
++  }
++  function transformApplyDirectStylingApplyDirectStyling(applyDirectStylingSpecA, applyDirectStylingSpecB, hasAPriority) {
++    var majorSpec, minorSpec, majorSpecResult, minorSpecResult, majorSpecEnd, minorSpecEnd, dropResult, originalMajorSpec, originalMinorSpec, helperOpspecBefore, helperOpspecAfter, applyDirectStylingSpecAResult = [applyDirectStylingSpecA], applyDirectStylingSpecBResult = [applyDirectStylingSpecB];
++    if(!(applyDirectStylingSpecA.position + applyDirectStylingSpecA.length <= applyDirectStylingSpecB.position || applyDirectStylingSpecA.position >= applyDirectStylingSpecB.position + applyDirectStylingSpecB.length)) {
++      majorSpec = hasAPriority ? applyDirectStylingSpecA : applyDirectStylingSpecB;
++      minorSpec = hasAPriority ? applyDirectStylingSpecB : applyDirectStylingSpecA;
++      if(applyDirectStylingSpecA.position !== applyDirectStylingSpecB.position || applyDirectStylingSpecA.length !== applyDirectStylingSpecB.length) {
++        originalMajorSpec = cloneOpspec(majorSpec);
++        originalMinorSpec = cloneOpspec(minorSpec)
++      }
++      dropResult = dropShadowedProperties(minorSpec, majorSpec, "style:text-properties");
++      if(dropResult.majorChanged || dropResult.minorChanged) {
++        majorSpecResult = [];
++        minorSpecResult = [];
++        majorSpecEnd = majorSpec.position + majorSpec.length;
++        minorSpecEnd = minorSpec.position + minorSpec.length;
++        if(minorSpec.position < majorSpec.position) {
++          if(dropResult.minorChanged) {
++            helperOpspecBefore = cloneOpspec((originalMinorSpec));
++            helperOpspecBefore.length = majorSpec.position - minorSpec.position;
++            minorSpecResult.push(helperOpspecBefore);
++            minorSpec.position = majorSpec.position;
++            minorSpec.length = minorSpecEnd - minorSpec.position
++          }
++        }else {
++          if(majorSpec.position < minorSpec.position) {
++            if(dropResult.majorChanged) {
++              helperOpspecBefore = cloneOpspec((originalMajorSpec));
++              helperOpspecBefore.length = minorSpec.position - majorSpec.position;
++              majorSpecResult.push(helperOpspecBefore);
++              majorSpec.position = minorSpec.position;
++              majorSpec.length = majorSpecEnd - majorSpec.position
++            }
++          }
++        }
++        if(minorSpecEnd > majorSpecEnd) {
++          if(dropResult.minorChanged) {
++            helperOpspecAfter = originalMinorSpec;
++            helperOpspecAfter.position = majorSpecEnd;
++            helperOpspecAfter.length = minorSpecEnd - majorSpecEnd;
++            minorSpecResult.push(helperOpspecAfter);
++            minorSpec.length = majorSpecEnd - minorSpec.position
++          }
++        }else {
++          if(majorSpecEnd > minorSpecEnd) {
++            if(dropResult.majorChanged) {
++              helperOpspecAfter = originalMajorSpec;
++              helperOpspecAfter.position = minorSpecEnd;
++              helperOpspecAfter.length = majorSpecEnd - minorSpecEnd;
++              majorSpecResult.push(helperOpspecAfter);
++              majorSpec.length = minorSpecEnd - majorSpec.position
++            }
++          }
++        }
++        if(majorSpec.setProperties && hasProperties(majorSpec.setProperties)) {
++          majorSpecResult.push(majorSpec)
++        }
++        if(minorSpec.setProperties && hasProperties(minorSpec.setProperties)) {
++          minorSpecResult.push(minorSpec)
++        }
++        if(hasAPriority) {
++          applyDirectStylingSpecAResult = majorSpecResult;
++          applyDirectStylingSpecBResult = minorSpecResult
++        }else {
++          applyDirectStylingSpecAResult = minorSpecResult;
++          applyDirectStylingSpecBResult = majorSpecResult
++        }
++      }
++    }
++    return{opSpecsA:applyDirectStylingSpecAResult, opSpecsB:applyDirectStylingSpecBResult}
++  }
++  function transformApplyDirectStylingInsertText(applyDirectStylingSpec, insertTextSpec) {
++    if(insertTextSpec.position <= applyDirectStylingSpec.position) {
++      applyDirectStylingSpec.position += insertTextSpec.text.length
++    }else {
++      if(insertTextSpec.position <= applyDirectStylingSpec.position + applyDirectStylingSpec.length) {
++        applyDirectStylingSpec.length += insertTextSpec.text.length
++      }
++    }
++    return{opSpecsA:[applyDirectStylingSpec], opSpecsB:[insertTextSpec]}
++  }
++  function transformApplyDirectStylingRemoveText(applyDirectStylingSpec, removeTextSpec) {
++    var applyDirectStylingSpecEnd = applyDirectStylingSpec.position + applyDirectStylingSpec.length, removeTextSpecEnd = removeTextSpec.position + removeTextSpec.length, applyDirectStylingSpecResult = [applyDirectStylingSpec], removeTextSpecResult = [removeTextSpec];
++    if(removeTextSpecEnd <= applyDirectStylingSpec.position) {
++      applyDirectStylingSpec.position -= removeTextSpec.length
++    }else {
++      if(removeTextSpec.position < applyDirectStylingSpecEnd) {
++        if(applyDirectStylingSpec.position < removeTextSpec.position) {
++          if(removeTextSpecEnd < applyDirectStylingSpecEnd) {
++            applyDirectStylingSpec.length -= removeTextSpec.length
++          }else {
++            applyDirectStylingSpec.length = removeTextSpec.position - applyDirectStylingSpec.position
++          }
++        }else {
++          applyDirectStylingSpec.position = removeTextSpec.position;
++          if(removeTextSpecEnd < applyDirectStylingSpecEnd) {
++            applyDirectStylingSpec.length = applyDirectStylingSpecEnd - removeTextSpecEnd
++          }else {
++            applyDirectStylingSpecResult = []
++          }
++        }
++      }
++    }
++    return{opSpecsA:applyDirectStylingSpecResult, opSpecsB:removeTextSpecResult}
++  }
++  function transformApplyDirectStylingSplitParagraph(applyDirectStylingSpec, splitParagraphSpec) {
++    if(splitParagraphSpec.position < applyDirectStylingSpec.position) {
++      applyDirectStylingSpec.position += 1
++    }else {
++      if(splitParagraphSpec.position < applyDirectStylingSpec.position + applyDirectStylingSpec.length) {
++        applyDirectStylingSpec.length += 1
++      }
++    }
++    return{opSpecsA:[applyDirectStylingSpec], opSpecsB:[splitParagraphSpec]}
++  }
++  function transformInsertTextInsertText(insertTextSpecA, insertTextSpecB, hasAPriority) {
++    if(insertTextSpecA.position < insertTextSpecB.position) {
++      insertTextSpecB.position += insertTextSpecA.text.length
++    }else {
++      if(insertTextSpecA.position > insertTextSpecB.position) {
++        insertTextSpecA.position += insertTextSpecB.text.length
++      }else {
++        if(hasAPriority) {
 +          insertTextSpecB.position += insertTextSpecA.text.length
 +        }else {
 +          insertTextSpecA.position += insertTextSpecB.text.length
 +        }
 +        return null
 +      }
 +    }
 +    return{opSpecsA:[insertTextSpecA], opSpecsB:[insertTextSpecB]}
 +  }
 +  function transformInsertTextMoveCursor(insertTextSpec, moveCursorSpec) {
++    var isMoveCursorSpecRangeInverted = invertMoveCursorSpecRangeOnNegativeLength(moveCursorSpec);
 +    if(insertTextSpec.position < moveCursorSpec.position) {
 +      moveCursorSpec.position += insertTextSpec.text.length
 +    }else {
-       if(insertTextSpec.position <= moveCursorSpec.position + moveCursorSpec.length) {
++      if(insertTextSpec.position < moveCursorSpec.position + moveCursorSpec.length) {
 +        moveCursorSpec.length += insertTextSpec.text.length
 +      }
 +    }
++    if(isMoveCursorSpecRangeInverted) {
++      invertMoveCursorSpecRange(moveCursorSpec)
++    }
 +    return{opSpecsA:[insertTextSpec], opSpecsB:[moveCursorSpec]}
 +  }
 +  function transformInsertTextRemoveText(insertTextSpec, removeTextSpec) {
 +    var helperOpspec, removeTextSpecEnd = removeTextSpec.position + removeTextSpec.length, insertTextSpecResult = [insertTextSpec], removeTextSpecResult = [removeTextSpec];
 +    if(removeTextSpecEnd <= insertTextSpec.position) {
 +      insertTextSpec.position -= removeTextSpec.length
 +    }else {
 +      if(insertTextSpec.position <= removeTextSpec.position) {
 +        removeTextSpec.position += insertTextSpec.text.length
 +      }else {
 +        removeTextSpec.length = insertTextSpec.position - removeTextSpec.position;
 +        helperOpspec = {optype:"RemoveText", memberid:removeTextSpec.memberid, timestamp:removeTextSpec.timestamp, position:insertTextSpec.position + insertTextSpec.text.length, length:removeTextSpecEnd - insertTextSpec.position};
 +        removeTextSpecResult.unshift(helperOpspec);
 +        insertTextSpec.position = removeTextSpec.position
 +      }
 +    }
 +    return{opSpecsA:insertTextSpecResult, opSpecsB:removeTextSpecResult}
 +  }
 +  function transformInsertTextSplitParagraph(insertTextSpec, splitParagraphSpec, hasAPriority) {
 +    if(insertTextSpec.position < splitParagraphSpec.position) {
 +      splitParagraphSpec.position += insertTextSpec.text.length
 +    }else {
 +      if(insertTextSpec.position > splitParagraphSpec.position) {
 +        insertTextSpec.position += 1
 +      }else {
 +        if(hasAPriority) {
 +          splitParagraphSpec.position += insertTextSpec.text.length
 +        }else {
 +          insertTextSpec.position += 1
 +        }
 +        return null
 +      }
 +    }
 +    return{opSpecsA:[insertTextSpec], opSpecsB:[splitParagraphSpec]}
 +  }
-   function dropShadowedAttributes(properties, removedProperties, shadowingProperties, shadowingRemovedProperties) {
-     var value, i, name, removedPropertyNames, shadowingRemovedPropertyNames = shadowingRemovedProperties && shadowingRemovedProperties.attributes ? shadowingRemovedProperties.attributes.split(",") : [];
-     if(properties && (shadowingProperties || shadowingRemovedPropertyNames.length > 0)) {
-       Object.keys(properties).forEach(function(key) {
-         value = properties[key];
-         if(shadowingProperties && shadowingProperties[key] !== undefined || shadowingRemovedPropertyNames && shadowingRemovedPropertyNames.indexOf(key) !== -1) {
-           if(typeof value !== "object") {
-             delete properties[key]
-           }
-         }
-       })
-     }
-     if(removedProperties && (removedProperties.attributes && (shadowingProperties || shadowingRemovedPropertyNames.length > 0))) {
-       removedPropertyNames = removedProperties.attributes.split(",");
-       for(i = 0;i < removedPropertyNames.length;i += 1) {
-         name = removedPropertyNames[i];
-         if(shadowingProperties && shadowingProperties[name] !== undefined || shadowingRemovedPropertyNames && shadowingRemovedPropertyNames.indexOf(name) !== -1) {
-           removedPropertyNames.splice(i, 1);
-           i -= 1
-         }
-       }
-       if(removedPropertyNames.length > 0) {
-         removedProperties.attributes = removedPropertyNames.join(",")
-       }else {
-         delete removedProperties.attributes
-       }
-     }
-   }
-   function hasProperties(properties) {
-     var key;
-     for(key in properties) {
-       if(properties.hasOwnProperty(key)) {
-         return true
-       }
-     }
-     return false
-   }
-   function hasRemovedProperties(properties) {
-     var key;
-     for(key in properties) {
-       if(properties.hasOwnProperty(key)) {
-         if(key !== "attributes" || properties.attributes.length > 0) {
-           return true
-         }
-       }
-     }
-     return false
-   }
-   function dropShadowedProperties(targetOpspec, shadowingOpspec, propertiesName) {
-     var sp = targetOpspec.setProperties ? targetOpspec.setProperties[propertiesName] : null, rp = targetOpspec.removedProperties ? targetOpspec.removedProperties[propertiesName] : null;
-     dropShadowedAttributes(sp, rp, shadowingOpspec.setProperties ? shadowingOpspec.setProperties[propertiesName] : null, shadowingOpspec.removedProperties ? shadowingOpspec.removedProperties[propertiesName] : null);
-     if(sp && !hasProperties(sp)) {
-       delete targetOpspec.setProperties[propertiesName]
-     }
-     if(rp && !hasRemovedProperties(rp)) {
-       delete targetOpspec.removedProperties[propertiesName]
-     }
-   }
 +  function transformUpdateParagraphStyleUpdateParagraphStyle(updateParagraphStyleSpecA, updateParagraphStyleSpecB, hasAPriority) {
 +    var majorSpec, minorSpec, updateParagraphStyleSpecAResult = [updateParagraphStyleSpecA], updateParagraphStyleSpecBResult = [updateParagraphStyleSpecB];
 +    if(updateParagraphStyleSpecA.styleName === updateParagraphStyleSpecB.styleName) {
 +      majorSpec = hasAPriority ? updateParagraphStyleSpecA : updateParagraphStyleSpecB;
 +      minorSpec = hasAPriority ? updateParagraphStyleSpecB : updateParagraphStyleSpecA;
 +      dropShadowedProperties(minorSpec, majorSpec, "style:paragraph-properties");
 +      dropShadowedProperties(minorSpec, majorSpec, "style:text-properties");
 +      dropShadowedAttributes(minorSpec.setProperties || null, minorSpec.removedProperties || null, majorSpec.setProperties || null, majorSpec.removedProperties || null);
++      if(!(majorSpec.setProperties && hasProperties(majorSpec.setProperties)) && !(majorSpec.removedProperties && hasRemovedProperties(majorSpec.removedProperties))) {
++        if(hasAPriority) {
++          updateParagraphStyleSpecAResult = []
++        }else {
++          updateParagraphStyleSpecBResult = []
++        }
++      }
 +      if(!(minorSpec.setProperties && hasProperties(minorSpec.setProperties)) && !(minorSpec.removedProperties && hasRemovedProperties(minorSpec.removedProperties))) {
 +        if(hasAPriority) {
 +          updateParagraphStyleSpecBResult = []
 +        }else {
 +          updateParagraphStyleSpecAResult = []
 +        }
 +      }
 +    }
 +    return{opSpecsA:updateParagraphStyleSpecAResult, opSpecsB:updateParagraphStyleSpecBResult}
 +  }
 +  function transformSplitParagraphSplitParagraph(splitParagraphSpecA, splitParagraphSpecB, hasAPriority) {
 +    if(splitParagraphSpecA.position < splitParagraphSpecB.position) {
 +      splitParagraphSpecB.position += 1
 +    }else {
 +      if(splitParagraphSpecA.position > splitParagraphSpecB.position) {
 +        splitParagraphSpecA.position += 1
 +      }else {
 +        if(splitParagraphSpecA.position === splitParagraphSpecB.position) {
 +          if(hasAPriority) {
 +            splitParagraphSpecB.position += 1
 +          }else {
 +            splitParagraphSpecA.position += 1
 +          }
 +          return null
 +        }
 +      }
 +    }
 +    return{opSpecsA:[splitParagraphSpecA], opSpecsB:[splitParagraphSpecB]}
 +  }
 +  function transformMoveCursorRemoveCursor(moveCursorSpec, removeCursorSpec) {
 +    var isSameCursorRemoved = moveCursorSpec.memberid === removeCursorSpec.memberid;
 +    return{opSpecsA:isSameCursorRemoved ? [] : [moveCursorSpec], opSpecsB:[removeCursorSpec]}
 +  }
 +  function transformMoveCursorRemoveText(moveCursorSpec, removeTextSpec) {
-     var moveCursorSpecEnd = moveCursorSpec.position + moveCursorSpec.length, removeTextSpecEnd = removeTextSpec.position + removeTextSpec.length;
++    var isMoveCursorSpecRangeInverted = invertMoveCursorSpecRangeOnNegativeLength(moveCursorSpec), moveCursorSpecEnd = moveCursorSpec.position + moveCursorSpec.length, removeTextSpecEnd = removeTextSpec.position + removeTextSpec.length;
 +    if(removeTextSpecEnd <= moveCursorSpec.position) {
 +      moveCursorSpec.position -= removeTextSpec.length
 +    }else {
 +      if(removeTextSpec.position < moveCursorSpecEnd) {
 +        if(moveCursorSpec.position < removeTextSpec.position) {
 +          if(removeTextSpecEnd < moveCursorSpecEnd) {
 +            moveCursorSpec.length -= removeTextSpec.length
 +          }else {
 +            moveCursorSpec.length = removeTextSpec.position - moveCursorSpec.position
 +          }
 +        }else {
 +          moveCursorSpec.position = removeTextSpec.position;
 +          if(removeTextSpecEnd < moveCursorSpecEnd) {
 +            moveCursorSpec.length = moveCursorSpecEnd - removeTextSpecEnd
 +          }else {
 +            moveCursorSpec.length = 0
 +          }
 +        }
 +      }
 +    }
++    if(isMoveCursorSpecRangeInverted) {
++      invertMoveCursorSpecRange(moveCursorSpec)
++    }
 +    return{opSpecsA:[moveCursorSpec], opSpecsB:[removeTextSpec]}
 +  }
 +  function transformMoveCursorSplitParagraph(moveCursorSpec, splitParagraphSpec) {
++    var isMoveCursorSpecRangeInverted = invertMoveCursorSpecRangeOnNegativeLength(moveCursorSpec);
 +    if(splitParagraphSpec.position < moveCursorSpec.position) {
 +      moveCursorSpec.position += 1
 +    }else {
-       if(splitParagraphSpec.position <= moveCursorSpec.position + moveCursorSpec.length) {
++      if(splitParagraphSpec.position < moveCursorSpec.position + moveCursorSpec.length) {
 +        moveCursorSpec.length += 1
 +      }
 +    }
++    if(isMoveCursorSpecRangeInverted) {
++      invertMoveCursorSpecRange(moveCursorSpec)
++    }
 +    return{opSpecsA:[moveCursorSpec], opSpecsB:[splitParagraphSpec]}
 +  }
 +  function transformRemoveCursorRemoveCursor(removeCursorSpecA, removeCursorSpecB) {
 +    var isSameMemberid = removeCursorSpecA.memberid === removeCursorSpecB.memberid;
 +    return{opSpecsA:isSameMemberid ? [] : [removeCursorSpecA], opSpecsB:isSameMemberid ? [] : [removeCursorSpecB]}
 +  }
 +  function transformRemoveStyleRemoveStyle(removeStyleSpecA, removeStyleSpecB) {
 +    var isSameStyle = removeStyleSpecA.styleName === removeStyleSpecB.styleName && removeStyleSpecA.styleFamily === removeStyleSpecB.styleFamily;
 +    return{opSpecsA:isSameStyle ? [] : [removeStyleSpecA], opSpecsB:isSameStyle ? [] : [removeStyleSpecB]}
 +  }
 +  function transformRemoveStyleSetParagraphStyle(removeStyleSpec, setParagraphStyleSpec) {
 +    var helperOpspec, removeStyleSpecResult = [removeStyleSpec], setParagraphStyleSpecResult = [setParagraphStyleSpec];
 +    if(removeStyleSpec.styleFamily === "paragraph" && removeStyleSpec.styleName === setParagraphStyleSpec.styleName) {
 +      helperOpspec = {optype:"SetParagraphStyle", memberid:removeStyleSpec.memberid, timestamp:removeStyleSpec.timestamp, position:setParagraphStyleSpec.position, styleName:""};
 +      removeStyleSpecResult.unshift(helperOpspec);
 +      setParagraphStyleSpec.styleName = ""
 +    }
 +    return{opSpecsA:removeStyleSpecResult, opSpecsB:setParagraphStyleSpecResult}
 +  }
 +  function transformRemoveStyleUpdateParagraphStyle(removeStyleSpec, updateParagraphStyleSpec) {
 +    var setAttributes, helperOpspec, removeStyleSpecResult = [removeStyleSpec], updateParagraphStyleSpecResult = [updateParagraphStyleSpec];
 +    if(removeStyleSpec.styleFamily === "paragraph") {
 +      setAttributes = getStyleReferencingAttributes(updateParagraphStyleSpec.setProperties, removeStyleSpec.styleName);
 +      if(setAttributes.length > 0) {
 +        helperOpspec = {optype:"UpdateParagraphStyle", memberid:removeStyleSpec.memberid, timestamp:removeStyleSpec.timestamp, styleName:updateParagraphStyleSpec.styleName, removedProperties:{attributes:setAttributes.join(",")}};
 +        removeStyleSpecResult.unshift(helperOpspec)
 +      }
 +      if(removeStyleSpec.styleName === updateParagraphStyleSpec.styleName) {
 +        updateParagraphStyleSpecResult = []
 +      }else {
 +        dropStyleReferencingAttributes(updateParagraphStyleSpec.setProperties, removeStyleSpec.styleName)
 +      }
 +    }
 +    return{opSpecsA:removeStyleSpecResult, opSpecsB:updateParagraphStyleSpecResult}
 +  }
 +  function transformRemoveTextRemoveText(removeTextSpecA, removeTextSpecB) {
 +    var removeTextSpecAEnd = removeTextSpecA.position + removeTextSpecA.length, removeTextSpecBEnd = removeTextSpecB.position + removeTextSpecB.length, removeTextSpecAResult = [removeTextSpecA], removeTextSpecBResult = [removeTextSpecB];
 +    if(removeTextSpecBEnd <= removeTextSpecA.position) {
 +      removeTextSpecA.position -= removeTextSpecB.length
 +    }else {
 +      if(removeTextSpecAEnd <= removeTextSpecB.position) {
 +        removeTextSpecB.position -= removeTextSpecA.length
 +      }else {
 +        if(removeTextSpecB.position < removeTextSpecAEnd) {
 +          if(removeTextSpecA.position < removeTextSpecB.position) {
 +            if(removeTextSpecBEnd < removeTextSpecAEnd) {
 +              removeTextSpecA.length = removeTextSpecA.length - removeTextSpecB.length
 +            }else {
 +              removeTextSpecA.length = removeTextSpecB.position - removeTextSpecA.position
 +            }
 +            if(removeTextSpecAEnd < removeTextSpecBEnd) {
 +              removeTextSpecB.position = removeTextSpecA.position;
 +              removeTextSpecB.length = removeTextSpecBEnd - removeTextSpecAEnd
 +            }else {
 +              removeTextSpecBResult = []
 +            }
 +          }else {
 +            if(removeTextSpecAEnd < removeTextSpecBEnd) {
 +              removeTextSpecB.length = removeTextSpecB.length - removeTextSpecA.length
 +            }else {
 +              if(removeTextSpecB.position < removeTextSpecA.position) {
 +                removeTextSpecB.length = removeTextSpecA.position - removeTextSpecB.position
 +              }else {
 +                removeTextSpecBResult = []
 +              }
 +            }
 +            if(removeTextSpecBEnd < removeTextSpecAEnd) {
 +              removeTextSpecA.position = removeTextSpecB.position;
 +              removeTextSpecA.length = removeTextSpecAEnd - removeTextSpecBEnd
 +            }else {
 +              removeTextSpecAResult = []
 +            }
 +          }
 +        }
 +      }
 +    }
 +    return{opSpecsA:removeTextSpecAResult, opSpecsB:removeTextSpecBResult}
 +  }
 +  function transformRemoveTextSplitParagraph(removeTextSpec, splitParagraphSpec) {
 +    var removeTextSpecEnd = removeTextSpec.position + removeTextSpec.length, helperOpspec, removeTextSpecResult = [removeTextSpec], splitParagraphSpecResult = [splitParagraphSpec];
 +    if(splitParagraphSpec.position <= removeTextSpec.position) {
 +      removeTextSpec.position += 1
 +    }else {
 +      if(splitParagraphSpec.position < removeTextSpecEnd) {
 +        removeTextSpec.length = splitParagraphSpec.position - removeTextSpec.position;
 +        helperOpspec = {optype:"RemoveText", memberid:removeTextSpec.memberid, timestamp:removeTextSpec.timestamp, position:splitParagraphSpec.position + 1, length:removeTextSpecEnd - splitParagraphSpec.position};
 +        removeTextSpecResult.unshift(helperOpspec)
 +      }
 +    }
 +    if(removeTextSpec.position + removeTextSpec.length <= splitParagraphSpec.position) {
 +      splitParagraphSpec.position -= removeTextSpec.length
 +    }else {
 +      if(removeTextSpec.position < splitParagraphSpec.position) {
 +        splitParagraphSpec.position = removeTextSpec.position
 +      }
 +    }
 +    return{opSpecsA:removeTextSpecResult, opSpecsB:splitParagraphSpecResult}
 +  }
-   var transformations = {"AddCursor":{"AddCursor":passUnchanged, "AddStyle":passUnchanged, "InsertText":passUnchanged, "MoveCursor":passUnchanged, "RemoveCursor":passUnchanged, "RemoveStyle":passUnchanged, "RemoveText":passUnchanged, "SetParagraphStyle":passUnchanged, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":passUnchanged}, "AddStyle":{"AddStyle":passUnchanged, "InsertText":passUnchanged, "MoveCursor":passUnchanged, "RemoveCursor":passUnchanged, "RemoveStyle":transformAddS [...]
-   "RemoveText":passUnchanged, "SetParagraphStyle":passUnchanged, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":passUnchanged}, "InsertText":{"InsertText":transformInsertTextInsertText, "MoveCursor":transformInsertTextMoveCursor, "RemoveCursor":passUnchanged, "RemoveStyle":passUnchanged, "RemoveText":transformInsertTextRemoveText, "SplitParagraph":transformInsertTextSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "MoveCursor":{"MoveCursor":passUnchanged, "RemoveCursor":tr [...]
-   "RemoveStyle":passUnchanged, "RemoveText":transformMoveCursorRemoveText, "SetParagraphStyle":passUnchanged, "SplitParagraph":transformMoveCursorSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "RemoveCursor":{"RemoveCursor":transformRemoveCursorRemoveCursor, "RemoveStyle":passUnchanged, "RemoveText":passUnchanged, "SetParagraphStyle":passUnchanged, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":passUnchanged}, "RemoveStyle":{"RemoveStyle":transformRemoveStyleRemoveStyle, [...]
-   "SetParagraphStyle":transformRemoveStyleSetParagraphStyle, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":transformRemoveStyleUpdateParagraphStyle}, "RemoveText":{"RemoveText":transformRemoveTextRemoveText, "SplitParagraph":transformRemoveTextSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "SetParagraphStyle":{"UpdateParagraphStyle":passUnchanged}, "SplitParagraph":{"SplitParagraph":transformSplitParagraphSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "UpdatePar [...]
++  function passUnchanged(opSpecA, opSpecB) {
++    return{opSpecsA:[opSpecA], opSpecsB:[opSpecB]}
++  }
++  var transformations = {"AddCursor":{"AddCursor":passUnchanged, "AddStyle":passUnchanged, "ApplyDirectStyling":passUnchanged, "InsertText":passUnchanged, "MoveCursor":passUnchanged, "RemoveCursor":passUnchanged, "RemoveStyle":passUnchanged, "RemoveText":passUnchanged, "SetParagraphStyle":passUnchanged, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":passUnchanged}, "AddStyle":{"AddStyle":passUnchanged, "ApplyDirectStyling":passUnchanged, "InsertText":passUnchanged, "MoveCursor": [...]
++  "RemoveCursor":passUnchanged, "RemoveStyle":transformAddStyleRemoveStyle, "RemoveText":passUnchanged, "SetParagraphStyle":passUnchanged, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":passUnchanged}, "ApplyDirectStyling":{"ApplyDirectStyling":transformApplyDirectStylingApplyDirectStyling, "InsertText":transformApplyDirectStylingInsertText, "MoveCursor":passUnchanged, "RemoveCursor":passUnchanged, "RemoveStyle":passUnchanged, "RemoveText":transformApplyDirectStylingRemoveText,  [...]
++  "SplitParagraph":transformApplyDirectStylingSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "InsertText":{"InsertText":transformInsertTextInsertText, "MoveCursor":transformInsertTextMoveCursor, "RemoveCursor":passUnchanged, "RemoveStyle":passUnchanged, "RemoveText":transformInsertTextRemoveText, "SplitParagraph":transformInsertTextSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "MoveCursor":{"MoveCursor":passUnchanged, "RemoveCursor":transformMoveCursorRemoveCursor, "Rem [...]
++  "RemoveText":transformMoveCursorRemoveText, "SetParagraphStyle":passUnchanged, "SplitParagraph":transformMoveCursorSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "RemoveCursor":{"RemoveCursor":transformRemoveCursorRemoveCursor, "RemoveStyle":passUnchanged, "RemoveText":passUnchanged, "SetParagraphStyle":passUnchanged, "SplitParagraph":passUnchanged, "UpdateParagraphStyle":passUnchanged}, "RemoveStyle":{"RemoveStyle":transformRemoveStyleRemoveStyle, "RemoveText":passUnchanged,  [...]
++  "SplitParagraph":passUnchanged, "UpdateParagraphStyle":transformRemoveStyleUpdateParagraphStyle}, "RemoveText":{"RemoveText":transformRemoveTextRemoveText, "SplitParagraph":transformRemoveTextSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "SetParagraphStyle":{"UpdateParagraphStyle":passUnchanged}, "SplitParagraph":{"SplitParagraph":transformSplitParagraphSplitParagraph, "UpdateParagraphStyle":passUnchanged}, "UpdateParagraphStyle":{"UpdateParagraphStyle":transformUpdateParagra [...]
 +  this.passUnchanged = passUnchanged;
 +  this.extendTransformations = function(moreTransformations) {
 +    Object.keys(moreTransformations).forEach(function(optypeA) {
 +      var moreTransformationsOptypeAMap = moreTransformations[optypeA], optypeAMap, isExtendingOptypeAMap = transformations.hasOwnProperty(optypeA);
 +      runtime.log((isExtendingOptypeAMap ? "Extending" : "Adding") + " map for optypeA: " + optypeA);
 +      if(!isExtendingOptypeAMap) {
 +        transformations[optypeA] = {}
 +      }
 +      optypeAMap = transformations[optypeA];
 +      Object.keys(moreTransformationsOptypeAMap).forEach(function(optypeB) {
 +        var isOverwritingOptypeBEntry = optypeAMap.hasOwnProperty(optypeB);
 +        runtime.assert(optypeA <= optypeB, "Wrong order:" + optypeA + ", " + optypeB);
 +        runtime.log("  " + (isOverwritingOptypeBEntry ? "Overwriting" : "Adding") + " entry for optypeB: " + optypeB);
 +        optypeAMap[optypeB] = moreTransformationsOptypeAMap[optypeB]
 +      })
 +    })
 +  };
 +  this.transformOpspecVsOpspec = function(opSpecA, opSpecB) {
 +    var isOptypeAAlphaNumericSmaller = opSpecA.optype <= opSpecB.optype, helper, transformationFunctionMap, transformationFunction, result;
 +    runtime.log("Crosstransforming:");
 +    runtime.log(runtime.toJson(opSpecA));
 +    runtime.log(runtime.toJson(opSpecB));
 +    if(!isOptypeAAlphaNumericSmaller) {
 +      helper = opSpecA;
 +      opSpecA = opSpecB;
 +      opSpecB = helper
 +    }
 +    transformationFunctionMap = transformations[opSpecA.optype];
 +    transformationFunction = transformationFunctionMap && transformationFunctionMap[opSpecB.optype];
 +    if(transformationFunction) {
 +      result = transformationFunction(opSpecA, opSpecB, !isOptypeAAlphaNumericSmaller);
 +      if(!isOptypeAAlphaNumericSmaller && result !== null) {
 +        result = {opSpecsA:result.opSpecsB, opSpecsB:result.opSpecsA}
 +      }
 +    }else {
 +      result = null
 +    }
 +    runtime.log("result:");
 +    if(result) {
 +      runtime.log(runtime.toJson(result.opSpecsA));
 +      runtime.log(runtime.toJson(result.opSpecsB))
 +    }else {
 +      runtime.log("null")
 +    }
 +    return result
 +  }
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + This file is part of WebODF.
 +
 + WebODF is free software: you can redistribute it and/or modify it
 + under the terms of the GNU Affero General Public License (GNU AGPL)
 + as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.
 +
 + WebODF is distributed in the hope that it will be useful, but
 + WITHOUT ANY WARRANTY; without even the implied warranty of
 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + GNU Affero General Public License for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with WebODF.  If not, see <http://www.gnu.org/licenses/>.
 + @licend
 +
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.OperationFactory");
 +runtime.loadClass("ops.OperationTransformMatrix");
 +ops.OperationTransformer = function OperationTransformer() {
 +  var operationFactory, operationTransformMatrix = new ops.OperationTransformMatrix;
 +  function operations(opspecs) {
 +    var ops = [];
 +    opspecs.forEach(function(opspec) {
 +      ops.push(operationFactory.create(opspec))
 +    });
 +    return ops
 +  }
 +  function transformOpVsOp(opSpecA, opSpecB) {
 +    return operationTransformMatrix.transformOpspecVsOpspec(opSpecA, opSpecB)
 +  }
 +  function transformOpListVsOp(opSpecsA, opSpecB) {
 +    var transformResult, transformListResult, transformedOpspecsA = [], transformedOpspecsB = [];
 +    while(opSpecsA.length > 0 && opSpecB) {
 +      transformResult = transformOpVsOp(opSpecsA.shift(), (opSpecB));
 +      if(!transformResult) {
 +        return null
 +      }
 +      transformedOpspecsA = transformedOpspecsA.concat(transformResult.opSpecsA);
 +      if(transformResult.opSpecsB.length === 0) {
 +        transformedOpspecsA = transformedOpspecsA.concat(opSpecsA);
 +        opSpecB = null;
 +        break
 +      }
 +      while(transformResult.opSpecsB.length > 1) {
 +        transformListResult = transformOpListVsOp(opSpecsA, transformResult.opSpecsB.shift());
 +        if(!transformListResult) {
 +          return null
 +        }
 +        transformedOpspecsB = transformedOpspecsB.concat(transformListResult.opSpecsB);
 +        opSpecsA = transformListResult.opSpecsA
 +      }
 +      opSpecB = transformResult.opSpecsB.pop()
 +    }
 +    if(opSpecB) {
 +      transformedOpspecsB.push(opSpecB)
 +    }
 +    return{opSpecsA:transformedOpspecsA, opSpecsB:transformedOpspecsB}
 +  }
 +  this.setOperationFactory = function(f) {
 +    operationFactory = f
 +  };
 +  this.getOperationTransformMatrix = function() {
 +    return operationTransformMatrix
 +  };
 +  this.transform = function(opSpecsA, opSpecsB) {
 +    var transformResult, transformedOpspecsB = [];
 +    while(opSpecsB.length > 0) {
 +      transformResult = transformOpListVsOp(opSpecsA, opSpecsB.shift());
 +      if(!transformResult) {
 +        return null
 +      }
 +      opSpecsA = transformResult.opSpecsA;
 +      transformedOpspecsB = transformedOpspecsB.concat(transformResult.opSpecsB)
 +    }
 +    return{opsA:operations(opSpecsA), opsB:operations(transformedOpspecsB)}
 +  }
 +};
 +runtime.loadClass("core.Cursor");
 +runtime.loadClass("gui.SelectionMover");
 +ops.OdtCursor = function OdtCursor(memberId, odtDocument) {
 +  var self = this, validSelectionTypes = {}, selectionType, selectionMover, cursor;
 +  this.removeFromOdtDocument = function() {
 +    cursor.remove()
 +  };
 +  this.move = function(number, extend) {
 +    var moved = 0;
 +    if(number > 0) {
 +      moved = selectionMover.movePointForward(number, extend)
 +    }else {
 +      if(number <= 0) {
 +        moved = -selectionMover.movePointBackward(-number, extend)
 +      }
 +    }
 +    self.handleUpdate();
 +    return moved
 +  };
 +  this.handleUpdate = function() {
 +  };
 +  this.getStepCounter = function() {
 +    return selectionMover.getStepCounter()
 +  };
 +  this.getMemberId = function() {
 +    return memberId
 +  };
 +  this.getNode = function() {
 +    return cursor.getNode()
 +  };
 +  this.getAnchorNode = function() {
 +    return cursor.getAnchorNode()
 +  };
 +  this.getSelectedRange = function() {
 +    return cursor.getSelectedRange()
 +  };
 +  this.setSelectedRange = function(range, isForwardSelection) {
-     cursor.setSelectedRange(range, isForwardSelection)
++    cursor.setSelectedRange(range, isForwardSelection);
++    self.handleUpdate()
 +  };
 +  this.hasForwardSelection = function() {
 +    return cursor.hasForwardSelection()
 +  };
 +  this.getOdtDocument = function() {
 +    return odtDocument
 +  };
 +  this.getSelectionType = function() {
 +    return selectionType
 +  };
 +  this.setSelectionType = function(value) {
 +    if(validSelectionTypes.hasOwnProperty(value)) {
 +      selectionType = value
 +    }else {
 +      runtime.log("Invalid selection type: " + value)
 +    }
 +  };
 +  this.resetSelectionType = function() {
 +    self.setSelectionType(ops.OdtCursor.RangeSelection)
 +  };
 +  function init() {
 +    cursor = new core.Cursor(odtDocument.getDOM(), memberId);
 +    selectionMover = new gui.SelectionMover(cursor, odtDocument.getRootNode());
 +    validSelectionTypes[ops.OdtCursor.RangeSelection] = true;
 +    validSelectionTypes[ops.OdtCursor.RegionSelection] = true;
 +    self.resetSelectionType()
 +  }
 +  init()
 +};
 +ops.OdtCursor.RangeSelection = "Range";
 +ops.OdtCursor.RegionSelection = "Region";
 +(function() {
 +  return ops.OdtCursor
 +})();
 +/*
 +
 + Copyright (C) 2012 KO GmbH <aditya.bhatt at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.EditInfo = function EditInfo(container, odtDocument) {
 +  var editInfoNode, editHistory = {};
 +  function sortEdits() {
 +    var arr = [], memberid;
 +    for(memberid in editHistory) {
 +      if(editHistory.hasOwnProperty(memberid)) {
 +        arr.push({"memberid":memberid, "time":editHistory[memberid].time})
 +      }
 +    }
 +    arr.sort(function(a, b) {
 +      return a.time - b.time
 +    });
 +    return arr
 +  }
 +  this.getNode = function() {
 +    return editInfoNode
 +  };
 +  this.getOdtDocument = function() {
 +    return odtDocument
 +  };
 +  this.getEdits = function() {
 +    return editHistory
 +  };
 +  this.getSortedEdits = function() {
 +    return sortEdits()
 +  };
 +  this.addEdit = function(memberid, timestamp) {
 +    editHistory[memberid] = {time:timestamp}
 +  };
 +  this.clearEdits = function() {
 +    editHistory = {}
 +  };
 +  this.destroy = function(callback) {
 +    if(container.parentNode) {
 +      container.removeChild(editInfoNode)
 +    }
 +    callback()
 +  };
 +  function init() {
 +    var editInfons = "urn:webodf:names:editinfo", dom = odtDocument.getDOM();
 +    editInfoNode = dom.createElementNS(editInfons, "editinfo");
 +    container.insertBefore(editInfoNode, container.firstChild)
 +  }
 +  init()
 +};
 +runtime.loadClass("gui.SelectionMover");
 +gui.ShadowCursor = function ShadowCursor(odtDocument) {
 +  var selectedRange = odtDocument.getDOM().createRange(), forwardSelection = true;
 +  this.removeFromOdtDocument = function() {
 +  };
 +  this.getMemberId = function() {
 +    return gui.ShadowCursor.ShadowCursorMemberId
 +  };
 +  this.getSelectedRange = function() {
 +    return selectedRange
 +  };
 +  this.setSelectedRange = function(range, isForwardSelection) {
 +    selectedRange = range;
 +    forwardSelection = isForwardSelection !== false
 +  };
 +  this.hasForwardSelection = function() {
 +    return forwardSelection
 +  };
 +  this.getOdtDocument = function() {
 +    return odtDocument
 +  };
 +  this.getSelectionType = function() {
 +    return ops.OdtCursor.RangeSelection
 +  };
 +  function init() {
 +    selectedRange.setStart(odtDocument.getRootNode(), 0)
 +  }
 +  init()
 +};
 +gui.ShadowCursor.ShadowCursorMemberId = "";
 +(function() {
 +  return gui.ShadowCursor
 +})();
 +gui.Avatar = function Avatar(parentElement, avatarInitiallyVisible) {
 +  var self = this, handle, image, pendingImageUrl, displayShown = "block", displayHidden = "none";
 +  this.setColor = function(color) {
 +    image.style.borderColor = color
 +  };
 +  this.setImageUrl = function(url) {
 +    if(self.isVisible()) {
 +      image.src = url
 +    }else {
 +      pendingImageUrl = url
 +    }
 +  };
 +  this.isVisible = function() {
 +    return handle.style.display === displayShown
 +  };
 +  this.show = function() {
 +    if(pendingImageUrl) {
 +      image.src = pendingImageUrl;
 +      pendingImageUrl = undefined
 +    }
 +    handle.style.display = displayShown
 +  };
 +  this.hide = function() {
 +    handle.style.display = displayHidden
 +  };
 +  this.markAsFocussed = function(isFocussed) {
 +    handle.className = isFocussed ? "active" : ""
 +  };
 +  this.destroy = function(callback) {
 +    parentElement.removeChild(handle);
 +    callback()
 +  };
 +  function init() {
 +    var document = (parentElement.ownerDocument), htmlns = document.documentElement.namespaceURI;
 +    handle = document.createElementNS(htmlns, "div");
 +    image = document.createElementNS(htmlns, "img");
 +    image.width = 64;
 +    image.height = 64;
 +    handle.appendChild(image);
 +    handle.style.width = "64px";
 +    handle.style.height = "70px";
 +    handle.style.position = "absolute";
 +    handle.style.top = "-80px";
 +    handle.style.left = "-34px";
 +    handle.style.display = avatarInitiallyVisible ? displayShown : displayHidden;
 +    parentElement.appendChild(handle)
 +  }
 +  init()
 +};
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("gui.Avatar");
 +runtime.loadClass("ops.OdtCursor");
 +gui.Caret = function Caret(cursor, avatarInitiallyVisible, blinkOnRangeSelect) {
 +  var MIN_CARET_HEIGHT_PX = 8, DEFAULT_CARET_TOP = "5%", DEFAULT_CARET_HEIGHT = "1em", span, avatar, cursorNode, isShown = true, shouldBlink = false, blinking = false, blinkTimeout, domUtils = new core.DomUtils;
 +  function blink(reset) {
 +    if(!shouldBlink || !cursorNode.parentNode) {
 +      return
 +    }
 +    if(!blinking || reset) {
 +      if(reset && blinkTimeout !== undefined) {
 +        runtime.clearTimeout(blinkTimeout)
 +      }
 +      blinking = true;
 +      span.style.opacity = reset || span.style.opacity === "0" ? "1" : "0";
 +      blinkTimeout = runtime.setTimeout(function() {
 +        blinking = false;
 +        blink(false)
 +      }, 500)
 +    }
 +  }
 +  function getCaretClientRectWithMargin(caretElement, margin) {
 +    var caretRect = caretElement.getBoundingClientRect();
 +    return{left:caretRect.left - margin.left, top:caretRect.top - margin.top, right:caretRect.right + margin.right, bottom:caretRect.bottom + margin.bottom}
 +  }
 +  function length(node) {
 +    return node.nodeType === Node.TEXT_NODE ? node.textContent.length : node.childNodes.length
 +  }
 +  function verticalOverlap(cursorNode, rangeRect) {
 +    var cursorRect = cursorNode.getBoundingClientRect(), intersectTop = 0, intersectBottom = 0;
 +    if(cursorRect && rangeRect) {
 +      intersectTop = Math.max(cursorRect.top, rangeRect.top);
 +      intersectBottom = Math.min(cursorRect.bottom, rangeRect.bottom)
 +    }
 +    return intersectBottom - intersectTop
 +  }
 +  function getSelectionRect() {
 +    var range = cursor.getSelectedRange().cloneRange(), node = cursor.getNode(), nextRectangle, selectionRectangle = null, nodeLength;
 +    if(node.previousSibling) {
 +      nodeLength = length(node.previousSibling);
 +      range.setStart(node.previousSibling, nodeLength > 0 ? nodeLength - 1 : 0);
 +      range.setEnd(node.previousSibling, nodeLength);
 +      nextRectangle = range.getBoundingClientRect();
 +      if(nextRectangle && nextRectangle.height) {
 +        selectionRectangle = nextRectangle
 +      }
 +    }
 +    if(node.nextSibling) {
 +      range.setStart(node.nextSibling, 0);
 +      range.setEnd(node.nextSibling, length(node.nextSibling) > 0 ? 1 : 0);
 +      nextRectangle = range.getBoundingClientRect();
 +      if(nextRectangle && nextRectangle.height) {
 +        if(!selectionRectangle || verticalOverlap(node, nextRectangle) > verticalOverlap(node, selectionRectangle)) {
 +          selectionRectangle = nextRectangle
 +        }
 +      }
 +    }
 +    return selectionRectangle
 +  }
 +  function getSpanBoundingClientRect() {
 +    var range, rangeRect;
 +    range = span.ownerDocument.createRange();
 +    range.selectNode(span);
 +    rangeRect = range.getBoundingClientRect();
 +    range.detach();
 +    return rangeRect
 +  }
 +  function handleUpdate() {
 +    var selectionRect = getSelectionRect(), zoomLevel = cursor.getOdtDocument().getOdfCanvas().getZoomLevel(), caretRect;
 +    if(isShown && cursor.getSelectionType() === ops.OdtCursor.RangeSelection) {
 +      span.style.visibility = "visible"
 +    }else {
 +      span.style.visibility = "hidden"
 +    }
 +    if(selectionRect) {
 +      span.style.top = "0";
 +      caretRect = getSpanBoundingClientRect();
 +      if(selectionRect.height < MIN_CARET_HEIGHT_PX) {
 +        selectionRect = {top:selectionRect.top - (MIN_CARET_HEIGHT_PX - selectionRect.height) / 2, height:MIN_CARET_HEIGHT_PX}
 +      }
 +      span.style.height = domUtils.adaptRangeDifferenceToZoomLevel(selectionRect.height, zoomLevel) + "px";
 +      span.style.top = domUtils.adaptRangeDifferenceToZoomLevel(selectionRect.top - caretRect.top, zoomLevel) + "px"
 +    }else {
 +      span.style.height = DEFAULT_CARET_HEIGHT;
 +      span.style.top = DEFAULT_CARET_TOP
 +    }
 +  }
 +  this.handleUpdate = handleUpdate;
 +  this.refreshCursorBlinking = function() {
 +    if(blinkOnRangeSelect || cursor.getSelectedRange().collapsed) {
 +      shouldBlink = true;
 +      blink(true)
 +    }else {
 +      shouldBlink = false;
 +      span.style.opacity = "0"
 +    }
 +  };
 +  this.setFocus = function() {
 +    shouldBlink = true;
 +    avatar.markAsFocussed(true);
 +    blink(true)
 +  };
 +  this.removeFocus = function() {
 +    shouldBlink = false;
 +    avatar.markAsFocussed(false);
 +    span.style.opacity = "1"
 +  };
 +  this.show = function() {
 +    isShown = true;
 +    handleUpdate();
 +    avatar.markAsFocussed(true)
 +  };
 +  this.hide = function() {
 +    isShown = false;
 +    handleUpdate();
 +    avatar.markAsFocussed(false)
 +  };
 +  this.setAvatarImageUrl = function(url) {
 +    avatar.setImageUrl(url)
 +  };
 +  this.setColor = function(newColor) {
 +    span.style.borderColor = newColor;
 +    avatar.setColor(newColor)
 +  };
 +  this.getCursor = function() {
 +    return cursor
 +  };
 +  this.getFocusElement = function() {
 +    return span
 +  };
 +  this.toggleHandleVisibility = function() {
 +    if(avatar.isVisible()) {
 +      avatar.hide()
 +    }else {
 +      avatar.show()
 +    }
 +  };
 +  this.showHandle = function() {
 +    avatar.show()
 +  };
 +  this.hideHandle = function() {
 +    avatar.hide()
 +  };
 +  this.ensureVisible = function() {
 +    var canvasElement = cursor.getOdtDocument().getOdfCanvas().getElement(), canvasContainerElement = canvasElement.parentNode, caretRect, canvasContainerRect, horizontalMargin = canvasContainerElement.offsetWidth - canvasContainerElement.clientWidth + 5, verticalMargin = canvasContainerElement.offsetHeight - canvasContainerElement.clientHeight + 5;
 +    caretRect = getCaretClientRectWithMargin(span, {top:verticalMargin, left:horizontalMargin, bottom:verticalMargin, right:horizontalMargin});
 +    canvasContainerRect = canvasContainerElement.getBoundingClientRect();
 +    if(caretRect.top < canvasContainerRect.top) {
 +      canvasContainerElement.scrollTop -= canvasContainerRect.top - caretRect.top
 +    }else {
 +      if(caretRect.bottom > canvasContainerRect.bottom) {
 +        canvasContainerElement.scrollTop += caretRect.bottom - canvasContainerRect.bottom
 +      }
 +    }
 +    if(caretRect.left < canvasContainerRect.left) {
 +      canvasContainerElement.scrollLeft -= canvasContainerRect.left - caretRect.left
 +    }else {
 +      if(caretRect.right > canvasContainerRect.right) {
 +        canvasContainerElement.scrollLeft += caretRect.right - canvasContainerRect.right
 +      }
 +    }
 +    handleUpdate()
 +  };
 +  this.destroy = function(callback) {
 +    avatar.destroy(function(err) {
 +      if(err) {
 +        callback(err)
 +      }else {
 +        cursorNode.removeChild(span);
 +        callback()
 +      }
 +    })
 +  };
 +  function init() {
 +    var dom = cursor.getOdtDocument().getDOM(), htmlns = dom.documentElement.namespaceURI;
 +    span = dom.createElementNS(htmlns, "span");
 +    span.style.top = DEFAULT_CARET_TOP;
 +    cursorNode = cursor.getNode();
 +    cursorNode.appendChild(span);
 +    avatar = new gui.Avatar(cursorNode, avatarInitiallyVisible);
 +    handleUpdate()
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
++gui.PlainTextPasteboard = function PlainTextPasteboard(odtDocument, inputMemberId) {
++  function createOp(op, data) {
++    op.init(data);
++    return op
++  }
++  this.createPasteOps = function(data) {
++    var originalCursorPosition = odtDocument.getCursorPosition(inputMemberId), cursorPosition = originalCursorPosition, operations = [], paragraphs;
++    paragraphs = data.replace(/\r/g, "").split("\n");
++    paragraphs.forEach(function(text) {
++      operations.push(createOp(new ops.OpSplitParagraph, {memberid:inputMemberId, position:cursorPosition}));
++      cursorPosition += 1;
++      operations.push(createOp(new ops.OpInsertText, {memberid:inputMemberId, position:cursorPosition, text:text}));
++      cursorPosition += text.length
++    });
++    operations.push(createOp(new ops.OpRemoveText, {memberid:inputMemberId, position:originalCursorPosition, length:1}));
++    return operations
++  }
++};
++/*
++
++ Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
++
++ @licstart
++ The JavaScript code in this page is free software: you can redistribute it
++ and/or modify it under the terms of the GNU Affero General Public License
++ (GNU AGPL) as published by the Free Software Foundation, either version 3 of
++ the License, or (at your option) any later version.  The code is distributed
++ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
++
++ You should have received a copy of the GNU Affero General Public License
++ along with this code.  If not, see <http://www.gnu.org/licenses/>.
++
++ As additional permission under GNU AGPL version 3 section 7, you
++ may distribute non-source (e.g., minimized or compacted) forms of
++ that code without the copy of the GNU GPL normally required by
++ section 4, provided you include this license notice and a URL
++ through which recipients can access the Corresponding Source.
++
++ As a special exception to the AGPL, any HTML file which merely makes function
++ calls to this code, and for that purpose includes it by reference shall be
++ deemed a separate work for copyright law purposes. In addition, the copyright
++ holders of this code give you permission to combine this code with free
++ software libraries that are released under the GNU LGPL. You may copy and
++ distribute such a system following the terms of the GNU AGPL for this code
++ and the LGPL for the libraries. If you modify this code, you may extend this
++ exception to your version of the code, but you are not obligated to do so.
++ If you do not wish to do so, delete this exception statement from your
++ version.
++
++ This license applies to this entire compilation.
++ @licend
++ @source: http://www.webodf.org/
++ @source: https://github.com/kogmbh/WebODF/
++*/
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("xmldom.LSSerializer");
 +runtime.loadClass("odf.OdfNodeFilter");
 +runtime.loadClass("odf.TextSerializer");
 +gui.Clipboard = function Clipboard() {
 +  var xmlSerializer, textSerializer, filter;
 +  this.setDataFromRange = function(e, range) {
 +    var result = true, setDataResult, clipboard = e.clipboardData, window = runtime.getWindow(), document = range.startContainer.ownerDocument, fragmentContainer;
 +    if(!clipboard && window) {
 +      clipboard = window.clipboardData
 +    }
 +    if(clipboard) {
 +      fragmentContainer = document.createElement("span");
 +      fragmentContainer.appendChild(range.cloneContents());
 +      setDataResult = clipboard.setData("text/plain", textSerializer.writeToString(fragmentContainer));
 +      result = result && setDataResult;
 +      setDataResult = clipboard.setData("text/html", xmlSerializer.writeToString(fragmentContainer, odf.Namespaces.namespaceMap));
 +      result = result && setDataResult;
 +      e.preventDefault()
 +    }else {
 +      result = false
 +    }
 +    return result
 +  };
 +  function init() {
 +    xmlSerializer = new xmldom.LSSerializer;
 +    textSerializer = new odf.TextSerializer;
 +    filter = new odf.OdfNodeFilter;
 +    xmlSerializer.filter = filter;
 +    textSerializer.filter = filter
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");
 +runtime.loadClass("core.Utils");
 +runtime.loadClass("ops.OpApplyDirectStyling");
 +runtime.loadClass("gui.StyleHelper");
 +gui.DirectTextStyler = function DirectTextStyler(session, inputMemberId) {
 +  var self = this, utils = new core.Utils, odtDocument = session.getOdtDocument(), styleHelper = new gui.StyleHelper(odtDocument.getFormatting()), eventNotifier = new core.EventNotifier([gui.DirectTextStyler.textStylingChanged]), directCursorStyleProperties, currentSelectionStyles = [], isBoldValue = false, isItalicValue = false, hasUnderlineValue = false, hasStrikeThroughValue = false, fontSizeValue, fontNameValue;
 +  function get(obj, keys) {
 +    var i = 0, key = keys[i];
 +    while(key && obj) {
 +      obj = obj[key];
 +      i += 1;
 +      key = keys[i]
 +    }
 +    return keys.length === i ? obj : undefined
 +  }
 +  function getCommonValue(objArray, keys) {
 +    var value = get(objArray[0], keys);
 +    return objArray.every(function(obj) {
 +      return value === get(obj, keys)
 +    }) ? value : undefined
 +  }
 +  function getAppliedStyles() {
 +    var cursor = odtDocument.getCursor(inputMemberId), range = cursor && cursor.getSelectedRange(), selectionStyles = range && styleHelper.getAppliedStyles(range) || [];
 +    if(selectionStyles[0] && directCursorStyleProperties) {
 +      selectionStyles[0] = utils.mergeObjects(selectionStyles[0], (directCursorStyleProperties))
 +    }
 +    return selectionStyles
 +  }
 +  function updatedCachedValues() {
 +    var fontSize, diffMap;
 +    currentSelectionStyles = getAppliedStyles();
 +    function noteChange(oldValue, newValue, id) {
 +      if(oldValue !== newValue) {
 +        if(diffMap === undefined) {
 +          diffMap = {}
 +        }
 +        diffMap[id] = newValue
 +      }
 +      return newValue
 +    }
 +    isBoldValue = noteChange(isBoldValue, currentSelectionStyles ? styleHelper.isBold(currentSelectionStyles) : false, "isBold");
 +    isItalicValue = noteChange(isItalicValue, currentSelectionStyles ? styleHelper.isItalic(currentSelectionStyles) : false, "isItalic");
 +    hasUnderlineValue = noteChange(hasUnderlineValue, currentSelectionStyles ? styleHelper.hasUnderline(currentSelectionStyles) : false, "hasUnderline");
 +    hasStrikeThroughValue = noteChange(hasStrikeThroughValue, currentSelectionStyles ? styleHelper.hasStrikeThrough(currentSelectionStyles) : false, "hasStrikeThrough");
 +    fontSize = currentSelectionStyles && getCommonValue(currentSelectionStyles, ["style:text-properties", "fo:font-size"]);
 +    fontSizeValue = noteChange(fontSizeValue, fontSize && parseFloat(fontSize), "fontSize");
 +    fontNameValue = noteChange(fontNameValue, currentSelectionStyles && getCommonValue(currentSelectionStyles, ["style:text-properties", "style:font-name"]), "fontName");
 +    if(diffMap) {
 +      eventNotifier.emit(gui.DirectTextStyler.textStylingChanged, diffMap)
 +    }
 +  }
 +  function onCursorAdded(cursor) {
 +    if(cursor.getMemberId() === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onCursorRemoved(memberId) {
 +    if(memberId === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onCursorMoved(cursor) {
 +    if(cursor.getMemberId() === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onParagraphStyleModified() {
 +    updatedCachedValues()
 +  }
 +  function onParagraphChanged(args) {
 +    var cursor = odtDocument.getCursor(inputMemberId);
 +    if(cursor && odtDocument.getParagraphElement(cursor.getNode()) === args.paragraphElement) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function toggle(predicate, toggleMethod) {
 +    var cursor = odtDocument.getCursor(inputMemberId), appliedStyles;
 +    if(!cursor) {
 +      return false
 +    }
 +    appliedStyles = styleHelper.getAppliedStyles(cursor.getSelectedRange());
 +    toggleMethod(!predicate(appliedStyles));
 +    return true
 +  }
 +  function formatTextSelection(textProperties) {
 +    var selection = odtDocument.getCursorSelection(inputMemberId), op, properties = {"style:text-properties":textProperties};
 +    if(selection.length !== 0) {
 +      op = new ops.OpApplyDirectStyling;
 +      op.init({memberid:inputMemberId, position:selection.position, length:selection.length, setProperties:properties});
 +      session.enqueue([op])
 +    }else {
 +      directCursorStyleProperties = utils.mergeObjects(directCursorStyleProperties || {}, properties);
 +      updatedCachedValues()
 +    }
 +  }
 +  this.formatTextSelection = formatTextSelection;
 +  function applyTextPropertyToSelection(propertyName, propertyValue) {
 +    var textProperties = {};
 +    textProperties[propertyName] = propertyValue;
 +    formatTextSelection(textProperties)
 +  }
 +  this.createCursorStyleOp = function(position, length) {
 +    var styleOp = null;
 +    if(directCursorStyleProperties) {
 +      styleOp = new ops.OpApplyDirectStyling;
 +      styleOp.init({memberid:inputMemberId, position:position, length:length, setProperties:directCursorStyleProperties});
 +      directCursorStyleProperties = null;
 +      updatedCachedValues()
 +    }
 +    return styleOp
 +  };
 +  function clearCursorStyle(op) {
 +    var spec = op.spec();
 +    if(directCursorStyleProperties && spec.memberid === inputMemberId) {
 +      if(spec.optype !== "SplitParagraph") {
 +        directCursorStyleProperties = null;
 +        updatedCachedValues()
 +      }
 +    }
 +  }
 +  function setBold(checked) {
 +    var value = checked ? "bold" : "normal";
 +    applyTextPropertyToSelection("fo:font-weight", value)
 +  }
 +  this.setBold = setBold;
 +  function setItalic(checked) {
 +    var value = checked ? "italic" : "normal";
 +    applyTextPropertyToSelection("fo:font-style", value)
 +  }
 +  this.setItalic = setItalic;
 +  function setHasUnderline(checked) {
 +    var value = checked ? "solid" : "none";
 +    applyTextPropertyToSelection("style:text-underline-style", value)
 +  }
 +  this.setHasUnderline = setHasUnderline;
 +  function setHasStrikethrough(checked) {
 +    var value = checked ? "solid" : "none";
 +    applyTextPropertyToSelection("style:text-line-through-style", value)
 +  }
 +  this.setHasStrikethrough = setHasStrikethrough;
 +  function setFontSize(value) {
 +    applyTextPropertyToSelection("fo:font-size", value + "pt")
 +  }
 +  this.setFontSize = setFontSize;
 +  function setFontName(value) {
 +    applyTextPropertyToSelection("style:font-name", value)
 +  }
 +  this.setFontName = setFontName;
 +  this.getAppliedStyles = function() {
 +    return currentSelectionStyles
 +  };
 +  this.toggleBold = toggle.bind(self, styleHelper.isBold, setBold);
 +  this.toggleItalic = toggle.bind(self, styleHelper.isItalic, setItalic);
 +  this.toggleUnderline = toggle.bind(self, styleHelper.hasUnderline, setHasUnderline);
 +  this.toggleStrikethrough = toggle.bind(self, styleHelper.hasStrikeThrough, setHasStrikethrough);
 +  this.isBold = function() {
 +    return isBoldValue
 +  };
 +  this.isItalic = function() {
 +    return isItalicValue
 +  };
 +  this.hasUnderline = function() {
 +    return hasUnderlineValue
 +  };
 +  this.hasStrikeThrough = function() {
 +    return hasStrikeThroughValue
 +  };
 +  this.fontSize = function() {
 +    return fontSizeValue
 +  };
 +  this.fontName = function() {
 +    return fontNameValue
 +  };
 +  this.subscribe = function(eventid, cb) {
 +    eventNotifier.subscribe(eventid, cb)
 +  };
 +  this.unsubscribe = function(eventid, cb) {
 +    eventNotifier.unsubscribe(eventid, cb)
 +  };
 +  this.destroy = function(callback) {
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalParagraphStyleModified, onParagraphStyleModified);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalParagraphChanged, onParagraphChanged);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalOperationExecuted, clearCursorStyle);
 +    callback()
 +  };
 +  function init() {
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +    odtDocument.subscribe(ops.OdtDocument.signalParagraphStyleModified, onParagraphStyleModified);
 +    odtDocument.subscribe(ops.OdtDocument.signalParagraphChanged, onParagraphChanged);
 +    odtDocument.subscribe(ops.OdtDocument.signalOperationExecuted, clearCursorStyle);
 +    updatedCachedValues()
 +  }
 +  init()
 +};
 +gui.DirectTextStyler.textStylingChanged = "textStyling/changed";
 +(function() {
 +  return gui.DirectTextStyler
 +})();
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");
 +runtime.loadClass("core.Utils");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("ops.OpAddStyle");
 +runtime.loadClass("ops.OpSetParagraphStyle");
 +runtime.loadClass("gui.StyleHelper");
 +gui.DirectParagraphStyler = function DirectParagraphStyler(session, inputMemberId, objectNameGenerator) {
 +  var odtDocument = session.getOdtDocument(), utils = new core.Utils, odfUtils = new odf.OdfUtils, styleHelper = new gui.StyleHelper(odtDocument.getFormatting()), eventNotifier = new core.EventNotifier([gui.DirectParagraphStyler.paragraphStylingChanged]), isAlignedLeftValue, isAlignedCenterValue, isAlignedRightValue, isAlignedJustifiedValue;
 +  function updatedCachedValues() {
 +    var cursor = odtDocument.getCursor(inputMemberId), range = cursor && cursor.getSelectedRange(), diffMap;
 +    function noteChange(oldValue, newValue, id) {
 +      if(oldValue !== newValue) {
 +        if(diffMap === undefined) {
 +          diffMap = {}
 +        }
 +        diffMap[id] = newValue
 +      }
 +      return newValue
 +    }
 +    isAlignedLeftValue = noteChange(isAlignedLeftValue, range ? styleHelper.isAlignedLeft(range) : false, "isAlignedLeft");
 +    isAlignedCenterValue = noteChange(isAlignedCenterValue, range ? styleHelper.isAlignedCenter(range) : false, "isAlignedCenter");
 +    isAlignedRightValue = noteChange(isAlignedRightValue, range ? styleHelper.isAlignedRight(range) : false, "isAlignedRight");
 +    isAlignedJustifiedValue = noteChange(isAlignedJustifiedValue, range ? styleHelper.isAlignedJustified(range) : false, "isAlignedJustified");
 +    if(diffMap) {
 +      eventNotifier.emit(gui.DirectParagraphStyler.paragraphStylingChanged, diffMap)
 +    }
 +  }
 +  function onCursorAdded(cursor) {
 +    if(cursor.getMemberId() === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onCursorRemoved(memberId) {
 +    if(memberId === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onCursorMoved(cursor) {
 +    if(cursor.getMemberId() === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onParagraphStyleModified() {
 +    updatedCachedValues()
 +  }
 +  function onParagraphChanged(args) {
 +    var cursor = odtDocument.getCursor(inputMemberId);
 +    if(cursor && odtDocument.getParagraphElement(cursor.getNode()) === args.paragraphElement) {
 +      updatedCachedValues()
 +    }
 +  }
 +  this.isAlignedLeft = function() {
 +    return isAlignedLeftValue
 +  };
 +  this.isAlignedCenter = function() {
 +    return isAlignedCenterValue
 +  };
 +  this.isAlignedRight = function() {
 +    return isAlignedRightValue
 +  };
 +  this.isAlignedJustified = function() {
 +    return isAlignedJustifiedValue
 +  };
 +  function applyParagraphDirectStyling(applyDirectStyling) {
 +    var range = odtDocument.getCursor(inputMemberId).getSelectedRange(), position = odtDocument.getCursorPosition(inputMemberId), paragraphs = odfUtils.getParagraphElements(range), formatting = odtDocument.getFormatting();
 +    paragraphs.forEach(function(paragraph) {
 +      var paragraphStartPoint = position + odtDocument.getDistanceFromCursor(inputMemberId, paragraph, 0), paragraphStyleName = paragraph.getAttributeNS(odf.Namespaces.textns, "style-name"), newParagraphStyleName = objectNameGenerator.generateStyleName(), opAddStyle, opSetParagraphStyle, paragraphProperties;
 +      paragraphStartPoint += 1;
 +      if(paragraphStyleName) {
 +        paragraphProperties = formatting.createDerivedStyleObject(paragraphStyleName, "paragraph", {})
 +      }
 +      paragraphProperties = applyDirectStyling(paragraphProperties || {});
 +      opAddStyle = new ops.OpAddStyle;
 +      opAddStyle.init({memberid:inputMemberId, styleName:newParagraphStyleName, styleFamily:"paragraph", isAutomaticStyle:true, setProperties:paragraphProperties});
 +      opSetParagraphStyle = new ops.OpSetParagraphStyle;
 +      opSetParagraphStyle.init({memberid:inputMemberId, styleName:newParagraphStyleName, position:paragraphStartPoint});
 +      session.enqueue([opAddStyle, opSetParagraphStyle])
 +    })
 +  }
 +  function applySimpleParagraphDirectStyling(styleOverrides) {
 +    applyParagraphDirectStyling(function(paragraphStyle) {
 +      return utils.mergeObjects(paragraphStyle, styleOverrides)
 +    })
 +  }
 +  function alignParagraph(alignment) {
 +    applySimpleParagraphDirectStyling({"style:paragraph-properties":{"fo:text-align":alignment}})
 +  }
 +  this.alignParagraphLeft = function() {
 +    alignParagraph("left");
 +    return true
 +  };
 +  this.alignParagraphCenter = function() {
 +    alignParagraph("center");
 +    return true
 +  };
 +  this.alignParagraphRight = function() {
 +    alignParagraph("right");
 +    return true
 +  };
 +  this.alignParagraphJustified = function() {
 +    alignParagraph("justify");
 +    return true
 +  };
 +  function modifyParagraphIndent(direction, paragraphStyle) {
 +    var tabStopDistance = odtDocument.getFormatting().getDefaultTabStopDistance(), paragraphProperties = paragraphStyle["style:paragraph-properties"], indentValue = paragraphProperties && paragraphProperties["fo:margin-left"], indent = indentValue && odfUtils.parseLength(indentValue), newIndent;
 +    if(indent && indent.unit === tabStopDistance.unit) {
 +      newIndent = indent.value + direction * tabStopDistance.value + indent.unit
 +    }else {
 +      newIndent = direction * tabStopDistance.value + tabStopDistance.unit
 +    }
 +    return utils.mergeObjects(paragraphStyle, {"style:paragraph-properties":{"fo:margin-left":newIndent}})
 +  }
 +  this.indent = function() {
 +    applyParagraphDirectStyling(modifyParagraphIndent.bind(null, 1));
 +    return true
 +  };
 +  this.outdent = function() {
 +    applyParagraphDirectStyling(modifyParagraphIndent.bind(null, -1));
 +    return true
 +  };
 +  this.subscribe = function(eventid, cb) {
 +    eventNotifier.subscribe(eventid, cb)
 +  };
 +  this.unsubscribe = function(eventid, cb) {
 +    eventNotifier.unsubscribe(eventid, cb)
 +  };
 +  this.destroy = function(callback) {
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalParagraphStyleModified, onParagraphStyleModified);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalParagraphChanged, onParagraphChanged);
 +    callback()
 +  };
 +  function init() {
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +    odtDocument.subscribe(ops.OdtDocument.signalParagraphStyleModified, onParagraphStyleModified);
 +    odtDocument.subscribe(ops.OdtDocument.signalParagraphChanged, onParagraphChanged);
 +    updatedCachedValues()
 +  }
 +  init()
 +};
 +gui.DirectParagraphStyler.paragraphStylingChanged = "paragraphStyling/changed";
 +(function() {
 +  return gui.DirectParagraphStyler
 +})();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +gui.KeyboardHandler = function KeyboardHandler() {
 +  var modifier = gui.KeyboardHandler.Modifier, defaultBinding = null, bindings = {};
 +  function getModifiers(e) {
 +    var modifiers = modifier.None;
 +    if(e.metaKey) {
 +      modifiers |= modifier.Meta
 +    }
 +    if(e.ctrlKey) {
 +      modifiers |= modifier.Ctrl
 +    }
 +    if(e.altKey) {
 +      modifiers |= modifier.Alt
 +    }
 +    if(e.shiftKey) {
 +      modifiers |= modifier.Shift
 +    }
 +    return modifiers
 +  }
 +  function getKeyCombo(keyCode, modifiers) {
 +    if(!modifiers) {
 +      modifiers = modifier.None
 +    }
 +    return keyCode + ":" + modifiers
 +  }
 +  this.setDefault = function(callback) {
 +    defaultBinding = callback
 +  };
 +  this.bind = function(keyCode, modifiers, callback) {
 +    var keyCombo = getKeyCombo(keyCode, modifiers);
 +    runtime.assert(bindings.hasOwnProperty(keyCombo) === false, "tried to overwrite the callback handler of key combo: " + keyCombo);
 +    bindings[keyCombo] = callback
 +  };
 +  this.unbind = function(keyCode, modifiers) {
 +    var keyCombo = getKeyCombo(keyCode, modifiers);
 +    delete bindings[keyCombo]
 +  };
 +  this.reset = function() {
 +    defaultBinding = null;
 +    bindings = {}
 +  };
 +  this.handleEvent = function(e) {
 +    var keyCombo = getKeyCombo(e.keyCode, getModifiers(e)), callback = bindings[keyCombo], handled = false;
 +    if(callback) {
 +      handled = callback()
 +    }else {
 +      if(defaultBinding !== null) {
 +        handled = defaultBinding(e)
 +      }
 +    }
 +    if(handled) {
 +      if(e.preventDefault) {
 +        e.preventDefault()
 +      }else {
 +        e.returnValue = false
 +      }
 +    }
 +  }
 +};
 +gui.KeyboardHandler.Modifier = {None:0, Meta:1, Ctrl:2, Alt:4, CtrlAlt:6, Shift:8, MetaShift:9, CtrlShift:10, AltShift:12};
 +gui.KeyboardHandler.KeyCode = {Backspace:8, Tab:9, Clear:12, Enter:13, End:35, Home:36, Left:37, Up:38, Right:39, Down:40, Delete:46, A:65, B:66, C:67, D:68, E:69, F:70, G:71, H:72, I:73, J:74, K:75, L:76, M:77, N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86, W:87, X:88, Y:89, Z:90};
 +(function() {
 +  return gui.KeyboardHandler
 +})();
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("odf.ObjectNameGenerator");
 +gui.ImageManager = function ImageManager(session, inputMemberId, objectNameGenerator) {
 +  var cmPerPixel = 0.0264583333333334, fileExtensionByMimetype = {"image/gif":".gif", "image/jpeg":".jpg", "image/png":".png"}, textns = odf.Namespaces.textns, odtDocument = session.getOdtDocument(), formatting = odtDocument.getFormatting(), paragraphStyleToPageContentSizeMap = {};
 +  function createAddGraphicsStyleOp(name) {
 +    var op = new ops.OpAddStyle;
 +    op.init({memberid:inputMemberId, styleName:name, styleFamily:"graphic", isAutomaticStyle:false, setProperties:{"style:graphic-properties":{"text:anchor-type":"paragraph", "svg:x":"0cm", "svg:y":"0cm", "style:wrap":"dynamic", "style:number-wrapped-paragraphs":"no-limit", "style:wrap-contour":"false", "style:vertical-pos":"top", "style:vertical-rel":"paragraph", "style:horizontal-pos":"center", "style:horizontal-rel":"paragraph"}}});
 +    return op
 +  }
 +  function createAddFrameStyleOp(styleName, parentStyleName) {
 +    var op = new ops.OpAddStyle;
 +    op.init({memberid:inputMemberId, styleName:styleName, styleFamily:"graphic", isAutomaticStyle:true, setProperties:{"style:parent-style-name":parentStyleName, "style:graphic-properties":{"style:vertical-pos":"top", "style:vertical-rel":"baseline", "style:horizontal-pos":"center", "style:horizontal-rel":"paragraph", "fo:background-color":"transparent", "style:background-transparency":"100%", "style:shadow":"none", "style:mirror":"none", "fo:clip":"rect(0cm, 0cm, 0cm, 0cm)", "draw:lumi [...]
 +    "draw:contrast":"0%", "draw:red":"0%", "draw:green":"0%", "draw:blue":"0%", "draw:gamma":"100%", "draw:color-inversion":"false", "draw:image-opacity":"100%", "draw:color-mode":"standard"}}});
 +    return op
 +  }
 +  function getFileExtension(mimetype) {
 +    mimetype = mimetype.toLowerCase();
 +    return fileExtensionByMimetype.hasOwnProperty(mimetype) ? fileExtensionByMimetype[mimetype] : null
 +  }
 +  function insertImageInternal(mimetype, content, widthInCm, heightInCm) {
 +    var graphicsStyleName = "Graphics", stylesElement = odtDocument.getOdfCanvas().odfContainer().rootElement.styles, fileExtension = getFileExtension(mimetype), fileName, graphicsStyleElement, frameStyleName, op, operations = [];
 +    runtime.assert(fileExtension !== null, "Image type is not supported: " + mimetype);
 +    fileName = "Pictures/" + objectNameGenerator.generateImageName() + fileExtension;
 +    op = new ops.OpSetBlob;
 +    op.init({memberid:inputMemberId, filename:fileName, mimetype:mimetype, content:content});
 +    operations.push(op);
 +    graphicsStyleElement = formatting.getStyleElement(graphicsStyleName, "graphic", [stylesElement]);
 +    if(!graphicsStyleElement) {
 +      op = createAddGraphicsStyleOp(graphicsStyleName);
 +      operations.push(op)
 +    }
 +    frameStyleName = objectNameGenerator.generateStyleName();
 +    op = createAddFrameStyleOp(frameStyleName, graphicsStyleName);
 +    operations.push(op);
 +    op = new ops.OpInsertImage;
 +    op.init({memberid:inputMemberId, position:odtDocument.getCursorPosition(inputMemberId), filename:fileName, frameWidth:widthInCm + "cm", frameHeight:heightInCm + "cm", frameStyleName:frameStyleName, frameName:objectNameGenerator.generateFrameName()});
 +    operations.push(op);
 +    session.enqueue(operations)
 +  }
 +  function trimmedSize(originalSize, pageContentSize) {
 +    var widthRatio = 1, heightRatio = 1, ratio;
 +    if(originalSize.width > pageContentSize.width) {
 +      widthRatio = pageContentSize.width / originalSize.width
 +    }
 +    if(originalSize.height > pageContentSize.height) {
 +      heightRatio = pageContentSize.height / originalSize.height
 +    }
 +    ratio = Math.min(widthRatio, heightRatio);
 +    return{width:originalSize.width * ratio, height:originalSize.height * ratio}
 +  }
 +  this.insertImage = function(mimetype, content, widthInPx, heightInPx) {
 +    var paragraphElement, styleName, pageContentSize, originalSize, newSize;
 +    runtime.assert(widthInPx > 0 && heightInPx > 0, "Both width and height of the image should be greater than 0px.");
 +    paragraphElement = odtDocument.getParagraphElement(odtDocument.getCursor(inputMemberId).getNode());
 +    styleName = paragraphElement.getAttributeNS(textns, "style-name");
 +    if(!paragraphStyleToPageContentSizeMap.hasOwnProperty(styleName)) {
 +      paragraphStyleToPageContentSizeMap[styleName] = formatting.getContentSize(styleName, "paragraph")
 +    }
 +    pageContentSize = paragraphStyleToPageContentSizeMap[styleName];
 +    originalSize = {width:widthInPx * cmPerPixel, height:heightInPx * cmPerPixel};
 +    newSize = trimmedSize(originalSize, pageContentSize);
 +    insertImageInternal(mimetype, content, newSize.width, newSize.height)
 +  }
 +};
 +runtime.loadClass("odf.Namespaces");
 +gui.ImageSelector = function ImageSelector(odfCanvas) {
 +  var svgns = odf.Namespaces.svgns, imageSelectorId = "imageSelector", selectorBorderWidth = 1, squareClassNames = ["topLeft", "topRight", "bottomRight", "bottomLeft", "topMiddle", "rightMiddle", "bottomMiddle", "leftMiddle"], document = odfCanvas.getElement().ownerDocument, hasSelection = false;
 +  function createSelectorElement() {
 +    var sizerElement = odfCanvas.getSizer(), selectorElement, squareElement;
 +    selectorElement = document.createElement("div");
 +    selectorElement.id = "imageSelector";
 +    selectorElement.style.borderWidth = selectorBorderWidth + "px";
 +    sizerElement.appendChild(selectorElement);
 +    squareClassNames.forEach(function(className) {
 +      squareElement = document.createElement("div");
 +      squareElement.className = className;
 +      selectorElement.appendChild(squareElement)
 +    });
 +    return selectorElement
 +  }
 +  function getPosition(element, referenceElement) {
 +    var rect = element.getBoundingClientRect(), refRect = referenceElement.getBoundingClientRect(), zoomLevel = odfCanvas.getZoomLevel();
 +    return{left:(rect.left - refRect.left) / zoomLevel - selectorBorderWidth, top:(rect.top - refRect.top) / zoomLevel - selectorBorderWidth}
 +  }
 +  this.select = function(frameElement) {
 +    var selectorElement = document.getElementById(imageSelectorId), position;
 +    if(!selectorElement) {
 +      selectorElement = createSelectorElement()
 +    }
 +    hasSelection = true;
 +    position = getPosition(frameElement, (selectorElement.parentNode));
 +    selectorElement.style.display = "block";
 +    selectorElement.style.left = position.left + "px";
 +    selectorElement.style.top = position.top + "px";
 +    selectorElement.style.width = frameElement.getAttributeNS(svgns, "width");
 +    selectorElement.style.height = frameElement.getAttributeNS(svgns, "height")
 +  };
 +  this.clearSelection = function() {
 +    var selectorElement;
 +    if(hasSelection) {
 +      selectorElement = document.getElementById(imageSelectorId);
 +      if(selectorElement) {
 +        selectorElement.style.display = "none"
 +      }
 +    }
 +    hasSelection = false
 +  };
 +  this.isSelectorElement = function(node) {
 +    var selectorElement = document.getElementById(imageSelectorId);
 +    if(!selectorElement) {
 +      return false
 +    }
 +    return node === selectorElement || node.parentNode === selectorElement
 +  }
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
++runtime.loadClass("core.PositionFilter");
 +gui.TextManipulator = function TextManipulator(session, inputMemberId, directStyleOp) {
-   var odtDocument = session.getOdtDocument();
++  var odtDocument = session.getOdtDocument(), FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT;
 +  function createOpRemoveSelection(selection) {
 +    var op = new ops.OpRemoveText;
 +    op.init({memberid:inputMemberId, position:selection.position, length:selection.length});
 +    return op
 +  }
 +  function toForwardSelection(selection) {
 +    if(selection.length < 0) {
 +      selection.position += selection.length;
 +      selection.length = -selection.length
 +    }
 +    return selection
 +  }
 +  this.enqueueParagraphSplittingOps = function() {
 +    var selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op, operations = [];
 +    if(selection.length > 0) {
 +      op = createOpRemoveSelection(selection);
 +      operations.push(op)
 +    }
 +    op = new ops.OpSplitParagraph;
 +    op.init({memberid:inputMemberId, position:selection.position});
 +    operations.push(op);
 +    session.enqueue(operations);
 +    return true
 +  };
++  function hasPositionInDirection(cursorNode, forward) {
++    var rootConstrainedFilter = new core.PositionFilterChain, iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootElement(cursorNode)), nextPosition = (forward ? iterator.nextPosition : iterator.previousPosition);
++    rootConstrainedFilter.addFilter("BaseFilter", odtDocument.getPositionFilter());
++    rootConstrainedFilter.addFilter("RootFilter", odtDocument.createRootFilter(inputMemberId));
++    iterator.setUnfilteredPosition(cursorNode, 0);
++    while(nextPosition()) {
++      if(rootConstrainedFilter.acceptPosition(iterator) === FILTER_ACCEPT) {
++        return true
++      }
++    }
++    return false
++  }
 +  this.removeTextByBackspaceKey = function() {
-     var selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op = null;
++    var cursor = odtDocument.getCursor(inputMemberId), selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op = null;
 +    if(selection.length === 0) {
-       if(selection.position > 0 && odtDocument.getPositionInTextNode(selection.position - 1)) {
++      if(hasPositionInDirection(cursor.getNode(), false)) {
 +        op = new ops.OpRemoveText;
 +        op.init({memberid:inputMemberId, position:selection.position - 1, length:1});
 +        session.enqueue([op])
 +      }
 +    }else {
 +      op = createOpRemoveSelection(selection);
 +      session.enqueue([op])
 +    }
 +    return op !== null
 +  };
 +  this.removeTextByDeleteKey = function() {
-     var selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op = null;
++    var cursor = odtDocument.getCursor(inputMemberId), selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op = null;
 +    if(selection.length === 0) {
-       if(odtDocument.getPositionInTextNode(selection.position + 1)) {
++      if(hasPositionInDirection(cursor.getNode(), true)) {
 +        op = new ops.OpRemoveText;
 +        op.init({memberid:inputMemberId, position:selection.position, length:1});
 +        session.enqueue([op])
 +      }
 +    }else {
 +      op = createOpRemoveSelection(selection);
 +      session.enqueue([op])
 +    }
 +    return op !== null
 +  };
 +  this.removeCurrentSelection = function() {
 +    var selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op;
 +    if(selection.length !== 0) {
 +      op = createOpRemoveSelection(selection);
 +      session.enqueue([op])
 +    }
 +    return true
 +  };
 +  function insertText(text) {
 +    var selection = toForwardSelection(odtDocument.getCursorSelection(inputMemberId)), op, stylingOp, operations = [];
 +    if(selection.length > 0) {
 +      op = createOpRemoveSelection(selection);
 +      operations.push(op)
 +    }
 +    op = new ops.OpInsertText;
 +    op.init({memberid:inputMemberId, position:selection.position, text:text});
 +    operations.push(op);
 +    if(directStyleOp) {
 +      stylingOp = directStyleOp(selection.position, text.length);
 +      if(stylingOp) {
 +        operations.push(stylingOp)
 +      }
 +    }
 +    session.enqueue(operations)
 +  }
 +  this.insertText = insertText
 +};
 +(function() {
 +  return gui.TextManipulator
 +})();
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");
 +runtime.loadClass("core.PositionFilter");
 +runtime.loadClass("ops.OpAddAnnotation");
 +runtime.loadClass("ops.OpRemoveAnnotation");
 +runtime.loadClass("gui.SelectionMover");
 +gui.AnnotationManager = function AnnotationManager(session, inputMemberId) {
-   var odtDocument = session.getOdtDocument(), baseFilter = odtDocument.getPositionFilter(), isAnnotatable = false, eventNotifier = new core.EventNotifier([gui.AnnotationManager.annotatableChanged]), officens = odf.Namespaces.officens, FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT;
++  var odtDocument = session.getOdtDocument(), isAnnotatable = false, eventNotifier = new core.EventNotifier([gui.AnnotationManager.annotatableChanged]), officens = odf.Namespaces.officens;
 +  function isWithinAnnotation(node, container) {
 +    while(node && node !== container) {
 +      if(node.namespaceURI === officens && node.localName === "annotation") {
 +        return true
 +      }
 +      node = node.parentNode
 +    }
 +    return false
 +  }
 +  function updatedCachedValues() {
 +    var cursor = odtDocument.getCursor(inputMemberId), cursorNode = cursor && cursor.getNode(), newIsAnnotatable = cursorNode && !isWithinAnnotation(cursorNode, odtDocument.getRootNode());
 +    if(newIsAnnotatable !== isAnnotatable) {
 +      isAnnotatable = newIsAnnotatable;
 +      eventNotifier.emit(gui.AnnotationManager.annotatableChanged, isAnnotatable)
 +    }
 +  }
 +  function onCursorAdded(cursor) {
 +    if(cursor.getMemberId() === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onCursorRemoved(memberId) {
 +    if(memberId === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
 +  function onCursorMoved(cursor) {
 +    if(cursor.getMemberId() === inputMemberId) {
 +      updatedCachedValues()
 +    }
 +  }
-   function getWalkableNodeLength(node) {
-     var length = 0, iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), inside = false;
-     iterator.setUnfilteredPosition(node, 0);
-     do {
-       inside = Boolean(node.compareDocumentPosition(iterator.container()) & Node.DOCUMENT_POSITION_CONTAINED_BY);
-       if(!inside && node !== iterator.container()) {
-         break
-       }
-       if(baseFilter.acceptPosition(iterator) === FILTER_ACCEPT) {
-         length += 1
-       }
-     }while(iterator.nextPosition());
-     return length
-   }
-   function getFirstWalkablePositionInNode(node) {
-     var position = 0, iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), watch = new core.LoopWatchDog(1E3), inside = false;
-     while(iterator.nextPosition()) {
-       watch.check();
-       inside = Boolean(node.compareDocumentPosition(iterator.container()) & Node.DOCUMENT_POSITION_CONTAINED_BY);
-       if(baseFilter.acceptPosition(iterator) === FILTER_ACCEPT) {
-         if(inside) {
-           break
-         }
-         position += 1
-       }
-     }
-     return position
-   }
 +  this.isAnnotatable = function() {
 +    return isAnnotatable
 +  };
 +  this.addAnnotation = function() {
 +    var op = new ops.OpAddAnnotation, selection = odtDocument.getCursorSelection(inputMemberId), length = selection.length, position = selection.position;
 +    if(!isAnnotatable) {
 +      return
 +    }
 +    position = length >= 0 ? position : position + length;
 +    length = Math.abs(length);
 +    op.init({memberid:inputMemberId, position:position, length:length, name:inputMemberId + Date.now()});
 +    session.enqueue([op])
 +  };
 +  this.removeAnnotation = function(annotationNode) {
-     var position, length, op, moveCursor;
-     position = getFirstWalkablePositionInNode(annotationNode);
-     length = getWalkableNodeLength(annotationNode);
++    var startStep, endStep, op, moveCursor;
++    startStep = odtDocument.convertDomPointToCursorStep(annotationNode, 0) + 1;
++    endStep = odtDocument.convertDomPointToCursorStep(annotationNode, annotationNode.childNodes.length);
 +    op = new ops.OpRemoveAnnotation;
-     op.init({memberid:inputMemberId, position:position, length:length});
++    op.init({memberid:inputMemberId, position:startStep, length:endStep - startStep});
 +    moveCursor = new ops.OpMoveCursor;
-     moveCursor.init({memberid:inputMemberId, position:position - 1, length:0});
++    moveCursor.init({memberid:inputMemberId, position:startStep > 0 ? startStep - 1 : startStep, length:0});
 +    session.enqueue([op, moveCursor])
 +  };
 +  this.subscribe = function(eventid, cb) {
 +    eventNotifier.subscribe(eventid, cb)
 +  };
 +  this.unsubscribe = function(eventid, cb) {
 +    eventNotifier.unsubscribe(eventid, cb)
 +  };
 +  this.destroy = function(callback) {
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +    callback()
 +  };
 +  function init() {
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +    updatedCachedValues()
 +  }
 +  init()
 +};
 +gui.AnnotationManager.annotatableChanged = "annotatable/changed";
 +(function() {
 +  return gui.AnnotationManager
 +})();
 +gui.EventManager = function EventManager(odtDocument) {
 +  var canvasElement = odtDocument.getOdfCanvas().getElement(), window = runtime.getWindow(), bindToDirectHandler = {"beforecut":true, "beforepaste":true}, bindToWindow = {"mousedown":true, "mouseup":true};
 +  function WindowScrollState(window) {
 +    var x = window.scrollX, y = window.scrollY;
 +    this.restore = function() {
 +      if(window.scrollX !== x || window.scrollY !== y) {
 +        window.scrollTo(x, y)
 +      }
 +    }
 +  }
 +  function ElementScrollState(element) {
 +    var top = element.scrollTop, left = element.scrollLeft;
 +    this.restore = function() {
 +      if(element.scrollTop !== top || element.scrollLeft !== left) {
 +        element.scrollTop = top;
 +        element.scrollLeft = left
 +      }
 +    }
 +  }
 +  function listenEvent(eventTarget, eventType, eventHandler) {
 +    var onVariant = "on" + eventType, bound = false;
 +    if(eventTarget.attachEvent) {
 +      bound = eventTarget.attachEvent(onVariant, eventHandler)
 +    }
 +    if(!bound && eventTarget.addEventListener) {
 +      eventTarget.addEventListener(eventType, eventHandler, false);
 +      bound = true
 +    }
 +    if((!bound || bindToDirectHandler[eventType]) && eventTarget.hasOwnProperty(onVariant)) {
 +      eventTarget[onVariant] = eventHandler
 +    }
 +  }
 +  function removeEvent(eventTarget, eventType, eventHandler) {
 +    var onVariant = "on" + eventType;
 +    if(eventTarget.detachEvent) {
 +      eventTarget.detachEvent(onVariant, eventHandler)
 +    }
 +    if(eventTarget.removeEventListener) {
 +      eventTarget.removeEventListener(eventType, eventHandler, false)
 +    }
 +    if(eventTarget[onVariant] === eventHandler) {
 +      eventTarget[onVariant] = null
 +    }
 +  }
 +  this.subscribe = function(eventName, handler) {
 +    var element = canvasElement;
 +    if(bindToWindow[eventName] && window) {
 +      element = window
 +    }
 +    listenEvent(element, eventName, handler)
 +  };
 +  this.unsubscribe = function(eventName, handler) {
 +    var element = canvasElement;
 +    if(bindToWindow[eventName] && window) {
 +      element = window
 +    }
 +    removeEvent(element, eventName, handler)
 +  };
 +  function hasFocus() {
 +    var activeElement = odtDocument.getDOM().activeElement;
 +    return activeElement === canvasElement
 +  }
 +  this.hasFocus = hasFocus;
 +  function findScrollableParent(element) {
 +    while(element && (!element.scrollTop && !element.scrollLeft)) {
 +      element = (element.parentNode)
 +    }
 +    if(element) {
 +      return new ElementScrollState(element)
 +    }
 +    if(window) {
 +      return new WindowScrollState(window)
 +    }
 +    return null
 +  }
 +  this.focus = function() {
 +    var scrollParent;
 +    if(!hasFocus()) {
 +      scrollParent = findScrollableParent(canvasElement);
 +      canvasElement.focus();
 +      if(scrollParent) {
 +        scrollParent.restore()
 +      }
 +    }
 +  }
 +};
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("core.Async");
 +runtime.loadClass("core.ScheduledTask");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("odf.ObjectNameGenerator");
 +runtime.loadClass("ops.OdtCursor");
 +runtime.loadClass("ops.OpAddCursor");
 +runtime.loadClass("ops.OpRemoveCursor");
 +runtime.loadClass("gui.Clipboard");
 +runtime.loadClass("gui.DirectTextStyler");
 +runtime.loadClass("gui.DirectParagraphStyler");
 +runtime.loadClass("gui.KeyboardHandler");
 +runtime.loadClass("gui.ImageManager");
 +runtime.loadClass("gui.ImageSelector");
 +runtime.loadClass("gui.TextManipulator");
 +runtime.loadClass("gui.AnnotationManager");
 +runtime.loadClass("gui.EventManager");
++runtime.loadClass("gui.PlainTextPasteboard");
 +gui.SessionController = function() {
 +  var FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT;
 +  gui.SessionController = function SessionController(session, inputMemberId, shadowCursor, args) {
 +    var window = (runtime.getWindow()), odtDocument = session.getOdtDocument(), async = new core.Async, domUtils = new core.DomUtils, odfUtils = new odf.OdfUtils, clipboard = new gui.Clipboard, keyDownHandler = new gui.KeyboardHandler, keyPressHandler = new gui.KeyboardHandler, keyboardMovementsFilter = new core.PositionFilterChain, baseFilter = odtDocument.getPositionFilter(), clickStartedWithinContainer = false, objectNameGenerator = new odf.ObjectNameGenerator(odtDocument.getOdfCanva [...]
-     inputMemberId), isMouseMoved = false, mouseDownRootFilter = null, undoManager = null, eventManager = new gui.EventManager(odtDocument), annotationManager = new gui.AnnotationManager(session, inputMemberId), directTextStyler = args && args.directStylingEnabled ? new gui.DirectTextStyler(session, inputMemberId) : null, directParagraphStyler = args && args.directStylingEnabled ? new gui.DirectParagraphStyler(session, inputMemberId, objectNameGenerator) : null, createCursorStyleOp = (di [...]
-     directTextStyler.createCursorStyleOp), textManipulator = new gui.TextManipulator(session, inputMemberId, createCursorStyleOp), imageManager = new gui.ImageManager(session, inputMemberId, objectNameGenerator), imageSelector = new gui.ImageSelector(odtDocument.getOdfCanvas()), shadowCursorIterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), drawShadowCursorTask;
++    inputMemberId), isMouseMoved = false, mouseDownRootFilter = null, undoManager = null, eventManager = new gui.EventManager(odtDocument), annotationManager = new gui.AnnotationManager(session, inputMemberId), directTextStyler = new gui.DirectTextStyler(session, inputMemberId), directParagraphStyler = args && args.directParagraphStylingEnabled ? new gui.DirectParagraphStyler(session, inputMemberId, objectNameGenerator) : null, createCursorStyleOp = (directTextStyler.createCursorStyleOp [...]
++    new gui.TextManipulator(session, inputMemberId, createCursorStyleOp), imageManager = new gui.ImageManager(session, inputMemberId, objectNameGenerator), imageSelector = new gui.ImageSelector(odtDocument.getOdfCanvas()), shadowCursorIterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), drawShadowCursorTask, pasteHandler = new gui.PlainTextPasteboard(odtDocument, inputMemberId);
 +    runtime.assert(window !== null, "Expected to be run in an environment which has a global window, like a browser.");
 +    keyboardMovementsFilter.addFilter("BaseFilter", baseFilter);
 +    keyboardMovementsFilter.addFilter("RootFilter", odtDocument.createRootFilter(inputMemberId));
 +    function getTarget(e) {
 +      return e.target || e.srcElement
 +    }
 +    function cancelEvent(event) {
 +      if(event.preventDefault) {
 +        event.preventDefault()
 +      }else {
 +        event.returnValue = false
 +      }
 +    }
 +    function dummyHandler(e) {
 +      cancelEvent(e)
 +    }
 +    function createOpMoveCursor(position, length, selectionType) {
 +      var op = new ops.OpMoveCursor;
 +      op.init({memberid:inputMemberId, position:position, length:length || 0, selectionType:selectionType});
 +      return op
 +    }
 +    function caretPositionFromPoint(x, y) {
 +      var doc = odtDocument.getDOM(), result;
 +      if(doc.caretRangeFromPoint) {
 +        result = doc.caretRangeFromPoint(x, y);
 +        return{container:result.startContainer, offset:result.startOffset}
 +      }
 +      if(doc.caretPositionFromPoint) {
 +        result = doc.caretPositionFromPoint(x, y);
 +        return{container:result.offsetNode, offset:result.offset}
 +      }
 +      return null
 +    }
-     function findClosestPosition(node) {
-       var canvasElement = odtDocument.getOdfCanvas().getElement(), newNode = odtDocument.getRootNode(), newOffset = 0, beforeCanvas, iterator;
-       beforeCanvas = canvasElement.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_PRECEDING;
-       if(!beforeCanvas) {
-         iterator = gui.SelectionMover.createPositionIterator(newNode);
-         iterator.moveToEnd();
-         newNode = iterator.container();
-         newOffset = iterator.unfilteredDomOffset()
-       }
-       return{node:newNode, offset:newOffset}
-     }
 +    function expandToWordBoundaries(selection) {
 +      var alphaNumeric = /[A-Za-z0-9]/, iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), isForwardSelection = domUtils.comparePoints(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset) > 0, startPoint, endPoint, currentNode, c;
 +      if(isForwardSelection) {
 +        startPoint = {node:selection.anchorNode, offset:selection.anchorOffset};
 +        endPoint = {node:selection.focusNode, offset:selection.focusOffset}
 +      }else {
 +        startPoint = {node:selection.focusNode, offset:selection.focusOffset};
 +        endPoint = {node:selection.anchorNode, offset:selection.anchorOffset}
 +      }
 +      iterator.setUnfilteredPosition(startPoint.node, startPoint.offset);
 +      while(iterator.previousPosition()) {
 +        currentNode = iterator.getCurrentNode();
 +        if(currentNode.nodeType === Node.TEXT_NODE) {
 +          c = currentNode.data[iterator.unfilteredDomOffset()];
 +          if(!alphaNumeric.test(c)) {
 +            break
 +          }
 +        }else {
 +          if(!odfUtils.isTextSpan(currentNode)) {
 +            break
 +          }
 +        }
 +        startPoint.node = iterator.container();
 +        startPoint.offset = iterator.unfilteredDomOffset()
 +      }
 +      iterator.setUnfilteredPosition(endPoint.node, endPoint.offset);
 +      do {
 +        currentNode = iterator.getCurrentNode();
 +        if(currentNode.nodeType === Node.TEXT_NODE) {
 +          c = currentNode.data[iterator.unfilteredDomOffset()];
 +          if(!alphaNumeric.test(c)) {
 +            break
 +          }
 +        }else {
 +          if(!odfUtils.isTextSpan(currentNode)) {
 +            break
 +          }
 +        }
 +      }while(iterator.nextPosition());
 +      endPoint.node = iterator.container();
 +      endPoint.offset = iterator.unfilteredDomOffset();
 +      if(isForwardSelection) {
 +        selection.anchorNode = startPoint.node;
 +        selection.anchorOffset = startPoint.offset;
 +        selection.focusNode = endPoint.node;
 +        selection.focusOffset = endPoint.offset
 +      }else {
 +        selection.focusNode = startPoint.node;
 +        selection.focusOffset = startPoint.offset;
 +        selection.anchorNode = endPoint.node;
 +        selection.anchorOffset = endPoint.offset
 +      }
 +    }
 +    function expandToParagraphBoundaries(selection) {
 +      var anchorParagraph = odtDocument.getParagraphElement(selection.anchorNode), focusParagraph = odtDocument.getParagraphElement(selection.focusNode);
 +      if(anchorParagraph) {
 +        selection.anchorNode = anchorParagraph;
 +        selection.anchorOffset = 0
 +      }
 +      if(focusParagraph) {
 +        selection.focusNode = focusParagraph;
 +        selection.focusOffset = focusParagraph.childNodes.length
 +      }
 +    }
 +    function selectImage(frameNode) {
 +      var stepsToAnchor = odtDocument.getDistanceFromCursor(inputMemberId, frameNode, 0), stepsToFocus = stepsToAnchor !== null ? stepsToAnchor + 1 : null, oldPosition, op;
 +      if(stepsToFocus || stepsToAnchor) {
 +        oldPosition = odtDocument.getCursorPosition(inputMemberId);
 +        op = createOpMoveCursor(oldPosition + stepsToAnchor, stepsToFocus - stepsToAnchor, ops.OdtCursor.RegionSelection);
 +        session.enqueue([op])
 +      }
 +      eventManager.focus()
 +    }
 +    function selectRange(selection, capturedDetails) {
-       var canvasElement = odtDocument.getOdfCanvas().getElement(), validSelection, clickCount = capturedDetails.detail, caretPos, anchorNodeInsideCanvas, focusNodeInsideCanvas, position, stepsToAnchor, stepsToFocus, oldPosition, op;
++      var canvasElement = odtDocument.getOdfCanvas().getElement(), validSelection, clickCount = capturedDetails.detail, caretPos, anchorNodeInsideCanvas, focusNodeInsideCanvas, existingSelection, newSelection, op;
 +      if(!selection) {
 +        return
 +      }
 +      if(!selection.anchorNode && !selection.focusNode) {
 +        caretPos = caretPositionFromPoint(capturedDetails.clientX, capturedDetails.clientY);
 +        if(!caretPos) {
 +          return
 +        }
 +        selection.anchorNode = (caretPos.container);
 +        selection.anchorOffset = caretPos.offset;
 +        selection.focusNode = selection.anchorNode;
 +        selection.focusOffset = selection.anchorOffset
 +      }
 +      runtime.assert(selection.anchorNode !== null && selection.focusNode !== null, "anchorNode or focusNode is null");
 +      validSelection = (selection);
 +      anchorNodeInsideCanvas = domUtils.containsNode(canvasElement, validSelection.anchorNode);
 +      focusNodeInsideCanvas = domUtils.containsNode(canvasElement, validSelection.focusNode);
 +      if(!anchorNodeInsideCanvas && !focusNodeInsideCanvas) {
 +        return
 +      }
-       if(!anchorNodeInsideCanvas) {
-         position = findClosestPosition(validSelection.anchorNode);
-         validSelection.anchorNode = position.node;
-         validSelection.anchorOffset = position.offset
-       }
-       if(!focusNodeInsideCanvas) {
-         position = findClosestPosition(validSelection.focusNode);
-         validSelection.focusNode = position.node;
-         validSelection.focusOffset = position.offset
-       }
-       if(clickCount === 2) {
-         expandToWordBoundaries(validSelection)
-       }else {
-         if(clickCount === 3) {
-           expandToParagraphBoundaries(validSelection)
++      if(anchorNodeInsideCanvas && focusNodeInsideCanvas) {
++        if(clickCount === 2) {
++          expandToWordBoundaries(validSelection)
++        }else {
++          if(clickCount >= 3) {
++            expandToParagraphBoundaries(validSelection)
++          }
 +        }
 +      }
-       stepsToAnchor = odtDocument.getDistanceFromCursor(inputMemberId, validSelection.anchorNode, validSelection.anchorOffset);
-       if(validSelection.focusNode === validSelection.anchorNode && validSelection.focusOffset === validSelection.anchorOffset) {
-         stepsToFocus = stepsToAnchor
-       }else {
-         stepsToFocus = odtDocument.getDistanceFromCursor(inputMemberId, validSelection.focusNode, validSelection.focusOffset)
-       }
-       if(stepsToFocus || stepsToAnchor) {
-         oldPosition = odtDocument.getCursorPosition(inputMemberId);
-         op = createOpMoveCursor(oldPosition + stepsToAnchor, stepsToFocus - stepsToAnchor, ops.OdtCursor.RangeSelection);
++      newSelection = odtDocument.convertDomToCursorRange(validSelection.anchorNode, validSelection.anchorOffset, validSelection.focusNode, validSelection.focusOffset);
++      existingSelection = odtDocument.getCursorSelection(inputMemberId);
++      if(newSelection.position !== existingSelection.position || newSelection.length !== existingSelection.length) {
++        op = createOpMoveCursor(newSelection.position, newSelection.length, ops.OdtCursor.RangeSelection);
 +        session.enqueue([op])
 +      }
 +      eventManager.focus()
 +    }
++    this.selectRange = selectRange;
 +    function extendCursorByAdjustment(lengthAdjust) {
 +      var selection = odtDocument.getCursorSelection(inputMemberId), stepCounter = odtDocument.getCursor(inputMemberId).getStepCounter(), newLength;
 +      if(lengthAdjust !== 0) {
 +        lengthAdjust = lengthAdjust > 0 ? stepCounter.convertForwardStepsBetweenFilters(lengthAdjust, keyboardMovementsFilter, baseFilter) : -stepCounter.convertBackwardStepsBetweenFilters(-lengthAdjust, keyboardMovementsFilter, baseFilter);
 +        newLength = selection.length + lengthAdjust;
 +        session.enqueue([createOpMoveCursor(selection.position, newLength)])
 +      }
 +    }
 +    function moveCursorByAdjustment(positionAdjust) {
 +      var position = odtDocument.getCursorPosition(inputMemberId), stepCounter = odtDocument.getCursor(inputMemberId).getStepCounter();
 +      if(positionAdjust !== 0) {
 +        positionAdjust = positionAdjust > 0 ? stepCounter.convertForwardStepsBetweenFilters(positionAdjust, keyboardMovementsFilter, baseFilter) : -stepCounter.convertBackwardStepsBetweenFilters(-positionAdjust, keyboardMovementsFilter, baseFilter);
 +        position = position + positionAdjust;
 +        session.enqueue([createOpMoveCursor(position, 0)])
 +      }
 +    }
 +    function moveCursorToLeft() {
 +      moveCursorByAdjustment(-1);
 +      return true
 +    }
++    this.moveCursorToLeft = moveCursorToLeft;
 +    function moveCursorToRight() {
 +      moveCursorByAdjustment(1);
 +      return true
 +    }
 +    function extendSelectionToLeft() {
 +      extendCursorByAdjustment(-1);
 +      return true
 +    }
 +    function extendSelectionToRight() {
 +      extendCursorByAdjustment(1);
 +      return true
 +    }
 +    function moveCursorByLine(direction, extend) {
 +      var paragraphNode = odtDocument.getParagraphElement(odtDocument.getCursor(inputMemberId).getNode()), steps;
 +      runtime.assert(Boolean(paragraphNode), "SessionController: Cursor outside paragraph");
 +      steps = odtDocument.getCursor(inputMemberId).getStepCounter().countLinesSteps(direction, keyboardMovementsFilter);
 +      if(extend) {
 +        extendCursorByAdjustment(steps)
 +      }else {
 +        moveCursorByAdjustment(steps)
 +      }
 +    }
 +    function moveCursorUp() {
 +      moveCursorByLine(-1, false);
 +      return true
 +    }
 +    function moveCursorDown() {
 +      moveCursorByLine(1, false);
 +      return true
 +    }
 +    function extendSelectionUp() {
 +      moveCursorByLine(-1, true);
 +      return true
 +    }
 +    function extendSelectionDown() {
 +      moveCursorByLine(1, true);
 +      return true
 +    }
 +    function moveCursorToLineBoundary(direction, extend) {
 +      var steps = odtDocument.getCursor(inputMemberId).getStepCounter().countStepsToLineBoundary(direction, keyboardMovementsFilter);
 +      if(extend) {
 +        extendCursorByAdjustment(steps)
 +      }else {
 +        moveCursorByAdjustment(steps)
 +      }
 +    }
 +    function moveCursorToLineStart() {
 +      moveCursorToLineBoundary(-1, false);
 +      return true
 +    }
 +    function moveCursorToLineEnd() {
 +      moveCursorToLineBoundary(1, false);
 +      return true
 +    }
 +    function extendSelectionToLineStart() {
 +      moveCursorToLineBoundary(-1, true);
 +      return true
 +    }
 +    function extendSelectionToLineEnd() {
 +      moveCursorToLineBoundary(1, true);
 +      return true
 +    }
 +    function extendSelectionToParagraphStart() {
 +      var paragraphNode = odtDocument.getParagraphElement(odtDocument.getCursor(inputMemberId).getNode()), iterator, node, steps;
 +      runtime.assert(Boolean(paragraphNode), "SessionController: Cursor outside paragraph");
 +      steps = odtDocument.getDistanceFromCursor(inputMemberId, paragraphNode, 0);
 +      iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode());
 +      iterator.setUnfilteredPosition(paragraphNode, 0);
 +      while(steps === 0 && iterator.previousPosition()) {
 +        node = iterator.getCurrentNode();
 +        if(odfUtils.isParagraph(node)) {
 +          steps = odtDocument.getDistanceFromCursor(inputMemberId, node, 0)
 +        }
 +      }
 +      extendCursorByAdjustment(steps);
 +      return true
 +    }
 +    function extendSelectionToParagraphEnd() {
 +      var paragraphNode = odtDocument.getParagraphElement(odtDocument.getCursor(inputMemberId).getNode()), iterator, node, steps;
 +      runtime.assert(Boolean(paragraphNode), "SessionController: Cursor outside paragraph");
 +      iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode());
 +      iterator.moveToEndOfNode(paragraphNode);
 +      steps = odtDocument.getDistanceFromCursor(inputMemberId, iterator.container(), iterator.unfilteredDomOffset());
 +      while(steps === 0 && iterator.nextPosition()) {
 +        node = iterator.getCurrentNode();
 +        if(odfUtils.isParagraph(node)) {
 +          iterator.moveToEndOfNode(node);
 +          steps = odtDocument.getDistanceFromCursor(inputMemberId, iterator.container(), iterator.unfilteredDomOffset())
 +        }
 +      }
 +      extendCursorByAdjustment(steps);
 +      return true
 +    }
 +    function moveCursorToDocumentBoundary(direction, extend) {
 +      var iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), steps;
 +      if(direction > 0) {
 +        iterator.moveToEnd()
 +      }
 +      steps = odtDocument.getDistanceFromCursor(inputMemberId, iterator.container(), iterator.unfilteredDomOffset());
 +      if(extend) {
 +        extendCursorByAdjustment(steps)
 +      }else {
 +        moveCursorByAdjustment(steps)
 +      }
 +    }
++    this.moveCursorToDocumentBoundary = moveCursorToDocumentBoundary;
 +    function moveCursorToDocumentStart() {
 +      moveCursorToDocumentBoundary(-1, false);
 +      return true
 +    }
 +    function moveCursorToDocumentEnd() {
 +      moveCursorToDocumentBoundary(1, false);
 +      return true
 +    }
 +    function extendSelectionToDocumentStart() {
 +      moveCursorToDocumentBoundary(-1, true);
 +      return true
 +    }
 +    function extendSelectionToDocumentEnd() {
 +      moveCursorToDocumentBoundary(1, true);
 +      return true
 +    }
 +    function extendSelectionToEntireDocument() {
-       var iterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), steps;
-       steps = -odtDocument.getDistanceFromCursor(inputMemberId, iterator.container(), iterator.unfilteredDomOffset());
-       iterator.moveToEnd();
-       steps += odtDocument.getDistanceFromCursor(inputMemberId, iterator.container(), iterator.unfilteredDomOffset());
-       session.enqueue([createOpMoveCursor(0, steps)]);
++      var rootNode = odtDocument.getRootNode(), lastWalkableStep = odtDocument.convertDomPointToCursorStep(rootNode, rootNode.childNodes.length);
++      session.enqueue([createOpMoveCursor(0, lastWalkableStep)]);
 +      return true
 +    }
++    this.extendSelectionToEntireDocument = extendSelectionToEntireDocument;
 +    function maintainCursorSelection() {
 +      var cursor = odtDocument.getCursor(inputMemberId), selection = window.getSelection(), imageElement, range;
 +      if(cursor) {
 +        imageSelector.clearSelection();
 +        if(cursor.getSelectionType() === ops.OdtCursor.RegionSelection) {
 +          imageElement = odfUtils.getImageElements(cursor.getSelectedRange())[0];
 +          if(imageElement) {
 +            imageSelector.select((imageElement.parentNode))
 +          }
 +        }
 +        if(eventManager.hasFocus()) {
 +          range = cursor.getSelectedRange();
 +          if(selection.extend) {
 +            if(cursor.hasForwardSelection()) {
 +              selection.collapse(range.startContainer, range.startOffset);
 +              selection.extend(range.endContainer, range.endOffset)
 +            }else {
 +              selection.collapse(range.endContainer, range.endOffset);
 +              selection.extend(range.startContainer, range.startOffset)
 +            }
 +          }else {
 +            selection.removeAllRanges();
 +            selection.addRange(range.cloneRange())
 +          }
 +        }
 +      }else {
 +        imageSelector.clearSelection()
 +      }
 +    }
 +    function delayedMaintainCursor() {
 +      runtime.setTimeout(maintainCursorSelection, 0)
 +    }
 +    function stringFromKeyPress(event) {
 +      if(event.which === null || event.which === undefined) {
 +        return String.fromCharCode(event.keyCode)
 +      }
 +      if(event.which !== 0 && event.charCode !== 0) {
 +        return String.fromCharCode(event.which)
 +      }
 +      return null
 +    }
 +    function handleCut(e) {
 +      var cursor = odtDocument.getCursor(inputMemberId), selectedRange = cursor.getSelectedRange();
 +      if(selectedRange.collapsed) {
 +        return
 +      }
 +      if(clipboard.setDataFromRange(e, cursor.getSelectedRange())) {
 +        textManipulator.removeCurrentSelection()
 +      }else {
 +        runtime.log("Cut operation failed")
 +      }
 +    }
 +    function handleBeforeCut() {
 +      var cursor = odtDocument.getCursor(inputMemberId), selectedRange = cursor.getSelectedRange();
 +      return selectedRange.collapsed !== false
 +    }
 +    function handleCopy(e) {
 +      var cursor = odtDocument.getCursor(inputMemberId), selectedRange = cursor.getSelectedRange();
 +      if(selectedRange.collapsed) {
 +        return
 +      }
 +      if(!clipboard.setDataFromRange(e, cursor.getSelectedRange())) {
 +        runtime.log("Cut operation failed")
 +      }
 +    }
 +    function handlePaste(e) {
 +      var plainText;
 +      if(window.clipboardData && window.clipboardData.getData) {
 +        plainText = window.clipboardData.getData("Text")
 +      }else {
 +        if(e.clipboardData && e.clipboardData.getData) {
 +          plainText = e.clipboardData.getData("text/plain")
 +        }
 +      }
 +      if(plainText) {
-         textManipulator.insertText(plainText);
++        textManipulator.removeCurrentSelection();
++        session.enqueue(pasteHandler.createPasteOps(plainText));
 +        cancelEvent(e)
 +      }
 +    }
 +    function handleBeforePaste() {
 +      return false
 +    }
 +    function updateUndoStack(op) {
 +      if(undoManager) {
 +        undoManager.onOperationExecuted(op)
 +      }
 +    }
 +    function forwardUndoStackChange(e) {
 +      odtDocument.emit(ops.OdtDocument.signalUndoStackChanged, e)
 +    }
 +    function undo() {
 +      if(undoManager) {
 +        undoManager.moveBackward(1);
 +        maintainCursorSelection();
 +        return true
 +      }
 +      return false
 +    }
 +    function redo() {
 +      if(undoManager) {
 +        undoManager.moveForward(1);
 +        maintainCursorSelection();
 +        return true
 +      }
 +      return false
 +    }
 +    function filterMouseClicks(e) {
 +      var target = getTarget(e);
 +      clickStartedWithinContainer = target && domUtils.containsNode(odtDocument.getOdfCanvas().getElement(), target);
 +      if(clickStartedWithinContainer) {
 +        isMouseMoved = false;
 +        mouseDownRootFilter = odtDocument.createRootFilter(target)
 +      }
 +    }
 +    function cursorToSelection(cursor) {
 +      var range = cursor.getSelectedRange();
 +      if(cursor.hasForwardSelection()) {
 +        return{anchorNode:range.startContainer, anchorOffset:range.startOffset, focusNode:range.endContainer, focusOffset:range.endOffset}
 +      }
 +      return{anchorNode:range.endContainer, anchorOffset:range.endOffset, focusNode:range.startContainer, focusOffset:range.startOffset}
 +    }
 +    function mutableSelection(selection) {
 +      if(selection) {
 +        return{anchorNode:selection.anchorNode, anchorOffset:selection.anchorOffset, focusNode:selection.focusNode, focusOffset:selection.focusOffset}
 +      }
 +      return null
 +    }
 +    function handleMouseClickEvent(event) {
 +      var target = getTarget(event), eventDetails = {detail:event.detail, clientX:event.clientX, clientY:event.clientY, target:target};
 +      drawShadowCursorTask.processRequests();
 +      if(odfUtils.isImage(target) && odfUtils.isCharacterFrame(target.parentNode)) {
 +        selectImage(target.parentNode)
 +      }else {
 +        if(clickStartedWithinContainer && !imageSelector.isSelectorElement(target)) {
 +          if(isMouseMoved) {
 +            selectRange(cursorToSelection(shadowCursor), event)
 +          }else {
 +            runtime.setTimeout(function() {
 +              selectRange(mutableSelection(window.getSelection()), eventDetails)
 +            }, 0)
 +          }
 +        }
 +      }
 +      clickStartedWithinContainer = false;
 +      isMouseMoved = false
 +    }
 +    function handleContextMenu(e) {
 +      handleMouseClickEvent(e)
 +    }
 +    function handleMouseUp(event) {
 +      var target = getTarget(event), annotationNode = null;
 +      if(target.className === "annotationRemoveButton") {
 +        annotationNode = domUtils.getElementsByTagNameNS(target.parentNode, odf.Namespaces.officens, "annotation")[0];
 +        annotationManager.removeAnnotation(annotationNode)
 +      }else {
 +        handleMouseClickEvent(event)
 +      }
 +    }
 +    function updateShadowCursor() {
 +      var selection = window.getSelection(), selectionRange, isForwardSelection;
 +      if(clickStartedWithinContainer && selection.rangeCount > 0) {
 +        isMouseMoved = true;
 +        imageSelector.clearSelection();
 +        shadowCursorIterator.setUnfilteredPosition((selection.focusNode), selection.focusOffset);
 +        if(mouseDownRootFilter.acceptPosition(shadowCursorIterator) === FILTER_ACCEPT) {
 +          selectionRange = selection.getRangeAt(0).cloneRange();
 +          isForwardSelection = selection.anchorNode === selectionRange.startContainer && selection.anchorOffset === selectionRange.startOffset;
 +          shadowCursor.setSelectedRange(selectionRange, isForwardSelection);
 +          odtDocument.emit(ops.OdtDocument.signalCursorMoved, shadowCursor)
 +        }
 +      }
 +    }
 +    this.startEditing = function() {
 +      var op;
 +      odtDocument.getOdfCanvas().getElement().classList.add("virtualSelections");
 +      eventManager.subscribe("keydown", keyDownHandler.handleEvent);
 +      eventManager.subscribe("keypress", keyPressHandler.handleEvent);
 +      eventManager.subscribe("keyup", dummyHandler);
 +      eventManager.subscribe("beforecut", handleBeforeCut);
 +      eventManager.subscribe("cut", handleCut);
 +      eventManager.subscribe("copy", handleCopy);
 +      eventManager.subscribe("beforepaste", handleBeforePaste);
 +      eventManager.subscribe("paste", handlePaste);
 +      eventManager.subscribe("mousedown", filterMouseClicks);
 +      eventManager.subscribe("mousemove", drawShadowCursorTask.trigger);
 +      eventManager.subscribe("mouseup", handleMouseUp);
 +      eventManager.subscribe("contextmenu", handleContextMenu);
 +      eventManager.subscribe("focus", delayedMaintainCursor);
 +      odtDocument.subscribe(ops.OdtDocument.signalOperationExecuted, maintainCursorSelection);
 +      odtDocument.subscribe(ops.OdtDocument.signalOperationExecuted, updateUndoStack);
 +      op = new ops.OpAddCursor;
 +      op.init({memberid:inputMemberId});
 +      session.enqueue([op]);
 +      if(undoManager) {
 +        undoManager.saveInitialState()
 +      }
 +    };
 +    this.endEditing = function() {
 +      var op;
 +      op = new ops.OpRemoveCursor;
 +      op.init({memberid:inputMemberId});
 +      session.enqueue([op]);
 +      if(undoManager) {
 +        undoManager.resetInitialState()
 +      }
 +      odtDocument.unsubscribe(ops.OdtDocument.signalOperationExecuted, updateUndoStack);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalOperationExecuted, maintainCursorSelection);
 +      eventManager.unsubscribe("keydown", keyDownHandler.handleEvent);
 +      eventManager.unsubscribe("keypress", keyPressHandler.handleEvent);
 +      eventManager.unsubscribe("keyup", dummyHandler);
 +      eventManager.unsubscribe("cut", handleCut);
 +      eventManager.unsubscribe("beforecut", handleBeforeCut);
 +      eventManager.unsubscribe("copy", handleCopy);
 +      eventManager.unsubscribe("paste", handlePaste);
 +      eventManager.unsubscribe("beforepaste", handleBeforePaste);
 +      eventManager.unsubscribe("mousemove", drawShadowCursorTask.trigger);
 +      eventManager.unsubscribe("mousedown", filterMouseClicks);
 +      eventManager.unsubscribe("mouseup", handleMouseUp);
 +      eventManager.unsubscribe("contextmenu", handleContextMenu);
 +      eventManager.unsubscribe("focus", delayedMaintainCursor);
 +      odtDocument.getOdfCanvas().getElement().classList.remove("virtualSelections")
 +    };
 +    this.getInputMemberId = function() {
 +      return inputMemberId
 +    };
 +    this.getSession = function() {
 +      return session
 +    };
 +    this.setUndoManager = function(manager) {
 +      if(undoManager) {
 +        undoManager.unsubscribe(gui.UndoManager.signalUndoStackChanged, forwardUndoStackChange)
 +      }
 +      undoManager = manager;
 +      if(undoManager) {
 +        undoManager.setOdtDocument(odtDocument);
 +        undoManager.setPlaybackFunction(function(op) {
 +          op.execute(odtDocument)
 +        });
 +        undoManager.subscribe(gui.UndoManager.signalUndoStackChanged, forwardUndoStackChange)
 +      }
 +    };
 +    this.getUndoManager = function() {
 +      return undoManager
 +    };
 +    this.getAnnotationManager = function() {
 +      return annotationManager
 +    };
 +    this.getDirectTextStyler = function() {
 +      return directTextStyler
 +    };
 +    this.getDirectParagraphStyler = function() {
 +      return directParagraphStyler
 +    };
 +    this.getImageManager = function() {
 +      return imageManager
 +    };
 +    this.getTextManipulator = function() {
 +      return textManipulator
 +    };
 +    this.getEventManager = function() {
 +      return eventManager
 +    };
 +    this.getKeyboardHandlers = function() {
 +      return{keydown:keyDownHandler, keypress:keyPressHandler}
 +    };
 +    this.destroy = function(callback) {
-       var destroyCallbacks = [drawShadowCursorTask.destroy];
-       if(directTextStyler) {
-         destroyCallbacks.push(directTextStyler.destroy)
-       }
++      var destroyCallbacks = [drawShadowCursorTask.destroy, directTextStyler.destroy];
 +      if(directParagraphStyler) {
 +        destroyCallbacks.push(directParagraphStyler.destroy)
 +      }
 +      async.destroyAll(destroyCallbacks, callback)
 +    };
 +    function returnTrue(fn) {
 +      return function() {
 +        fn();
 +        return true
 +      }
 +    }
 +    function rangeSelectionOnly(fn) {
 +      return function(e) {
 +        var selectionType = odtDocument.getCursor(inputMemberId).getSelectionType();
 +        if(selectionType === ops.OdtCursor.RangeSelection) {
 +          return fn(e)
 +        }
 +        return true
 +      }
 +    }
 +    function init() {
 +      var isMacOS = window.navigator.appVersion.toLowerCase().indexOf("mac") !== -1, modifier = gui.KeyboardHandler.Modifier, keyCode = gui.KeyboardHandler.KeyCode;
 +      drawShadowCursorTask = new core.ScheduledTask(updateShadowCursor, 0);
 +      keyDownHandler.bind(keyCode.Tab, modifier.None, rangeSelectionOnly(function() {
 +        textManipulator.insertText("\t");
 +        return true
 +      }));
 +      keyDownHandler.bind(keyCode.Left, modifier.None, rangeSelectionOnly(moveCursorToLeft));
 +      keyDownHandler.bind(keyCode.Right, modifier.None, rangeSelectionOnly(moveCursorToRight));
 +      keyDownHandler.bind(keyCode.Up, modifier.None, rangeSelectionOnly(moveCursorUp));
 +      keyDownHandler.bind(keyCode.Down, modifier.None, rangeSelectionOnly(moveCursorDown));
 +      keyDownHandler.bind(keyCode.Backspace, modifier.None, returnTrue(textManipulator.removeTextByBackspaceKey));
 +      keyDownHandler.bind(keyCode.Delete, modifier.None, textManipulator.removeTextByDeleteKey);
 +      keyDownHandler.bind(keyCode.Left, modifier.Shift, rangeSelectionOnly(extendSelectionToLeft));
 +      keyDownHandler.bind(keyCode.Right, modifier.Shift, rangeSelectionOnly(extendSelectionToRight));
 +      keyDownHandler.bind(keyCode.Up, modifier.Shift, rangeSelectionOnly(extendSelectionUp));
 +      keyDownHandler.bind(keyCode.Down, modifier.Shift, rangeSelectionOnly(extendSelectionDown));
 +      keyDownHandler.bind(keyCode.Home, modifier.None, rangeSelectionOnly(moveCursorToLineStart));
 +      keyDownHandler.bind(keyCode.End, modifier.None, rangeSelectionOnly(moveCursorToLineEnd));
 +      keyDownHandler.bind(keyCode.Home, modifier.Ctrl, rangeSelectionOnly(moveCursorToDocumentStart));
 +      keyDownHandler.bind(keyCode.End, modifier.Ctrl, rangeSelectionOnly(moveCursorToDocumentEnd));
 +      keyDownHandler.bind(keyCode.Home, modifier.Shift, rangeSelectionOnly(extendSelectionToLineStart));
 +      keyDownHandler.bind(keyCode.End, modifier.Shift, rangeSelectionOnly(extendSelectionToLineEnd));
 +      keyDownHandler.bind(keyCode.Up, modifier.CtrlShift, rangeSelectionOnly(extendSelectionToParagraphStart));
 +      keyDownHandler.bind(keyCode.Down, modifier.CtrlShift, rangeSelectionOnly(extendSelectionToParagraphEnd));
 +      keyDownHandler.bind(keyCode.Home, modifier.CtrlShift, rangeSelectionOnly(extendSelectionToDocumentStart));
 +      keyDownHandler.bind(keyCode.End, modifier.CtrlShift, rangeSelectionOnly(extendSelectionToDocumentEnd));
 +      if(isMacOS) {
 +        keyDownHandler.bind(keyCode.Clear, modifier.None, textManipulator.removeCurrentSelection);
 +        keyDownHandler.bind(keyCode.Left, modifier.Meta, rangeSelectionOnly(moveCursorToLineStart));
 +        keyDownHandler.bind(keyCode.Right, modifier.Meta, rangeSelectionOnly(moveCursorToLineEnd));
 +        keyDownHandler.bind(keyCode.Home, modifier.Meta, rangeSelectionOnly(moveCursorToDocumentStart));
 +        keyDownHandler.bind(keyCode.End, modifier.Meta, rangeSelectionOnly(moveCursorToDocumentEnd));
 +        keyDownHandler.bind(keyCode.Left, modifier.MetaShift, rangeSelectionOnly(extendSelectionToLineStart));
 +        keyDownHandler.bind(keyCode.Right, modifier.MetaShift, rangeSelectionOnly(extendSelectionToLineEnd));
 +        keyDownHandler.bind(keyCode.Up, modifier.AltShift, rangeSelectionOnly(extendSelectionToParagraphStart));
 +        keyDownHandler.bind(keyCode.Down, modifier.AltShift, rangeSelectionOnly(extendSelectionToParagraphEnd));
 +        keyDownHandler.bind(keyCode.Up, modifier.MetaShift, rangeSelectionOnly(extendSelectionToDocumentStart));
 +        keyDownHandler.bind(keyCode.Down, modifier.MetaShift, rangeSelectionOnly(extendSelectionToDocumentEnd));
 +        keyDownHandler.bind(keyCode.A, modifier.Meta, rangeSelectionOnly(extendSelectionToEntireDocument));
-         if(directTextStyler) {
-           keyDownHandler.bind(keyCode.B, modifier.Meta, rangeSelectionOnly(directTextStyler.toggleBold));
-           keyDownHandler.bind(keyCode.I, modifier.Meta, rangeSelectionOnly(directTextStyler.toggleItalic));
-           keyDownHandler.bind(keyCode.U, modifier.Meta, rangeSelectionOnly(directTextStyler.toggleUnderline))
-         }
++        keyDownHandler.bind(keyCode.B, modifier.Meta, rangeSelectionOnly(directTextStyler.toggleBold));
++        keyDownHandler.bind(keyCode.I, modifier.Meta, rangeSelectionOnly(directTextStyler.toggleItalic));
++        keyDownHandler.bind(keyCode.U, modifier.Meta, rangeSelectionOnly(directTextStyler.toggleUnderline));
 +        if(directParagraphStyler) {
 +          keyDownHandler.bind(keyCode.L, modifier.MetaShift, rangeSelectionOnly(directParagraphStyler.alignParagraphLeft));
 +          keyDownHandler.bind(keyCode.E, modifier.MetaShift, rangeSelectionOnly(directParagraphStyler.alignParagraphCenter));
 +          keyDownHandler.bind(keyCode.R, modifier.MetaShift, rangeSelectionOnly(directParagraphStyler.alignParagraphRight));
 +          keyDownHandler.bind(keyCode.J, modifier.MetaShift, rangeSelectionOnly(directParagraphStyler.alignParagraphJustified))
 +        }
 +        if(annotationManager) {
 +          keyDownHandler.bind(keyCode.C, modifier.MetaShift, annotationManager.addAnnotation)
 +        }
 +        keyDownHandler.bind(keyCode.Z, modifier.Meta, undo);
 +        keyDownHandler.bind(keyCode.Z, modifier.MetaShift, redo)
 +      }else {
 +        keyDownHandler.bind(keyCode.A, modifier.Ctrl, rangeSelectionOnly(extendSelectionToEntireDocument));
-         if(directTextStyler) {
-           keyDownHandler.bind(keyCode.B, modifier.Ctrl, rangeSelectionOnly(directTextStyler.toggleBold));
-           keyDownHandler.bind(keyCode.I, modifier.Ctrl, rangeSelectionOnly(directTextStyler.toggleItalic));
-           keyDownHandler.bind(keyCode.U, modifier.Ctrl, rangeSelectionOnly(directTextStyler.toggleUnderline))
-         }
++        keyDownHandler.bind(keyCode.B, modifier.Ctrl, rangeSelectionOnly(directTextStyler.toggleBold));
++        keyDownHandler.bind(keyCode.I, modifier.Ctrl, rangeSelectionOnly(directTextStyler.toggleItalic));
++        keyDownHandler.bind(keyCode.U, modifier.Ctrl, rangeSelectionOnly(directTextStyler.toggleUnderline));
 +        if(directParagraphStyler) {
 +          keyDownHandler.bind(keyCode.L, modifier.CtrlShift, rangeSelectionOnly(directParagraphStyler.alignParagraphLeft));
 +          keyDownHandler.bind(keyCode.E, modifier.CtrlShift, rangeSelectionOnly(directParagraphStyler.alignParagraphCenter));
 +          keyDownHandler.bind(keyCode.R, modifier.CtrlShift, rangeSelectionOnly(directParagraphStyler.alignParagraphRight));
 +          keyDownHandler.bind(keyCode.J, modifier.CtrlShift, rangeSelectionOnly(directParagraphStyler.alignParagraphJustified))
 +        }
 +        if(annotationManager) {
 +          keyDownHandler.bind(keyCode.C, modifier.CtrlAlt, annotationManager.addAnnotation)
 +        }
 +        keyDownHandler.bind(keyCode.Z, modifier.Ctrl, undo);
 +        keyDownHandler.bind(keyCode.Z, modifier.CtrlShift, redo)
 +      }
 +      keyPressHandler.setDefault(rangeSelectionOnly(function(e) {
 +        var text = stringFromKeyPress(e);
 +        if(text && !(e.altKey || (e.ctrlKey || e.metaKey))) {
 +          textManipulator.insertText(text);
 +          return true
 +        }
 +        return false
 +      }));
 +      keyPressHandler.bind(keyCode.Enter, modifier.None, rangeSelectionOnly(textManipulator.enqueueParagraphSplittingOps))
 +    }
 +    init()
 +  };
 +  return gui.SessionController
 +}();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.MemberModel = function MemberModel() {
 +};
 +ops.MemberModel.prototype.getMemberDetailsAndUpdates = function(memberId, subscriber) {
 +};
 +ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates = function(memberId, subscriber) {
 +};
 +ops.MemberModel.prototype.close = function(callback) {
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.TrivialMemberModel = function TrivialMemberModel() {
 +  this.getMemberDetailsAndUpdates = function(memberId, subscriber) {
 +    subscriber(memberId, {memberid:memberId, fullname:runtime.tr("Unknown Author"), color:"black", imageurl:"avatar-joe.png"})
 +  };
 +  this.unsubscribeMemberDetailsUpdates = function(memberId, subscriber) {
 +  };
 +  this.close = function(cb) {
 +    cb()
 +  }
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.OperationRouter = function OperationRouter() {
 +};
 +ops.OperationRouter.prototype.setOperationFactory = function(f) {
 +};
 +ops.OperationRouter.prototype.setPlaybackFunction = function(playback_func) {
 +};
 +ops.OperationRouter.prototype.push = function(operations) {
 +};
 +ops.OperationRouter.prototype.close = function(callback) {
 +};
 +/*
 +
 + Copyright (C) 2012 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +ops.TrivialOperationRouter = function TrivialOperationRouter() {
 +  var operationFactory, playbackFunction;
 +  this.setOperationFactory = function(f) {
 +    operationFactory = f
 +  };
 +  this.setPlaybackFunction = function(playback_func) {
 +    playbackFunction = playback_func
 +  };
 +  this.push = function(operations) {
 +    operations.forEach(function(op) {
 +      var timedOp, opspec = op.spec();
 +      opspec.timestamp = (new Date).getTime();
 +      timedOp = operationFactory.create(opspec);
 +      playbackFunction(timedOp)
 +    })
 +  };
 +  this.close = function(cb) {
 +    cb()
 +  }
 +};
 +gui.EditInfoHandle = function EditInfoHandle(parentElement) {
 +  var edits = [], handle, document = (parentElement.ownerDocument), htmlns = document.documentElement.namespaceURI, editinfons = "urn:webodf:names:editinfo";
 +  function renderEdits() {
 +    var i, infoDiv, colorSpan, authorSpan, timeSpan;
 +    handle.innerHTML = "";
 +    for(i = 0;i < edits.length;i += 1) {
 +      infoDiv = document.createElementNS(htmlns, "div");
 +      infoDiv.className = "editInfo";
 +      colorSpan = document.createElementNS(htmlns, "span");
 +      colorSpan.className = "editInfoColor";
 +      colorSpan.setAttributeNS(editinfons, "editinfo:memberid", edits[i].memberid);
 +      authorSpan = document.createElementNS(htmlns, "span");
 +      authorSpan.className = "editInfoAuthor";
 +      authorSpan.setAttributeNS(editinfons, "editinfo:memberid", edits[i].memberid);
 +      timeSpan = document.createElementNS(htmlns, "span");
 +      timeSpan.className = "editInfoTime";
 +      timeSpan.setAttributeNS(editinfons, "editinfo:memberid", edits[i].memberid);
 +      timeSpan.innerHTML = edits[i].time;
 +      infoDiv.appendChild(colorSpan);
 +      infoDiv.appendChild(authorSpan);
 +      infoDiv.appendChild(timeSpan);
 +      handle.appendChild(infoDiv)
 +    }
 +  }
 +  this.setEdits = function(editArray) {
 +    edits = editArray;
 +    renderEdits()
 +  };
 +  this.show = function() {
 +    handle.style.display = "block"
 +  };
 +  this.hide = function() {
 +    handle.style.display = "none"
 +  };
 +  this.destroy = function(callback) {
 +    parentElement.removeChild(handle);
 +    callback()
 +  };
 +  function init() {
 +    handle = document.createElementNS(htmlns, "div");
 +    handle.setAttribute("class", "editInfoHandle");
 +    handle.style.display = "none";
 +    parentElement.appendChild(handle)
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.EditInfo");
 +runtime.loadClass("gui.EditInfoHandle");
 +gui.EditInfoMarker = function EditInfoMarker(editInfo, initialVisibility) {
 +  var self = this, editInfoNode, handle, marker, editinfons = "urn:webodf:names:editinfo", decay1, decay2, decayTimeStep = 1E4;
 +  function applyDecay(opacity, delay) {
 +    return runtime.setTimeout(function() {
 +      marker.style.opacity = opacity
 +    }, delay)
 +  }
 +  function deleteDecay(timer) {
 +    runtime.clearTimeout(timer)
 +  }
 +  function setLastAuthor(memberid) {
 +    marker.setAttributeNS(editinfons, "editinfo:memberid", memberid)
 +  }
 +  this.addEdit = function(memberid, timestamp) {
 +    var age = Date.now() - timestamp;
 +    editInfo.addEdit(memberid, timestamp);
 +    handle.setEdits(editInfo.getSortedEdits());
 +    setLastAuthor(memberid);
 +    if(decay1) {
 +      deleteDecay(decay1)
 +    }
 +    if(decay2) {
 +      deleteDecay(decay2)
 +    }
 +    if(age < decayTimeStep) {
 +      applyDecay(1, 0);
 +      decay1 = applyDecay(0.5, decayTimeStep - age);
 +      decay2 = applyDecay(0.2, decayTimeStep * 2 - age)
 +    }else {
 +      if(age >= decayTimeStep && age < decayTimeStep * 2) {
 +        applyDecay(0.5, 0);
 +        decay2 = applyDecay(0.2, decayTimeStep * 2 - age)
 +      }else {
 +        applyDecay(0.2, 0)
 +      }
 +    }
 +  };
 +  this.getEdits = function() {
 +    return editInfo.getEdits()
 +  };
 +  this.clearEdits = function() {
 +    editInfo.clearEdits();
 +    handle.setEdits([]);
 +    if(marker.hasAttributeNS(editinfons, "editinfo:memberid")) {
 +      marker.removeAttributeNS(editinfons, "editinfo:memberid")
 +    }
 +  };
 +  this.getEditInfo = function() {
 +    return editInfo
 +  };
 +  this.show = function() {
 +    marker.style.display = "block"
 +  };
 +  this.hide = function() {
 +    self.hideHandle();
 +    marker.style.display = "none"
 +  };
 +  this.showHandle = function() {
 +    handle.show()
 +  };
 +  this.hideHandle = function() {
 +    handle.hide()
 +  };
 +  this.destroy = function(callback) {
 +    editInfoNode.removeChild(marker);
 +    handle.destroy(function(err) {
 +      if(err) {
 +        callback(err)
 +      }else {
 +        editInfo.destroy(callback)
 +      }
 +    })
 +  };
 +  function init() {
 +    var dom = editInfo.getOdtDocument().getDOM(), htmlns = dom.documentElement.namespaceURI;
 +    marker = dom.createElementNS(htmlns, "div");
 +    marker.setAttribute("class", "editInfoMarker");
 +    marker.onmouseover = function() {
 +      self.showHandle()
 +    };
 +    marker.onmouseout = function() {
 +      self.hideHandle()
 +    };
 +    editInfoNode = editInfo.getNode();
 +    editInfoNode.appendChild(marker);
 +    handle = new gui.EditInfoHandle(editInfoNode);
 +    if(!initialVisibility) {
 +      self.hide()
 +    }
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.Caret");
 +runtime.loadClass("ops.TrivialMemberModel");
 +runtime.loadClass("ops.EditInfo");
 +runtime.loadClass("gui.EditInfoMarker");
 +gui.SessionViewOptions = function() {
 +  this.editInfoMarkersInitiallyVisible = true;
 +  this.caretAvatarsInitiallyVisible = true;
 +  this.caretBlinksOnRangeSelect = true
 +};
 +gui.SessionView = function() {
 +  function configOption(userValue, defaultValue) {
 +    return userValue !== undefined ? Boolean(userValue) : defaultValue
 +  }
 +  function SessionView(viewOptions, localMemberId, session, caretManager, selectionViewManager) {
 +    var avatarInfoStyles, editInfons = "urn:webodf:names:editinfo", editInfoMap = {}, showEditInfoMarkers = configOption(viewOptions.editInfoMarkersInitiallyVisible, true), showCaretAvatars = configOption(viewOptions.caretAvatarsInitiallyVisible, true), blinkOnRangeSelect = configOption(viewOptions.caretBlinksOnRangeSelect, true), rerenderIntervalId, rerenderSelectionViews = false, RERENDER_INTERVAL = 200;
 +    function createAvatarInfoNodeMatch(nodeName, memberId, pseudoClass) {
 +      return nodeName + '[editinfo|memberid="' + memberId + '"]' + pseudoClass
 +    }
 +    function getAvatarInfoStyle(nodeName, memberId, pseudoClass) {
 +      var node = avatarInfoStyles.firstChild, nodeMatch = createAvatarInfoNodeMatch(nodeName, memberId, pseudoClass) + "{";
 +      while(node) {
 +        if(node.nodeType === Node.TEXT_NODE && node.data.indexOf(nodeMatch) === 0) {
 +          return node
 +        }
 +        node = node.nextSibling
 +      }
 +      return null
 +    }
 +    function setAvatarInfoStyle(memberId, name, color) {
 +      function setStyle(nodeName, rule, pseudoClass) {
 +        var styleRule = createAvatarInfoNodeMatch(nodeName, memberId, pseudoClass) + rule, styleNode = getAvatarInfoStyle(nodeName, memberId, pseudoClass);
 +        if(styleNode) {
 +          styleNode.data = styleRule
 +        }else {
 +          avatarInfoStyles.appendChild(document.createTextNode(styleRule))
 +        }
 +      }
 +      setStyle("div.editInfoMarker", "{ background-color: " + color + "; }", "");
 +      setStyle("span.editInfoColor", "{ background-color: " + color + "; }", "");
 +      setStyle("span.editInfoAuthor", '{ content: "' + name + '"; }', ":before");
 +      setStyle("dc|creator", '{ content: "' + name + '"; display: none;}', ":before");
 +      setStyle("dc|creator", "{ background-color: " + color + "; }", "");
 +      setStyle("div.selectionOverlay", "{ background-color: " + color + ";}", "")
 +    }
 +    function highlightEdit(element, memberId, timestamp) {
 +      var editInfo, editInfoMarker, id = "", editInfoNode = element.getElementsByTagNameNS(editInfons, "editinfo")[0];
 +      if(editInfoNode) {
 +        id = editInfoNode.getAttributeNS(editInfons, "id");
 +        editInfoMarker = editInfoMap[id]
 +      }else {
 +        id = Math.random().toString();
 +        editInfo = new ops.EditInfo(element, session.getOdtDocument());
 +        editInfoMarker = new gui.EditInfoMarker(editInfo, showEditInfoMarkers);
 +        editInfoNode = element.getElementsByTagNameNS(editInfons, "editinfo")[0];
 +        editInfoNode.setAttributeNS(editInfons, "id", id);
 +        editInfoMap[id] = editInfoMarker
 +      }
 +      editInfoMarker.addEdit(memberId, new Date(timestamp))
 +    }
 +    function setEditInfoMarkerVisibility(visible) {
 +      var editInfoMarker, keyname;
 +      for(keyname in editInfoMap) {
 +        if(editInfoMap.hasOwnProperty(keyname)) {
 +          editInfoMarker = editInfoMap[keyname];
 +          if(visible) {
 +            editInfoMarker.show()
 +          }else {
 +            editInfoMarker.hide()
 +          }
 +        }
 +      }
 +    }
 +    function setCaretAvatarVisibility(visible) {
 +      caretManager.getCarets().forEach(function(caret) {
 +        if(visible) {
 +          caret.showHandle()
 +        }else {
 +          caret.hideHandle()
 +        }
 +      })
 +    }
 +    this.showEditInfoMarkers = function() {
 +      if(showEditInfoMarkers) {
 +        return
 +      }
 +      showEditInfoMarkers = true;
 +      setEditInfoMarkerVisibility(showEditInfoMarkers)
 +    };
 +    this.hideEditInfoMarkers = function() {
 +      if(!showEditInfoMarkers) {
 +        return
 +      }
 +      showEditInfoMarkers = false;
 +      setEditInfoMarkerVisibility(showEditInfoMarkers)
 +    };
 +    this.showCaretAvatars = function() {
 +      if(showCaretAvatars) {
 +        return
 +      }
 +      showCaretAvatars = true;
 +      setCaretAvatarVisibility(showCaretAvatars)
 +    };
 +    this.hideCaretAvatars = function() {
 +      if(!showCaretAvatars) {
 +        return
 +      }
 +      showCaretAvatars = false;
 +      setCaretAvatarVisibility(showCaretAvatars)
 +    };
 +    this.getSession = function() {
 +      return session
 +    };
 +    this.getCaret = function(memberid) {
 +      return caretManager.getCaret(memberid)
 +    };
 +    function renderMemberData(memberId, memberData) {
 +      var caret = caretManager.getCaret(memberId);
 +      if(!memberData) {
 +        runtime.log('MemberModel sent undefined data for member "' + memberId + '".');
 +        return
 +      }
 +      if(caret) {
 +        caret.setAvatarImageUrl(memberData.imageurl);
 +        caret.setColor(memberData.color)
 +      }
 +      setAvatarInfoStyle(memberId, memberData.fullname, memberData.color);
 +      if(localMemberId === memberId) {
 +        setAvatarInfoStyle("", memberData.fullname, memberData.color)
 +      }
 +    }
 +    function onCursorAdded(cursor) {
 +      var memberId = cursor.getMemberId(), memberModel = session.getMemberModel();
 +      caretManager.registerCursor(cursor, showCaretAvatars, blinkOnRangeSelect);
 +      selectionViewManager.registerCursor(cursor, true);
 +      renderMemberData(memberId, null);
 +      memberModel.getMemberDetailsAndUpdates(memberId, renderMemberData);
 +      runtime.log("+++ View here +++ eagerly created an Caret for '" + memberId + "'! +++")
 +    }
 +    function onCursorMoved(cursor) {
 +      var memberId = cursor.getMemberId(), localSelectionView = selectionViewManager.getSelectionView(localMemberId), shadowSelectionView = selectionViewManager.getSelectionView(gui.ShadowCursor.ShadowCursorMemberId), localCaret = caretManager.getCaret(localMemberId);
 +      if(memberId === localMemberId) {
 +        shadowSelectionView.hide();
 +        localSelectionView.show();
 +        if(localCaret) {
 +          localCaret.show()
 +        }
 +      }else {
 +        if(memberId === gui.ShadowCursor.ShadowCursorMemberId) {
 +          shadowSelectionView.show();
 +          localSelectionView.hide();
 +          if(localCaret) {
 +            localCaret.hide()
 +          }
 +        }
 +      }
 +    }
 +    function onCursorRemoved(memberid) {
 +      var hasMemberEditInfo = false, keyname;
 +      for(keyname in editInfoMap) {
 +        if(editInfoMap.hasOwnProperty(keyname) && editInfoMap[keyname].getEditInfo().getEdits().hasOwnProperty(memberid)) {
 +          hasMemberEditInfo = true;
 +          break
 +        }
 +      }
 +      selectionViewManager.removeSelectionView(memberid);
 +      if(!hasMemberEditInfo) {
 +        session.getMemberModel().unsubscribeMemberDetailsUpdates(memberid, renderMemberData)
 +      }
 +    }
 +    function onParagraphChanged(info) {
 +      highlightEdit(info.paragraphElement, info.memberId, info.timeStamp)
 +    }
 +    function requestRerenderOfSelectionViews() {
 +      rerenderSelectionViews = true
 +    }
 +    function startRerenderLoop() {
 +      rerenderIntervalId = runtime.getWindow().setInterval(function() {
 +        if(rerenderSelectionViews) {
 +          selectionViewManager.rerenderSelectionViews();
 +          rerenderSelectionViews = false
 +        }
 +      }, RERENDER_INTERVAL)
 +    }
 +    function stopRerenderLoop() {
 +      runtime.getWindow().clearInterval(rerenderIntervalId)
 +    }
 +    this.destroy = function(callback) {
 +      var odtDocument = session.getOdtDocument(), memberModel = session.getMemberModel(), editInfoArray = Object.keys(editInfoMap).map(function(keyname) {
 +        return editInfoMap[keyname]
 +      });
 +      odtDocument.unsubscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalParagraphChanged, onParagraphChanged);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalParagraphChanged, requestRerenderOfSelectionViews);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalTableAdded, requestRerenderOfSelectionViews);
 +      odtDocument.unsubscribe(ops.OdtDocument.signalParagraphStyleModified, requestRerenderOfSelectionViews);
 +      stopRerenderLoop();
 +      caretManager.getCarets().forEach(function(caret) {
 +        memberModel.unsubscribeMemberDetailsUpdates(caret.getCursor().getMemberId(), renderMemberData)
 +      });
 +      avatarInfoStyles.parentNode.removeChild(avatarInfoStyles);
 +      (function destroyEditInfo(i, err) {
 +        if(err) {
 +          callback(err)
 +        }else {
 +          if(i < editInfoArray.length) {
 +            editInfoArray[i].destroy(function(err) {
 +              destroyEditInfo(i + 1, err)
 +            })
 +          }else {
 +            callback()
 +          }
 +        }
 +      })(0, undefined)
 +    };
 +    function init() {
 +      var odtDocument = session.getOdtDocument(), head = document.getElementsByTagName("head")[0];
 +      odtDocument.subscribe(ops.OdtDocument.signalCursorAdded, onCursorAdded);
 +      odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, onCursorRemoved);
 +      odtDocument.subscribe(ops.OdtDocument.signalParagraphChanged, onParagraphChanged);
 +      odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, onCursorMoved);
 +      startRerenderLoop();
 +      odtDocument.subscribe(ops.OdtDocument.signalParagraphChanged, requestRerenderOfSelectionViews);
 +      odtDocument.subscribe(ops.OdtDocument.signalTableAdded, requestRerenderOfSelectionViews);
 +      odtDocument.subscribe(ops.OdtDocument.signalParagraphStyleModified, requestRerenderOfSelectionViews);
 +      avatarInfoStyles = document.createElementNS(head.namespaceURI, "style");
 +      avatarInfoStyles.type = "text/css";
 +      avatarInfoStyles.media = "screen, print, handheld, projection";
 +      avatarInfoStyles.appendChild(document.createTextNode("@namespace editinfo url(urn:webodf:names:editinfo);"));
 +      avatarInfoStyles.appendChild(document.createTextNode("@namespace dc url(http://purl.org/dc/elements/1.1/);"));
 +      head.appendChild(avatarInfoStyles)
 +    }
 +    init()
 +  }
 +  return SessionView
 +}();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.Caret");
 +gui.CaretManager = function CaretManager(sessionController) {
 +  var carets = {}, window = runtime.getWindow(), scrollIntoViewScheduled = false;
 +  function getCaret(memberId) {
 +    return carets.hasOwnProperty(memberId) ? carets[memberId] : null
 +  }
 +  function getCarets() {
 +    return Object.keys(carets).map(function(memberid) {
 +      return carets[memberid]
 +    })
 +  }
 +  function getCanvasElement() {
 +    return sessionController.getSession().getOdtDocument().getOdfCanvas().getElement()
 +  }
 +  function removeCaret(memberId) {
 +    if(memberId === sessionController.getInputMemberId()) {
 +      getCanvasElement().removeAttribute("tabindex")
 +    }
 +    delete carets[memberId]
 +  }
 +  function refreshLocalCaretBlinking(cursor) {
 +    var caret, memberId = cursor.getMemberId();
 +    if(memberId === sessionController.getInputMemberId()) {
 +      caret = getCaret(memberId);
 +      if(caret) {
 +        caret.refreshCursorBlinking()
 +      }
 +    }
 +  }
 +  function executeEnsureCaretVisible() {
 +    var caret = getCaret(sessionController.getInputMemberId());
 +    scrollIntoViewScheduled = false;
 +    if(caret) {
 +      caret.ensureVisible()
 +    }
 +  }
 +  function scheduleCaretVisibilityCheck() {
 +    var caret = getCaret(sessionController.getInputMemberId());
 +    if(caret) {
 +      caret.handleUpdate();
 +      if(!scrollIntoViewScheduled) {
 +        scrollIntoViewScheduled = true;
 +        runtime.setTimeout(executeEnsureCaretVisible, 50)
 +      }
 +    }
 +  }
 +  function ensureLocalCaretVisible(info) {
 +    if(info.memberId === sessionController.getInputMemberId()) {
 +      scheduleCaretVisibilityCheck()
 +    }
 +  }
 +  function focusLocalCaret() {
 +    var caret = getCaret(sessionController.getInputMemberId());
 +    if(caret) {
 +      caret.setFocus()
 +    }
 +  }
 +  function blurLocalCaret() {
 +    var caret = getCaret(sessionController.getInputMemberId());
 +    if(caret) {
 +      caret.removeFocus()
 +    }
 +  }
 +  function showLocalCaret() {
 +    var caret = getCaret(sessionController.getInputMemberId());
 +    if(caret) {
 +      caret.show()
 +    }
 +  }
 +  function hideLocalCaret() {
 +    var caret = getCaret(sessionController.getInputMemberId());
 +    if(caret) {
 +      caret.hide()
 +    }
 +  }
 +  this.registerCursor = function(cursor, caretAvatarInitiallyVisible, blinkOnRangeSelect) {
 +    var memberid = cursor.getMemberId(), caret = new gui.Caret(cursor, caretAvatarInitiallyVisible, blinkOnRangeSelect);
 +    carets[memberid] = caret;
 +    if(memberid === sessionController.getInputMemberId()) {
 +      runtime.log("Starting to track input on new cursor of " + memberid);
 +      cursor.handleUpdate = scheduleCaretVisibilityCheck;
 +      getCanvasElement().setAttribute("tabindex", -1);
 +      sessionController.getEventManager().focus()
 +    }else {
 +      cursor.handleUpdate = caret.handleUpdate
 +    }
 +    return caret
 +  };
 +  this.getCaret = getCaret;
 +  this.getCarets = getCarets;
 +  this.destroy = function(callback) {
 +    var odtDocument = sessionController.getSession().getOdtDocument(), eventManager = sessionController.getEventManager(), caretArray = getCarets();
 +    odtDocument.unsubscribe(ops.OdtDocument.signalParagraphChanged, ensureLocalCaretVisible);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorMoved, refreshLocalCaretBlinking);
 +    odtDocument.unsubscribe(ops.OdtDocument.signalCursorRemoved, removeCaret);
 +    eventManager.unsubscribe("focus", focusLocalCaret);
 +    eventManager.unsubscribe("blur", blurLocalCaret);
 +    window.removeEventListener("focus", showLocalCaret, false);
 +    window.removeEventListener("blur", hideLocalCaret, false);
 +    (function destroyCaret(i, err) {
 +      if(err) {
 +        callback(err)
 +      }else {
 +        if(i < caretArray.length) {
 +          caretArray[i].destroy(function(err) {
 +            destroyCaret(i + 1, err)
 +          })
 +        }else {
 +          callback()
 +        }
 +      }
 +    })(0, undefined);
 +    carets = {}
 +  };
 +  function init() {
 +    var odtDocument = sessionController.getSession().getOdtDocument(), eventManager = sessionController.getEventManager();
 +    odtDocument.subscribe(ops.OdtDocument.signalParagraphChanged, ensureLocalCaretVisible);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorMoved, refreshLocalCaretBlinking);
 +    odtDocument.subscribe(ops.OdtDocument.signalCursorRemoved, removeCaret);
 +    eventManager.subscribe("focus", focusLocalCaret);
 +    eventManager.subscribe("blur", blurLocalCaret);
 +    window.addEventListener("focus", showLocalCaret, false);
 +    window.addEventListener("blur", hideLocalCaret, false)
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +gui.UndoManager = function UndoManager() {
 +};
 +gui.UndoManager.prototype.subscribe = function(signal, callback) {
 +};
 +gui.UndoManager.prototype.unsubscribe = function(signal, callback) {
 +};
 +gui.UndoManager.prototype.setOdtDocument = function(newDocument) {
 +};
 +gui.UndoManager.prototype.saveInitialState = function() {
 +};
 +gui.UndoManager.prototype.resetInitialState = function() {
 +};
 +gui.UndoManager.prototype.setPlaybackFunction = function(playback_func) {
 +};
 +gui.UndoManager.prototype.hasUndoStates = function() {
 +};
 +gui.UndoManager.prototype.hasRedoStates = function() {
 +};
 +gui.UndoManager.prototype.moveForward = function(states) {
 +};
 +gui.UndoManager.prototype.moveBackward = function(states) {
 +};
 +gui.UndoManager.prototype.onOperationExecuted = function(op) {
 +};
 +gui.UndoManager.signalUndoStackChanged = "undoStackChanged";
 +gui.UndoManager.signalUndoStateCreated = "undoStateCreated";
 +gui.UndoManager.signalUndoStateModified = "undoStateModified";
 +(function() {
 +  return gui.UndoManager
 +})();
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +gui.UndoStateRules = function UndoStateRules() {
 +  function getOpType(op) {
 +    return op.spec().optype
 +  }
 +  this.getOpType = getOpType;
 +  function getOpPosition(op) {
 +    return op.spec().position
 +  }
 +  function isEditOperation(op) {
 +    switch(getOpType(op)) {
 +      case "MoveCursor":
 +      ;
 +      case "AddCursor":
 +      ;
 +      case "RemoveCursor":
 +        return false;
 +      default:
 +        return true
 +    }
 +  }
 +  this.isEditOperation = isEditOperation;
 +  function canAggregateOperation(optype) {
 +    switch(optype) {
 +      case "RemoveText":
 +      ;
 +      case "InsertText":
 +        return true;
 +      default:
 +        return false
 +    }
 +  }
 +  function isSameDirectionOfTravel(recentEditOps, thisOp) {
 +    var existing1 = getOpPosition(recentEditOps[recentEditOps.length - 2]), existing2 = getOpPosition(recentEditOps[recentEditOps.length - 1]), thisPos = getOpPosition(thisOp), direction = existing2 - existing1;
 +    return existing2 === thisPos - direction
 +  }
 +  function isContinuousOperation(recentEditOps, thisOp) {
 +    var optype = getOpType(thisOp);
 +    if(canAggregateOperation(optype) && optype === getOpType(recentEditOps[0])) {
 +      if(recentEditOps.length === 1) {
 +        return true
 +      }
 +      if(isSameDirectionOfTravel(recentEditOps, thisOp)) {
 +        return true
 +      }
 +    }
 +    return false
 +  }
 +  function isPartOfOperationSet(operation, lastOperations) {
 +    if(isEditOperation(operation)) {
 +      if(lastOperations.length === 0) {
 +        return true
 +      }
 +      return isEditOperation(lastOperations[lastOperations.length - 1]) && isContinuousOperation(lastOperations.filter(isEditOperation), operation)
 +    }
 +    return true
 +  }
 +  this.isPartOfOperationSet = isPartOfOperationSet
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("gui.UndoManager");
 +runtime.loadClass("gui.UndoStateRules");
 +gui.TrivialUndoManager = function TrivialUndoManager(defaultRules) {
 +  var self = this, cursorns = "urn:webodf:names:cursor", domUtils = new core.DomUtils, initialDoc, initialState = [], playFunc, odtDocument, currentUndoState = [], undoStates = [], redoStates = [], eventNotifier = new core.EventNotifier([gui.UndoManager.signalUndoStackChanged, gui.UndoManager.signalUndoStateCreated, gui.UndoManager.signalUndoStateModified, gui.TrivialUndoManager.signalDocumentRootReplaced]), undoRules = defaultRules || new gui.UndoStateRules;
 +  function emitStackChange() {
 +    eventNotifier.emit(gui.UndoManager.signalUndoStackChanged, {undoAvailable:self.hasUndoStates(), redoAvailable:self.hasRedoStates()})
 +  }
 +  function mostRecentUndoState() {
 +    return undoStates[undoStates.length - 1]
 +  }
 +  function completeCurrentUndoState() {
 +    if(currentUndoState !== initialState && currentUndoState !== mostRecentUndoState()) {
 +      undoStates.push(currentUndoState)
 +    }
 +  }
 +  function removeNode(node) {
 +    var sibling = node.previousSibling || node.nextSibling;
 +    node.parentNode.removeChild(node);
 +    domUtils.normalizeTextNodes(sibling)
 +  }
 +  function removeCursors(root) {
 +    domUtils.getElementsByTagNameNS(root, cursorns, "cursor").forEach(removeNode);
 +    domUtils.getElementsByTagNameNS(root, cursorns, "anchor").forEach(removeNode)
 +  }
 +  function values(obj) {
 +    return Object.keys(obj).map(function(key) {
 +      return obj[key]
 +    })
 +  }
 +  function extractCursorStates(undoStates) {
 +    var addCursor = {}, moveCursor = {}, requiredAddOps = {}, remainingAddOps, operations = undoStates.pop();
 +    odtDocument.getCursors().forEach(function(cursor) {
 +      requiredAddOps[cursor.getMemberId()] = true
 +    });
 +    remainingAddOps = Object.keys(requiredAddOps).length;
 +    function processOp(op) {
 +      var spec = op.spec();
 +      if(!requiredAddOps[spec.memberid]) {
 +        return
 +      }
 +      switch(spec.optype) {
 +        case "AddCursor":
 +          if(!addCursor[spec.memberid]) {
 +            addCursor[spec.memberid] = op;
 +            delete requiredAddOps[spec.memberid];
 +            remainingAddOps -= 1
 +          }
 +          break;
 +        case "MoveCursor":
 +          if(!moveCursor[spec.memberid]) {
 +            moveCursor[spec.memberid] = op
 +          }
 +          break
 +      }
 +    }
 +    while(operations && remainingAddOps > 0) {
 +      operations.reverse();
 +      operations.forEach(processOp);
 +      operations = undoStates.pop()
 +    }
 +    return values(addCursor).concat(values(moveCursor))
 +  }
 +  this.subscribe = function(signal, callback) {
 +    eventNotifier.subscribe(signal, callback)
 +  };
 +  this.unsubscribe = function(signal, callback) {
 +    eventNotifier.unsubscribe(signal, callback)
 +  };
 +  this.hasUndoStates = function() {
 +    return undoStates.length > 0
 +  };
 +  this.hasRedoStates = function() {
 +    return redoStates.length > 0
 +  };
 +  this.setOdtDocument = function(newDocument) {
 +    odtDocument = newDocument
 +  };
 +  this.resetInitialState = function() {
 +    undoStates.length = 0;
 +    redoStates.length = 0;
 +    initialState.length = 0;
 +    currentUndoState.length = 0;
 +    initialDoc = null;
 +    emitStackChange()
 +  };
 +  this.saveInitialState = function() {
 +    var odfContainer = odtDocument.getOdfCanvas().odfContainer(), annotationManager = odtDocument.getOdfCanvas().getAnnotationManager();
 +    if(annotationManager) {
 +      annotationManager.forgetAnnotations()
 +    }
 +    initialDoc = odfContainer.rootElement.cloneNode(true);
 +    odtDocument.getOdfCanvas().refreshAnnotations();
 +    removeCursors(initialDoc);
 +    completeCurrentUndoState();
 +    undoStates.unshift(initialState);
 +    currentUndoState = initialState = extractCursorStates(undoStates);
 +    undoStates.length = 0;
 +    redoStates.length = 0;
 +    emitStackChange()
 +  };
 +  this.setPlaybackFunction = function(playback_func) {
 +    playFunc = playback_func
 +  };
 +  this.onOperationExecuted = function(op) {
 +    redoStates.length = 0;
 +    if(undoRules.isEditOperation(op) && currentUndoState === initialState || !undoRules.isPartOfOperationSet(op, currentUndoState)) {
 +      completeCurrentUndoState();
 +      currentUndoState = [op];
 +      undoStates.push(currentUndoState);
 +      eventNotifier.emit(gui.UndoManager.signalUndoStateCreated, {operations:currentUndoState});
 +      emitStackChange()
 +    }else {
 +      currentUndoState.push(op);
 +      eventNotifier.emit(gui.UndoManager.signalUndoStateModified, {operations:currentUndoState})
 +    }
 +  };
 +  this.moveForward = function(states) {
 +    var moved = 0, redoOperations;
 +    while(states && redoStates.length) {
 +      redoOperations = redoStates.pop();
 +      undoStates.push(redoOperations);
 +      redoOperations.forEach(playFunc);
 +      states -= 1;
 +      moved += 1
 +    }
 +    if(moved) {
 +      currentUndoState = mostRecentUndoState();
 +      emitStackChange()
 +    }
 +    return moved
 +  };
 +  this.moveBackward = function(states) {
 +    var odfCanvas = odtDocument.getOdfCanvas(), odfContainer = odfCanvas.odfContainer(), moved = 0;
 +    while(states && undoStates.length) {
 +      redoStates.push(undoStates.pop());
 +      states -= 1;
 +      moved += 1
 +    }
 +    if(moved) {
 +      odfContainer.setRootElement(initialDoc.cloneNode(true));
 +      odfCanvas.setOdfContainer(odfContainer, true);
 +      eventNotifier.emit(gui.TrivialUndoManager.signalDocumentRootReplaced, {});
 +      odtDocument.getCursors().forEach(function(cursor) {
 +        odtDocument.removeCursor(cursor.getMemberId())
 +      });
 +      initialState.forEach(playFunc);
 +      undoStates.forEach(function(ops) {
 +        ops.forEach(playFunc)
 +      });
 +      odfCanvas.refreshCSS();
 +      currentUndoState = mostRecentUndoState() || initialState;
 +      emitStackChange()
 +    }
 +    return moved
 +  }
 +};
 +gui.TrivialUndoManager.signalDocumentRootReplaced = "documentRootReplaced";
 +(function() {
 +  return gui.TrivialUndoManager
 +})();
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("odf.OdfNodeFilter");
 +runtime.loadClass("gui.SelectionMover");
 +gui.SelectionView = function SelectionView(cursor) {
 +  var odtDocument = cursor.getOdtDocument(), root = odtDocument.getRootNode().parentNode.parentNode, doc = odtDocument.getDOM(), overlayTop = doc.createElement("div"), overlayMiddle = doc.createElement("div"), overlayBottom = doc.createElement("div"), odfUtils = new odf.OdfUtils, domUtils = new core.DomUtils, isVisible = true, clientRectRange = doc.createRange(), positionIterator = gui.SelectionMover.createPositionIterator(odtDocument.getRootNode()), areRangeClientRectsScaled = domUtils [...]
 +  FILTER_ACCEPT = NodeFilter.FILTER_ACCEPT, FILTER_REJECT = NodeFilter.FILTER_REJECT;
 +  function getBoundingClientRect(node) {
 +    if(areRangeClientRectsScaled && node.nodeType === Node.ELEMENT_NODE) {
 +      return node.getBoundingClientRect()
 +    }
 +    clientRectRange.selectNode(node);
 +    return clientRectRange.getBoundingClientRect()
 +  }
 +  function setRect(div, rect) {
 +    div.style.left = rect.left + "px";
 +    div.style.top = rect.top + "px";
 +    div.style.width = rect.width + "px";
 +    div.style.height = rect.height + "px"
 +  }
 +  function showOverlays(choice) {
 +    var display;
 +    isVisible = choice;
 +    display = choice === true ? "block" : "none";
 +    overlayTop.style.display = overlayMiddle.style.display = overlayBottom.style.display = display
 +  }
 +  function translateRect(rect) {
 +    var rootRect = getBoundingClientRect(root), zoomLevel = odtDocument.getOdfCanvas().getZoomLevel(), resultRect = {};
 +    resultRect.top = domUtils.adaptRangeDifferenceToZoomLevel(rect.top - rootRect.top, zoomLevel);
 +    resultRect.left = domUtils.adaptRangeDifferenceToZoomLevel(rect.left - rootRect.left, zoomLevel);
 +    resultRect.bottom = domUtils.adaptRangeDifferenceToZoomLevel(rect.bottom - rootRect.top, zoomLevel);
 +    resultRect.right = domUtils.adaptRangeDifferenceToZoomLevel(rect.right - rootRect.left, zoomLevel);
 +    resultRect.width = domUtils.adaptRangeDifferenceToZoomLevel(rect.width, zoomLevel);
 +    resultRect.height = domUtils.adaptRangeDifferenceToZoomLevel(rect.height, zoomLevel);
 +    return resultRect
 +  }
 +  function isRangeVisible(range) {
 +    var bcr = range.getBoundingClientRect();
 +    return Boolean(bcr && bcr.height !== 0)
 +  }
 +  function lastVisibleRect(range, nodes) {
 +    var nextNodeIndex = nodes.length - 1, node = nodes[nextNodeIndex], startOffset = range.endContainer === node ? range.endOffset : node.length || node.childNodes.length, endOffset = startOffset;
 +    range.setStart(node, startOffset);
 +    range.setEnd(node, endOffset);
 +    while(!isRangeVisible(range)) {
 +      if(node.nodeType === Node.ELEMENT_NODE && startOffset > 0) {
 +        startOffset = 0
 +      }else {
 +        if(node.nodeType === Node.TEXT_NODE && startOffset > 0) {
 +          startOffset -= 1
 +        }else {
 +          if(nodes[nextNodeIndex]) {
 +            node = nodes[nextNodeIndex];
 +            nextNodeIndex -= 1;
 +            startOffset = endOffset = node.length || node.childNodes.length
 +          }else {
 +            return false
 +          }
 +        }
 +      }
 +      range.setStart(node, startOffset);
 +      range.setEnd(node, endOffset)
 +    }
 +    return true
 +  }
 +  function firstVisibleRect(range, nodes) {
 +    var nextNodeIndex = 0, node = nodes[nextNodeIndex], startOffset = range.startContainer === node ? range.startOffset : 0, endOffset = startOffset;
 +    range.setStart(node, startOffset);
 +    range.setEnd(node, endOffset);
 +    while(!isRangeVisible(range)) {
 +      if(node.nodeType === Node.ELEMENT_NODE && endOffset < node.childNodes.length) {
 +        endOffset = node.childNodes.length
 +      }else {
 +        if(node.nodeType === Node.TEXT_NODE && endOffset < node.length) {
 +          endOffset += 1
 +        }else {
 +          if(nodes[nextNodeIndex]) {
 +            node = nodes[nextNodeIndex];
 +            nextNodeIndex += 1;
 +            startOffset = endOffset = 0
 +          }else {
 +            return false
 +          }
 +        }
 +      }
 +      range.setStart(node, startOffset);
 +      range.setEnd(node, endOffset)
 +    }
 +    return true
 +  }
 +  function getExtremeRanges(range) {
 +    var nodes = odfUtils.getTextElements(range, true, false), firstRange = (range.cloneRange()), lastRange = (range.cloneRange()), fillerRange = range.cloneRange();
 +    if(!nodes.length) {
 +      return null
 +    }
 +    if(!firstVisibleRect(firstRange, nodes)) {
 +      return null
 +    }
 +    if(!lastVisibleRect(lastRange, nodes)) {
 +      return null
 +    }
 +    fillerRange.setStart(firstRange.startContainer, firstRange.startOffset);
 +    fillerRange.setEnd(lastRange.endContainer, lastRange.endOffset);
 +    return{firstRange:firstRange, lastRange:lastRange, fillerRange:fillerRange}
 +  }
 +  function getBoundingRect(rect1, rect2) {
 +    var resultRect = {};
 +    resultRect.top = Math.min(rect1.top, rect2.top);
 +    resultRect.left = Math.min(rect1.left, rect2.left);
 +    resultRect.right = Math.max(rect1.right, rect2.right);
 +    resultRect.bottom = Math.max(rect1.bottom, rect2.bottom);
 +    resultRect.width = resultRect.right - resultRect.left;
 +    resultRect.height = resultRect.bottom - resultRect.top;
 +    return resultRect
 +  }
 +  function checkAndGrowOrCreateRect(originalRect, newRect) {
 +    if(newRect && (newRect.width > 0 && newRect.height > 0)) {
 +      if(!originalRect) {
 +        originalRect = newRect
 +      }else {
 +        originalRect = getBoundingRect(originalRect, newRect)
 +      }
 +    }
 +    return originalRect
 +  }
 +  function getFillerRect(fillerRange) {
 +    var containerNode = fillerRange.commonAncestorContainer, firstNode = fillerRange.startContainer, lastNode = fillerRange.endContainer, firstOffset = fillerRange.startOffset, lastOffset = fillerRange.endOffset, currentNode, lastMeasuredNode, firstSibling, lastSibling, grownRect = null, currentRect, range = doc.createRange(), rootFilter, odfNodeFilter = new odf.OdfNodeFilter, treeWalker;
 +    function acceptNode(node) {
 +      positionIterator.setUnfilteredPosition(node, 0);
 +      if(odfNodeFilter.acceptNode(node) === FILTER_ACCEPT && rootFilter.acceptPosition(positionIterator) === FILTER_ACCEPT) {
 +        return FILTER_ACCEPT
 +      }
 +      return FILTER_REJECT
 +    }
 +    function getRectFromNodeAfterFiltering(node) {
 +      var rect = null;
 +      if(acceptNode(node) === FILTER_ACCEPT) {
 +        rect = getBoundingClientRect(node)
 +      }
 +      return rect
 +    }
 +    if(firstNode === containerNode || lastNode === containerNode) {
 +      range = fillerRange.cloneRange();
 +      grownRect = range.getBoundingClientRect();
 +      range.detach();
 +      return grownRect
 +    }
 +    firstSibling = firstNode;
 +    while(firstSibling.parentNode !== containerNode) {
 +      firstSibling = firstSibling.parentNode
 +    }
 +    lastSibling = lastNode;
 +    while(lastSibling.parentNode !== containerNode) {
 +      lastSibling = lastSibling.parentNode
 +    }
 +    rootFilter = odtDocument.createRootFilter(firstNode);
 +    currentNode = firstSibling.nextSibling;
 +    while(currentNode && currentNode !== lastSibling) {
 +      currentRect = getRectFromNodeAfterFiltering(currentNode);
 +      grownRect = checkAndGrowOrCreateRect(grownRect, currentRect);
 +      currentNode = currentNode.nextSibling
 +    }
 +    if(odfUtils.isParagraph(firstSibling)) {
 +      grownRect = checkAndGrowOrCreateRect(grownRect, getBoundingClientRect(firstSibling))
 +    }else {
 +      treeWalker = doc.createTreeWalker(firstSibling, NodeFilter.SHOW_TEXT, acceptNode);
 +      currentNode = treeWalker.currentNode = firstNode;
 +      while(currentNode && currentNode !== lastNode) {
 +        range.setStart(currentNode, firstOffset);
 +        range.setEnd(currentNode, currentNode.length);
 +        currentRect = range.getBoundingClientRect();
 +        grownRect = checkAndGrowOrCreateRect(grownRect, currentRect);
 +        lastMeasuredNode = currentNode;
 +        firstOffset = 0;
 +        currentNode = treeWalker.nextNode()
 +      }
 +    }
 +    if(!lastMeasuredNode) {
 +      lastMeasuredNode = firstNode
 +    }
 +    if(odfUtils.isParagraph(lastSibling)) {
 +      grownRect = checkAndGrowOrCreateRect(grownRect, getBoundingClientRect(firstSibling))
 +    }else {
 +      treeWalker = doc.createTreeWalker(lastSibling, NodeFilter.SHOW_TEXT, acceptNode);
 +      currentNode = treeWalker.currentNode = lastNode;
 +      while(currentNode && currentNode !== lastMeasuredNode) {
 +        range.setStart(currentNode, 0);
 +        range.setEnd(currentNode, lastOffset);
 +        currentRect = range.getBoundingClientRect();
 +        grownRect = checkAndGrowOrCreateRect(grownRect, currentRect);
 +        currentNode = treeWalker.previousNode();
 +        if(currentNode) {
 +          lastOffset = currentNode.length
 +        }
 +      }
 +    }
 +    return grownRect
 +  }
 +  function getCollapsedRectOfTextRange(range, useRightEdge) {
 +    var clientRect = range.getBoundingClientRect(), collapsedRect = {};
 +    collapsedRect.width = 0;
 +    collapsedRect.top = clientRect.top;
 +    collapsedRect.bottom = clientRect.bottom;
 +    collapsedRect.height = clientRect.height;
 +    collapsedRect.left = collapsedRect.right = useRightEdge ? clientRect.right : clientRect.left;
 +    return collapsedRect
 +  }
 +  function repositionOverlays(selectedRange) {
 +    var extremes = getExtremeRanges(selectedRange), firstRange, lastRange, fillerRange, firstRect, fillerRect, lastRect;
 +    if(selectedRange.collapsed || !extremes) {
 +      showOverlays(false)
 +    }else {
 +      showOverlays(true);
 +      firstRange = extremes.firstRange;
 +      lastRange = extremes.lastRange;
 +      fillerRange = extremes.fillerRange;
 +      firstRect = translateRect(getCollapsedRectOfTextRange(firstRange, false));
 +      lastRect = translateRect(getCollapsedRectOfTextRange(lastRange, true));
 +      fillerRect = getFillerRect(fillerRange);
 +      if(!fillerRect) {
 +        fillerRect = getBoundingRect(firstRect, lastRect)
 +      }else {
 +        fillerRect = translateRect(fillerRect)
 +      }
 +      setRect(overlayTop, {left:firstRect.left, top:firstRect.top, width:Math.max(0, fillerRect.width - (firstRect.left - fillerRect.left)), height:firstRect.height});
 +      if(lastRect.top === firstRect.top || lastRect.bottom === firstRect.bottom) {
 +        overlayMiddle.style.display = overlayBottom.style.display = "none"
 +      }else {
 +        setRect(overlayBottom, {left:fillerRect.left, top:lastRect.top, width:Math.max(0, lastRect.right - fillerRect.left), height:lastRect.height});
 +        setRect(overlayMiddle, {left:fillerRect.left, top:firstRect.top + firstRect.height, width:Math.max(0, parseFloat(overlayTop.style.left) + parseFloat(overlayTop.style.width) - parseFloat(overlayBottom.style.left)), height:Math.max(0, lastRect.top - firstRect.bottom)})
 +      }
 +      firstRange.detach();
 +      lastRange.detach();
 +      fillerRange.detach()
 +    }
 +  }
 +  function rerender() {
 +    if(cursor.getSelectionType() === ops.OdtCursor.RangeSelection) {
 +      showOverlays(true);
 +      repositionOverlays(cursor.getSelectedRange())
 +    }else {
 +      showOverlays(false)
 +    }
 +  }
 +  this.rerender = rerender;
 +  this.show = rerender;
 +  this.hide = function() {
 +    showOverlays(false)
 +  };
 +  this.visible = function() {
 +    return isVisible
 +  };
 +  function handleCursorMove(movedCursor) {
 +    if(movedCursor === cursor) {
 +      rerender()
 +    }
 +  }
 +  this.destroy = function(callback) {
 +    root.removeChild(overlayTop);
 +    root.removeChild(overlayMiddle);
 +    root.removeChild(overlayBottom);
 +    cursor.getOdtDocument().unsubscribe(ops.OdtDocument.signalCursorMoved, handleCursorMove);
 +    callback()
 +  };
 +  function init() {
 +    var editinfons = "urn:webodf:names:editinfo", memberid = cursor.getMemberId();
 +    root.appendChild(overlayTop);
 +    root.appendChild(overlayMiddle);
 +    root.appendChild(overlayBottom);
 +    overlayTop.setAttributeNS(editinfons, "editinfo:memberid", memberid);
 +    overlayMiddle.setAttributeNS(editinfons, "editinfo:memberid", memberid);
 +    overlayBottom.setAttributeNS(editinfons, "editinfo:memberid", memberid);
 +    overlayTop.className = overlayMiddle.className = overlayBottom.className = "selectionOverlay";
 +    cursor.getOdtDocument().subscribe(ops.OdtDocument.signalCursorMoved, handleCursorMove)
 +  }
 +  init()
 +};
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.SelectionView");
 +gui.SelectionViewManager = function SelectionViewManager() {
 +  var selectionViews = {};
 +  function getSelectionView(memberId) {
 +    return selectionViews.hasOwnProperty(memberId) ? selectionViews[memberId] : null
 +  }
 +  this.getSelectionView = getSelectionView;
 +  function getSelectionViews() {
 +    return Object.keys(selectionViews).map(function(memberid) {
 +      return selectionViews[memberid]
 +    })
 +  }
 +  this.getSelectionViews = getSelectionViews;
 +  function removeSelectionView(memberId) {
 +    if(selectionViews.hasOwnProperty(memberId)) {
 +      selectionViews[memberId].destroy(function() {
 +      });
 +      delete selectionViews[memberId]
 +    }
 +  }
 +  this.removeSelectionView = removeSelectionView;
 +  function hideSelectionView(memberId) {
 +    if(selectionViews.hasOwnProperty(memberId)) {
 +      selectionViews[memberId].hide()
 +    }
 +  }
 +  this.hideSelectionView = hideSelectionView;
 +  function showSelectionView(memberId) {
 +    if(selectionViews.hasOwnProperty(memberId)) {
 +      selectionViews[memberId].show()
 +    }
 +  }
 +  this.showSelectionView = showSelectionView;
 +  this.rerenderSelectionViews = function() {
 +    Object.keys(selectionViews).forEach(function(memberId) {
 +      if(selectionViews[memberId].visible()) {
 +        selectionViews[memberId].rerender()
 +      }
 +    })
 +  };
 +  this.registerCursor = function(cursor, virtualSelectionsInitiallyVisible) {
 +    var memberId = cursor.getMemberId(), selectionView = new gui.SelectionView(cursor);
 +    if(virtualSelectionsInitiallyVisible) {
 +      selectionView.show()
 +    }else {
 +      selectionView.hide()
 +    }
 +    selectionViews[memberId] = selectionView;
 +    return selectionView
 +  };
 +  this.destroy = function(callback) {
 +    var selectionViewArray = getSelectionViews();
 +    (function destroySelectionView(i, err) {
 +      if(err) {
 +        callback(err)
 +      }else {
 +        if(i < selectionViewArray.length) {
 +          selectionViewArray[i].destroy(function(err) {
 +            destroySelectionView(i + 1, err)
 +          })
 +        }else {
 +          callback()
 +        }
 +      }
 +    })(0, undefined)
 +  }
 +};
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");
 +runtime.loadClass("core.DomUtils");
 +runtime.loadClass("odf.OdfUtils");
 +runtime.loadClass("odf.Namespaces");
 +runtime.loadClass("gui.SelectionMover");
 +runtime.loadClass("core.PositionFilterChain");
++runtime.loadClass("ops.StepsTranslator");
++runtime.loadClass("ops.TextPositionFilter");
 +ops.OdtDocument = function OdtDocument(odfCanvas) {
-   var self = this, odfUtils, domUtils, cursors = {}, eventNotifier = new core.EventNotifier([ops.OdtDocument.signalCursorAdded, ops.OdtDocument.signalCursorRemoved, ops.OdtDocument.signalCursorMoved, ops.OdtDocument.signalParagraphChanged, ops.OdtDocument.signalParagraphStyleModified, ops.OdtDocument.signalCommonStyleCreated, ops.OdtDocument.signalCommonStyleDeleted, ops.OdtDocument.signalTableAdded, ops.OdtDocument.signalOperationExecuted, ops.OdtDocument.signalUndoStackChanged]), FILT [...]
-   core.PositionFilter.FilterResult.FILTER_ACCEPT, FILTER_REJECT = core.PositionFilter.FilterResult.FILTER_REJECT, filter;
++  var self = this, odfUtils, domUtils, cursors = {}, eventNotifier = new core.EventNotifier([ops.OdtDocument.signalCursorAdded, ops.OdtDocument.signalCursorRemoved, ops.OdtDocument.signalCursorMoved, ops.OdtDocument.signalParagraphChanged, ops.OdtDocument.signalParagraphStyleModified, ops.OdtDocument.signalCommonStyleCreated, ops.OdtDocument.signalCommonStyleDeleted, ops.OdtDocument.signalTableAdded, ops.OdtDocument.signalOperationExecuted, ops.OdtDocument.signalUndoStackChanged, ops.Od [...]
++  ops.OdtDocument.signalStepsRemoved]), FILTER_ACCEPT = core.PositionFilter.FilterResult.FILTER_ACCEPT, FILTER_REJECT = core.PositionFilter.FilterResult.FILTER_REJECT, filter, stepsTranslator;
 +  function getRootNode() {
 +    var element = odfCanvas.odfContainer().getContentElement(), localName = element && element.localName;
-     runtime.assert(localName === "text", "Unsupported content element type '" + localName + "'for OdtDocument");
++    runtime.assert(localName === "text", "Unsupported content element type '" + localName + "' for OdtDocument");
 +    return element
 +  }
-   function RootFilter(anchor) {
-     function isRoot(node) {
-       if(node.namespaceURI === odf.Namespaces.officens && node.localName === "text" || node.namespaceURI === odf.Namespaces.officens && node.localName === "annotation") {
-         return true
-       }
-       return false
++  function getDOM() {
++    return(getRootNode().ownerDocument)
++  }
++  this.getDOM = getDOM;
++  function isRoot(node) {
++    if(node.namespaceURI === odf.Namespaces.officens && node.localName === "text" || node.namespaceURI === odf.Namespaces.officens && node.localName === "annotation") {
++      return true
 +    }
-     function getRoot(node) {
-       while(node && !isRoot(node)) {
-         node = (node.parentNode)
-       }
-       return node
++    return false
++  }
++  function getRoot(node) {
++    while(node && !isRoot(node)) {
++      node = (node.parentNode)
 +    }
++    return node
++  }
++  this.getRootElement = getRoot;
++  function RootFilter(anchor) {
 +    this.acceptPosition = function(iterator) {
 +      var node = iterator.container(), anchorNode;
 +      if(typeof anchor === "string") {
 +        anchorNode = cursors[anchor].getNode()
 +      }else {
 +        anchorNode = anchor
 +      }
 +      if(getRoot(node) === getRoot(anchorNode)) {
 +        return FILTER_ACCEPT
 +      }
 +      return FILTER_REJECT
 +    }
 +  }
-   function TextPositionFilter() {
-     function checkLeftRight(container, leftNode, rightNode) {
-       var r, firstPos, rightOfChar;
-       if(leftNode) {
-         r = odfUtils.lookLeftForCharacter(leftNode);
-         if(r === 1) {
-           return FILTER_ACCEPT
-         }
-         if(r === 2 && (odfUtils.scanRightForAnyCharacter(rightNode) || odfUtils.scanRightForAnyCharacter(odfUtils.nextNode(container)))) {
-           return FILTER_ACCEPT
-         }
-       }
-       firstPos = leftNode === null && odfUtils.isParagraph(container);
-       rightOfChar = odfUtils.lookRightForCharacter(rightNode);
-       if(firstPos) {
-         if(rightOfChar) {
-           return FILTER_ACCEPT
-         }
-         return odfUtils.scanRightForAnyCharacter(rightNode) ? FILTER_REJECT : FILTER_ACCEPT
-       }
-       if(!rightOfChar) {
-         return FILTER_REJECT
-       }
-       leftNode = leftNode || odfUtils.previousNode(container);
-       return odfUtils.scanLeftForAnyCharacter(leftNode) ? FILTER_REJECT : FILTER_ACCEPT
-     }
-     this.acceptPosition = function(iterator) {
-       var container = iterator.container(), nodeType = container.nodeType, offset, text, leftChar, rightChar, leftNode, rightNode, r;
-       if(nodeType !== Node.ELEMENT_NODE && nodeType !== Node.TEXT_NODE) {
-         return FILTER_REJECT
-       }
-       if(nodeType === Node.TEXT_NODE) {
-         if(!odfUtils.isGroupingElement(container.parentNode) || odfUtils.isWithinTrackedChanges(container.parentNode, getRootNode())) {
-           return FILTER_REJECT
-         }
-         offset = iterator.unfilteredDomOffset();
-         text = container.data;
-         runtime.assert(offset !== text.length, "Unexpected offset.");
-         if(offset > 0) {
-           leftChar = text.substr(offset - 1, 1);
-           if(!odfUtils.isODFWhitespace(leftChar)) {
-             return FILTER_ACCEPT
-           }
-           if(offset > 1) {
-             leftChar = text.substr(offset - 2, 1);
-             if(!odfUtils.isODFWhitespace(leftChar)) {
-               r = FILTER_ACCEPT
-             }else {
-               if(!odfUtils.isODFWhitespace(text.substr(0, offset))) {
-                 return FILTER_REJECT
-               }
-             }
-           }else {
-             leftNode = odfUtils.previousNode(container);
-             if(odfUtils.scanLeftForNonWhitespace(leftNode)) {
-               r = FILTER_ACCEPT
-             }
-           }
-           if(r === FILTER_ACCEPT) {
-             return odfUtils.isTrailingWhitespace(container, offset) ? FILTER_REJECT : FILTER_ACCEPT
-           }
-           rightChar = text.substr(offset, 1);
-           if(odfUtils.isODFWhitespace(rightChar)) {
-             return FILTER_REJECT
-           }
-           return odfUtils.scanLeftForAnyCharacter(odfUtils.previousNode(container)) ? FILTER_REJECT : FILTER_ACCEPT
-         }
-         leftNode = iterator.leftNode();
-         rightNode = container;
-         container = (container.parentNode);
-         r = checkLeftRight(container, leftNode, rightNode)
-       }else {
-         if(!odfUtils.isGroupingElement(container) || odfUtils.isWithinTrackedChanges(container, getRootNode())) {
-           r = FILTER_REJECT
-         }else {
-           leftNode = iterator.leftNode();
-           rightNode = iterator.rightNode();
-           r = checkLeftRight(container, leftNode, rightNode)
-         }
-       }
-       return r
-     }
-   }
 +  function getIteratorAtPosition(position) {
-     var iterator = gui.SelectionMover.createPositionIterator(getRootNode());
-     position += 1;
-     while(position > 0 && iterator.nextPosition()) {
-       if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
-         position -= 1
-       }
-     }
++    var iterator = gui.SelectionMover.createPositionIterator(getRootNode()), point = stepsTranslator.convertStepsToDomPoint(position);
++    iterator.setUnfilteredPosition(point.node, point.offset);
 +    return iterator
 +  }
 +  this.getIteratorAtPosition = getIteratorAtPosition;
-   function getPositionInTextNode(position, memberid) {
-     var iterator = gui.SelectionMover.createPositionIterator(getRootNode()), lastTextNode = null, node, nodeOffset = 0, cursorNode = null, originalPosition = position;
-     runtime.assert(position >= 0, "position must be >= 0");
-     if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
-       node = iterator.container();
-       if(node.nodeType === Node.TEXT_NODE) {
-         lastTextNode = (node);
-         nodeOffset = 0
-       }
++  this.convertDomPointToCursorStep = function(node, offset) {
++    return stepsTranslator.convertDomPointToSteps(node, offset)
++  };
++  this.convertDomToCursorRange = function(anchorNode, anchorOffset, focusNode, focusOffset) {
++    var point1, point2;
++    point1 = stepsTranslator.convertDomPointToSteps(anchorNode, anchorOffset);
++    if(anchorNode === focusNode && anchorOffset === focusOffset) {
++      point2 = point1
 +    }else {
-       position += 1
++      point2 = stepsTranslator.convertDomPointToSteps(focusNode, focusOffset)
 +    }
-     while(position > 0 || lastTextNode === null) {
-       if(!iterator.nextPosition()) {
-         return null
-       }
-       if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
-         position -= 1;
-         node = iterator.container();
-         if(node.nodeType === Node.TEXT_NODE) {
-           if(node !== lastTextNode) {
-             lastTextNode = (node);
-             nodeOffset = iterator.unfilteredDomOffset()
-           }else {
-             nodeOffset += 1
-           }
-         }else {
-           if(lastTextNode !== null) {
-             if(position === 0) {
-               nodeOffset = lastTextNode.length;
-               break
-             }
-             lastTextNode = null
-           }else {
-             if(position === 0) {
-               lastTextNode = getRootNode().ownerDocument.createTextNode("");
-               node.insertBefore(lastTextNode, iterator.rightNode());
-               nodeOffset = 0;
-               break
-             }
-           }
-         }
++    return{position:point1, length:point2 - point1}
++  };
++  this.convertCursorToDomRange = function(position, length) {
++    var range = getDOM().createRange(), point1, point2;
++    point1 = stepsTranslator.convertStepsToDomPoint(position);
++    if(length) {
++      point2 = stepsTranslator.convertStepsToDomPoint(position + length);
++      if(length > 0) {
++        range.setStart(point1.node, point1.offset);
++        range.setEnd(point2.node, point2.offset)
++      }else {
++        range.setStart(point2.node, point2.offset);
++        range.setEnd(point1.node, point1.offset)
 +      }
++    }else {
++      range.setStart(point1.node, point1.offset)
 +    }
-     if(lastTextNode === null) {
-       return null
++    return range
++  };
++  function getTextNodeAtStep(steps, memberid) {
++    var iterator = getIteratorAtPosition(steps), node = iterator.container(), lastTextNode, nodeOffset = 0, cursorNode = null;
++    if(node.nodeType === Node.TEXT_NODE) {
++      lastTextNode = (node);
++      nodeOffset = iterator.unfilteredDomOffset()
++    }else {
++      lastTextNode = getDOM().createTextNode("");
++      nodeOffset = 0;
++      node.insertBefore(lastTextNode, iterator.rightNode())
 +    }
-     if(memberid && (cursors[memberid] && self.getCursorPosition(memberid) === originalPosition)) {
++    if(memberid && (cursors[memberid] && self.getCursorPosition(memberid) === steps)) {
 +      cursorNode = cursors[memberid].getNode();
-       while(nodeOffset === 0 && (cursorNode.nextSibling && cursorNode.nextSibling.localName === "cursor")) {
-         cursorNode.parentNode.insertBefore(cursorNode, cursorNode.nextSibling.nextSibling)
++      while(cursorNode.nextSibling && cursorNode.nextSibling.localName === "cursor") {
++        cursorNode.parentNode.insertBefore(cursorNode.nextSibling, cursorNode)
 +      }
-       if(lastTextNode.length > 0) {
-         lastTextNode = getRootNode().ownerDocument.createTextNode("");
-         nodeOffset = 0;
-         cursorNode.parentNode.insertBefore(lastTextNode, cursorNode.nextSibling)
-       }
-       while(nodeOffset === 0 && (lastTextNode.previousSibling && lastTextNode.previousSibling.localName === "cursor")) {
-         node = lastTextNode.previousSibling;
-         if(lastTextNode.length > 0) {
-           lastTextNode = getRootNode().ownerDocument.createTextNode("")
-         }
-         node.parentNode.insertBefore(lastTextNode, node);
-         if(cursorNode === node) {
-           break
-         }
++      if(lastTextNode.length > 0 && lastTextNode.nextSibling !== cursorNode) {
++        lastTextNode = getDOM().createTextNode("");
++        nodeOffset = 0
 +      }
++      cursorNode.parentNode.insertBefore(lastTextNode, cursorNode)
 +    }
 +    while(lastTextNode.previousSibling && lastTextNode.previousSibling.nodeType === Node.TEXT_NODE) {
 +      lastTextNode.previousSibling.appendData(lastTextNode.data);
 +      nodeOffset = lastTextNode.previousSibling.length;
 +      lastTextNode = (lastTextNode.previousSibling);
 +      lastTextNode.parentNode.removeChild(lastTextNode.nextSibling)
 +    }
 +    return{textNode:lastTextNode, offset:nodeOffset}
 +  }
 +  function getParagraphElement(node) {
 +    return odfUtils.getParagraphElement(node)
 +  }
 +  function getStyleElement(styleName, styleFamily) {
 +    return odfCanvas.getFormatting().getStyleElement(styleName, styleFamily)
 +  }
 +  this.getStyleElement = getStyleElement;
 +  function getParagraphStyleElement(styleName) {
 +    return getStyleElement(styleName, "paragraph")
 +  }
 +  function getParagraphStyleAttributes(styleName) {
 +    var node = getParagraphStyleElement(styleName);
 +    if(node) {
 +      return odfCanvas.getFormatting().getInheritedStyleAttributes(node)
 +    }
 +    return null
 +  }
 +  function upgradeWhitespaceToElement(textNode, offset) {
 +    runtime.assert(textNode.data[offset] === " ", "upgradeWhitespaceToElement: textNode.data[offset] should be a literal space");
 +    var space = textNode.ownerDocument.createElementNS(odf.Namespaces.textns, "text:s");
 +    space.appendChild(textNode.ownerDocument.createTextNode(" "));
 +    textNode.deleteData(offset, 1);
 +    if(offset > 0) {
 +      textNode = (textNode.splitText(offset))
 +    }
 +    textNode.parentNode.insertBefore(space, textNode);
 +    return space
 +  }
 +  function upgradeWhitespacesAtPosition(position) {
 +    var iterator = getIteratorAtPosition(position), container, offset, i;
 +    iterator.previousPosition();
 +    iterator.previousPosition();
 +    for(i = -1;i <= 1;i += 1) {
 +      container = iterator.container();
 +      offset = iterator.unfilteredDomOffset();
 +      if(container.nodeType === Node.TEXT_NODE && (container.data[offset] === " " && odfUtils.isSignificantWhitespace(container, offset))) {
 +        container = upgradeWhitespaceToElement((container), offset);
 +        iterator.moveToEndOfNode(container)
 +      }
 +      iterator.nextPosition()
 +    }
 +  }
 +  this.upgradeWhitespacesAtPosition = upgradeWhitespacesAtPosition;
 +  this.downgradeWhitespacesAtPosition = function(position) {
 +    var iterator = getIteratorAtPosition(position), container, offset, firstSpaceElementChild, lastSpaceElementChild;
 +    container = iterator.container();
 +    offset = iterator.unfilteredDomOffset();
 +    while(!odfUtils.isCharacterElement(container) && container.childNodes[offset]) {
 +      container = container.childNodes[offset];
 +      offset = 0
 +    }
 +    if(container.nodeType === Node.TEXT_NODE) {
 +      container = container.parentNode
 +    }
 +    if(odfUtils.isDowngradableSpaceElement(container)) {
 +      firstSpaceElementChild = container.firstChild;
 +      lastSpaceElementChild = container.lastChild;
 +      domUtils.mergeIntoParent(container);
 +      if(lastSpaceElementChild !== firstSpaceElementChild) {
 +        domUtils.normalizeTextNodes(lastSpaceElementChild)
 +      }
 +      domUtils.normalizeTextNodes(firstSpaceElementChild)
 +    }
 +  };
 +  this.getParagraphStyleElement = getParagraphStyleElement;
 +  this.getParagraphElement = getParagraphElement;
 +  this.getParagraphStyleAttributes = getParagraphStyleAttributes;
-   this.getPositionInTextNode = getPositionInTextNode;
++  this.getTextNodeAtStep = getTextNodeAtStep;
 +  this.fixCursorPositions = function() {
 +    var rootConstrainedFilter = new core.PositionFilterChain;
 +    rootConstrainedFilter.addFilter("BaseFilter", filter);
 +    Object.keys(cursors).forEach(function(memberId) {
 +      var cursor = cursors[memberId], stepCounter = cursor.getStepCounter(), stepsSelectionLength, positionsToAdjustFocus, positionsToAdjustAnchor, positionsToAnchor, cursorMoved = false;
 +      rootConstrainedFilter.addFilter("RootFilter", self.createRootFilter(memberId));
 +      stepsSelectionLength = stepCounter.countStepsToPosition(cursor.getAnchorNode(), 0, rootConstrainedFilter);
 +      if(!stepCounter.isPositionWalkable(rootConstrainedFilter)) {
 +        cursorMoved = true;
 +        positionsToAdjustFocus = stepCounter.countPositionsToNearestStep(cursor.getNode(), 0, rootConstrainedFilter);
 +        positionsToAdjustAnchor = stepCounter.countPositionsToNearestStep(cursor.getAnchorNode(), 0, rootConstrainedFilter);
 +        cursor.move(positionsToAdjustFocus);
 +        if(stepsSelectionLength !== 0) {
 +          if(positionsToAdjustAnchor > 0) {
 +            stepsSelectionLength += 1
 +          }
 +          if(positionsToAdjustFocus > 0) {
 +            stepsSelectionLength -= 1
 +          }
 +          positionsToAnchor = stepCounter.countSteps(stepsSelectionLength, rootConstrainedFilter);
 +          cursor.move(positionsToAnchor);
 +          cursor.move(-positionsToAnchor, true)
 +        }
 +      }else {
 +        if(stepsSelectionLength === 0) {
 +          cursorMoved = true;
 +          cursor.move(0)
 +        }
 +      }
 +      if(cursorMoved) {
 +        self.emit(ops.OdtDocument.signalCursorMoved, cursor)
 +      }
 +      rootConstrainedFilter.removeFilter("RootFilter")
 +    })
 +  };
-   this.getWalkableParagraphLength = function(paragraph) {
-     var iterator = getIteratorAtPosition(0), length = 0;
-     iterator.setUnfilteredPosition(paragraph, 0);
-     do {
-       if(getParagraphElement(iterator.container()) !== paragraph) {
-         return length
-       }
-       if(filter.acceptPosition(iterator) === FILTER_ACCEPT) {
-         length += 1
-       }
-     }while(iterator.nextPosition());
-     return length
-   };
 +  this.getDistanceFromCursor = function(memberid, node, offset) {
-     var counter, cursor = cursors[memberid], steps = 0;
++    var cursor = cursors[memberid], focusPosition, targetPosition;
 +    runtime.assert(node !== null && node !== undefined, "OdtDocument.getDistanceFromCursor called without node");
 +    if(cursor) {
-       counter = cursor.getStepCounter().countStepsToPosition;
-       steps = counter(node, offset, filter)
++      focusPosition = stepsTranslator.convertDomPointToSteps(cursor.getNode(), 0);
++      targetPosition = stepsTranslator.convertDomPointToSteps(node, offset)
 +    }
-     return steps
++    return targetPosition - focusPosition
 +  };
 +  this.getCursorPosition = function(memberid) {
-     return-self.getDistanceFromCursor(memberid, getRootNode(), 0)
++    var cursor = cursors[memberid];
++    return cursor ? stepsTranslator.convertDomPointToSteps(cursor.getNode(), 0) : 0
 +  };
 +  this.getCursorSelection = function(memberid) {
-     var counter, cursor = cursors[memberid], focusPosition = 0, stepsToAnchor = 0;
++    var cursor = cursors[memberid], focusPosition = 0, anchorPosition = 0;
 +    if(cursor) {
-       counter = cursor.getStepCounter().countStepsToPosition;
-       focusPosition = -counter(getRootNode(), 0, filter);
-       stepsToAnchor = counter(cursor.getAnchorNode(), 0, filter)
++      focusPosition = stepsTranslator.convertDomPointToSteps(cursor.getNode(), 0);
++      anchorPosition = stepsTranslator.convertDomPointToSteps(cursor.getAnchorNode(), 0)
 +    }
-     return{position:focusPosition + stepsToAnchor, length:-stepsToAnchor}
++    return{position:anchorPosition, length:focusPosition - anchorPosition}
 +  };
 +  this.getPositionFilter = function() {
 +    return filter
 +  };
 +  this.getOdfCanvas = function() {
 +    return odfCanvas
 +  };
 +  this.getRootNode = getRootNode;
-   this.getDOM = function() {
-     return(getRootNode().ownerDocument)
-   };
 +  this.getCursor = function(memberid) {
 +    return cursors[memberid]
 +  };
 +  this.getCursors = function() {
 +    var list = [], i;
 +    for(i in cursors) {
 +      if(cursors.hasOwnProperty(i)) {
 +        list.push(cursors[i])
 +      }
 +    }
 +    return list
 +  };
 +  this.addCursor = function(cursor) {
 +    runtime.assert(Boolean(cursor), "OdtDocument::addCursor without cursor");
 +    var distanceToFirstTextNode = cursor.getStepCounter().countSteps(1, filter), memberid = cursor.getMemberId();
 +    runtime.assert(typeof memberid === "string", "OdtDocument::addCursor has cursor without memberid");
 +    runtime.assert(!cursors[memberid], "OdtDocument::addCursor is adding a duplicate cursor with memberid " + memberid);
 +    cursor.move(distanceToFirstTextNode);
 +    cursors[memberid] = cursor
 +  };
 +  this.removeCursor = function(memberid) {
 +    var cursor = cursors[memberid];
 +    if(cursor) {
 +      cursor.removeFromOdtDocument();
 +      delete cursors[memberid];
 +      self.emit(ops.OdtDocument.signalCursorRemoved, memberid);
 +      return true
 +    }
 +    return false
 +  };
 +  this.getMetaData = function(metadataId) {
 +    var node = odfCanvas.odfContainer().rootElement.firstChild;
 +    while(node && node.localName !== "meta") {
 +      node = node.nextSibling
 +    }
 +    node = node && node.firstChild;
 +    while(node && node.localName !== metadataId) {
 +      node = node.nextSibling
 +    }
 +    node = node && node.firstChild;
 +    while(node && node.nodeType !== Node.TEXT_NODE) {
 +      node = node.nextSibling
 +    }
 +    return node ? node.data : null
 +  };
 +  this.getFormatting = function() {
 +    return odfCanvas.getFormatting()
 +  };
 +  this.emit = function(eventid, args) {
 +    eventNotifier.emit(eventid, args)
 +  };
 +  this.subscribe = function(eventid, cb) {
 +    eventNotifier.subscribe(eventid, cb)
 +  };
 +  this.unsubscribe = function(eventid, cb) {
 +    eventNotifier.unsubscribe(eventid, cb)
 +  };
 +  this.createRootFilter = function(inputMemberId) {
 +    return new RootFilter(inputMemberId)
 +  };
 +  this.close = function(callback) {
 +    callback()
 +  };
 +  this.destroy = function(callback) {
 +    callback()
 +  };
 +  function init() {
-     filter = new TextPositionFilter;
++    filter = new ops.TextPositionFilter(getRootNode);
 +    odfUtils = new odf.OdfUtils;
-     domUtils = new core.DomUtils
++    domUtils = new core.DomUtils;
++    stepsTranslator = new ops.StepsTranslator(getRootNode, gui.SelectionMover.createPositionIterator, filter, 500);
++    eventNotifier.subscribe(ops.OdtDocument.signalStepsInserted, stepsTranslator.handleStepsInserted);
++    eventNotifier.subscribe(ops.OdtDocument.signalStepsRemoved, stepsTranslator.handleStepsRemoved)
 +  }
 +  init()
 +};
 +ops.OdtDocument.signalCursorAdded = "cursor/added";
 +ops.OdtDocument.signalCursorRemoved = "cursor/removed";
 +ops.OdtDocument.signalCursorMoved = "cursor/moved";
 +ops.OdtDocument.signalParagraphChanged = "paragraph/changed";
 +ops.OdtDocument.signalTableAdded = "table/added";
 +ops.OdtDocument.signalCommonStyleCreated = "style/created";
 +ops.OdtDocument.signalCommonStyleDeleted = "style/deleted";
 +ops.OdtDocument.signalParagraphStyleModified = "paragraphstyle/modified";
 +ops.OdtDocument.signalOperationExecuted = "operation/executed";
 +ops.OdtDocument.signalUndoStackChanged = "undo/changed";
++ops.OdtDocument.signalStepsInserted = "steps/inserted";
++ops.OdtDocument.signalStepsRemoved = "steps/removed";
 +(function() {
 +  return ops.OdtDocument
 +})();
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.TrivialMemberModel");
 +runtime.loadClass("ops.TrivialOperationRouter");
 +runtime.loadClass("ops.OperationFactory");
 +runtime.loadClass("ops.OdtDocument");
 +ops.Session = function Session(odfCanvas) {
 +  var self = this, operationFactory = new ops.OperationFactory, odtDocument = new ops.OdtDocument(odfCanvas), memberModel = new ops.TrivialMemberModel, operationRouter = null;
 +  this.setMemberModel = function(uModel) {
 +    memberModel = uModel
 +  };
 +  this.setOperationFactory = function(opFactory) {
 +    operationFactory = opFactory;
 +    if(operationRouter) {
 +      operationRouter.setOperationFactory(operationFactory)
 +    }
 +  };
 +  this.setOperationRouter = function(opRouter) {
 +    operationRouter = opRouter;
 +    opRouter.setPlaybackFunction(function(op) {
 +      op.execute(odtDocument);
 +      odtDocument.emit(ops.OdtDocument.signalOperationExecuted, op)
 +    });
 +    opRouter.setOperationFactory(operationFactory)
 +  };
 +  this.getMemberModel = function() {
 +    return memberModel
 +  };
 +  this.getOperationFactory = function() {
 +    return operationFactory
 +  };
 +  this.getOdtDocument = function() {
 +    return odtDocument
 +  };
 +  this.enqueue = function(ops) {
 +    operationRouter.push(ops)
 +  };
 +  this.close = function(callback) {
 +    operationRouter.close(function(err) {
 +      if(err) {
 +        callback(err)
 +      }else {
 +        memberModel.close(function(err) {
 +          if(err) {
 +            callback(err)
 +          }else {
 +            odtDocument.close(callback)
 +          }
 +        })
 +      }
 +    })
 +  };
 +  this.destroy = function(callback) {
 +    odtDocument.destroy(callback)
 +  };
 +  function init() {
 +    self.setOperationRouter(new ops.TrivialOperationRouter)
 +  }
 +  init()
 +};
 +var webodf_css = "@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);\n at namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);\n at namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);\n at namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);\n at namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);\n at namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);\n at namespa [...]
 +
diff --cc apps/documents/js/3rdparty/webodf/webodf.js
index 1452110,0000000..ec4dc8f
mode 100644,000000..100644
--- a/apps/documents/js/3rdparty/webodf/webodf.js
+++ b/apps/documents/js/3rdparty/webodf/webodf.js
@@@ -1,2919 -1,0 +1,3051 @@@
 +// Input 0
 +/*
 +
 +
 + Copyright (C) 2012 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +var core={},gui={},xmldom={},odf={},ops={};
 +// Input 1
- function Runtime(){}Runtime.ByteArray=function(e){};Runtime.prototype.getVariable=function(e){};Runtime.prototype.toJson=function(e){};Runtime.prototype.fromJson=function(e){};Runtime.ByteArray.prototype.slice=function(e,h){};Runtime.ByteArray.prototype.length=0;Runtime.prototype.byteArrayFromArray=function(e){};Runtime.prototype.byteArrayFromString=function(e,h){};Runtime.prototype.byteArrayToString=function(e,h){};Runtime.prototype.concatByteArrays=function(e,h){};
- Runtime.prototype.read=function(e,h,f,n){};Runtime.prototype.readFile=function(e,h,f){};Runtime.prototype.readFileSync=function(e,h){};Runtime.prototype.loadXML=function(e,h){};Runtime.prototype.writeFile=function(e,h,f){};Runtime.prototype.isFile=function(e,h){};Runtime.prototype.getFileSize=function(e,h){};Runtime.prototype.deleteFile=function(e,h){};Runtime.prototype.log=function(e,h){};Runtime.prototype.setTimeout=function(e,h){};Runtime.prototype.clearTimeout=function(e){};
- Runtime.prototype.libraryPaths=function(){};Runtime.prototype.type=function(){};Runtime.prototype.getDOMImplementation=function(){};Runtime.prototype.parseXML=function(e){};Runtime.prototype.getWindow=function(){};Runtime.prototype.assert=function(e,h,f){};var IS_COMPILED_CODE=!0;
- Runtime.byteArrayToString=function(e,h){function f(f){var c="",b,a=f.length;for(b=0;b<a;b+=1)c+=String.fromCharCode(f[b]&255);return c}function n(f){var c="",b,a=f.length,d,k,g,q;for(b=0;b<a;b+=1)d=f[b],128>d?c+=String.fromCharCode(d):(b+=1,k=f[b],194<=d&&224>d?c+=String.fromCharCode((d&31)<<6|k&63):(b+=1,g=f[b],224<=d&&240>d?c+=String.fromCharCode((d&15)<<12|(k&63)<<6|g&63):(b+=1,q=f[b],240<=d&&245>d&&(d=(d&7)<<18|(k&63)<<12|(g&63)<<6|q&63,d-=65536,c+=String.fromCharCode((d>>10)+55296, [...]
- return c}var m;"utf8"===h?m=n(e):("binary"!==h&&this.log("Unsupported encoding: "+h),m=f(e));return m};Runtime.getVariable=function(e){try{return eval(e)}catch(h){}};Runtime.toJson=function(e){return JSON.stringify(e)};Runtime.fromJson=function(e){return JSON.parse(e)};Runtime.getFunctionName=function(e){return void 0===e.name?(e=/function\s+(\w+)/.exec(e))&&e[1]:e.name};
- function BrowserRuntime(e){function h(c,b){var a,d,k;void 0!==b?k=c:b=c;e?(d=e.ownerDocument,k&&(a=d.createElement("span"),a.className=k,a.appendChild(d.createTextNode(k)),e.appendChild(a),e.appendChild(d.createTextNode(" "))),a=d.createElement("span"),0<b.length&&"<"===b[0]?a.innerHTML=b:a.appendChild(d.createTextNode(b)),e.appendChild(a),e.appendChild(d.createElement("br"))):console&&console.log(b);"alert"===k&&alert(b)}function f(c,b,a){function d(){var d;4===k.readyState&&(0!==k.sta [...]
- 200===k.status||0===k.status?(d="binary"===b?null!==k.responseBody&&"undefined"!==String(typeof VBArray)?(new VBArray(k.responseBody)).toArray():n.byteArrayFromString(k.responseText,"binary"):k.responseText,m[c]=d,a(null,d)):a(k.responseText||k.statusText):a("File "+c+" is empty."))}if(m.hasOwnProperty(c))a(null,m[c]);else{var k=new XMLHttpRequest;k.open("GET",c,!0);k.onreadystatechange=d;k.overrideMimeType&&("binary"!==b?k.overrideMimeType("text/plain; charset="+b):k.overrideMimeType(" [...]
- try{k.send(null)}catch(g){a(g.message)}}}var n=this,m={},p=window.ArrayBuffer&&window.Uint8Array;p&&(Uint8Array.prototype.slice=function(c,b){void 0===b&&(void 0===c&&(c=0),b=this.length);var a=this.subarray(c,b),d,k;b-=c;d=new Uint8Array(new ArrayBuffer(b));for(k=0;k<b;k+=1)d[k]=a[k];return d});this.ByteArray=p?function(c){return new Uint8Array(new ArrayBuffer(c))}:function(c){var b=[];b.length=c;return b};this.concatByteArrays=p?function(c,b){var a,d=c.length,k=b.length,g=new this.Byt [...]
- for(a=0;a<d;a+=1)g[a]=c[a];for(a=0;a<k;a+=1)g[a+d]=b[a];return g}:function(c,b){return c.concat(b)};this.byteArrayFromArray=function(c){return c.slice()};this.byteArrayFromString=function(c,b){var a;if("utf8"===b){a=c.length;var d,k,g,q=0;for(k=0;k<a;k+=1)g=c.charCodeAt(k),q+=1+(128<g)+(2048<g);d=new n.ByteArray(q);for(k=q=0;k<a;k+=1)g=c.charCodeAt(k),128>g?(d[q]=g,q+=1):2048>g?(d[q]=192|g>>>6,d[q+1]=128|g&63,q+=2):(d[q]=224|g>>>12&15,d[q+1]=128|g>>>6&63,d[q+2]=128|g&63,q+=3)}else for(" [...]
- b&&n.log("unknown encoding: "+b),a=c.length,d=new n.ByteArray(a),k=0;k<a;k+=1)d[k]=c.charCodeAt(k)&255;return a=d};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.readFile=f;this.read=function(c,b,a,d){function k(){var k;4===g.readyState&&(0!==g.status||g.responseText?200===g.status||0===g.status?(g.response?(k=g.response,k=new Uint8Array(k)):k=null!==g.responseBody&&"undefined"!==String [...]
- (new VBArray(g.responseBody)).toArray():n.byteArrayFromString(g.responseText,"binary"),m[c]=k,d(null,k.slice(b,b+a))):d(g.responseText||g.statusText):d("File "+c+" is empty."))}if(m.hasOwnProperty(c))d(null,m[c].slice(b,b+a));else{var g=new XMLHttpRequest;g.open("GET",c,!0);g.onreadystatechange=k;g.overrideMimeType&&g.overrideMimeType("text/plain; charset=x-user-defined");g.responseType="arraybuffer";try{g.send(null)}catch(q){d(q.message)}}};this.readFileSync=function(c,b){var a=new XML [...]
- d;a.open("GET",c,!1);a.overrideMimeType&&("binary"!==b?a.overrideMimeType("text/plain; charset="+b):a.overrideMimeType("text/plain; charset=x-user-defined"));try{if(a.send(null),200===a.status||0===a.status)d=a.responseText}catch(k){}return d};this.writeFile=function(c,b,a){m[c]=b;var d=new XMLHttpRequest;d.open("PUT",c,!0);d.onreadystatechange=function(){4===d.readyState&&(0!==d.status||d.responseText?200<=d.status&&300>d.status||0===d.status?a(null):a("Status "+String(d.status)+": "+d [...]
- d.statusText):a("File "+c+" is empty."))};b=b.buffer&&!d.sendAsBinary?b.buffer:n.byteArrayToString(b,"binary");try{d.sendAsBinary?d.sendAsBinary(b):d.send(b)}catch(k){n.log("HUH? "+k+" "+b),a(k.message)}};this.deleteFile=function(c,b){delete m[c];var a=new XMLHttpRequest;a.open("DELETE",c,!0);a.onreadystatechange=function(){4===a.readyState&&(200>a.status&&300<=a.status?b(a.responseText):b(null))};a.send(null)};this.loadXML=function(c,b){var a=new XMLHttpRequest;a.open("GET",c,!0);a.ove [...]
- a.overrideMimeType("text/xml");a.onreadystatechange=function(){4===a.readyState&&(0!==a.status||a.responseText?200===a.status||0===a.status?b(null,a.responseXML):b(a.responseText):b("File "+c+" is empty."))};try{a.send(null)}catch(d){b(d.message)}};this.isFile=function(c,b){n.getFileSize(c,function(a){b(-1!==a)})};this.getFileSize=function(c,b){var a=new XMLHttpRequest;a.open("HEAD",c,!0);a.onreadystatechange=function(){if(4===a.readyState){var d=a.getResponseHeader("Content-Length");d? [...]
- 10)):f(c,"binary",function(a,d){a?b(-1):b(d.length)})}};a.send(null)};this.log=h;this.assert=function(c,b,a){if(!c)throw h("alert","ASSERTION FAILED:\n"+b),a&&a(),b;};this.setTimeout=function(c,b){return setTimeout(function(){c()},b)};this.clearTimeout=function(c){clearTimeout(c)};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(){};this.type=function(){return"BrowserRuntime"};this.getDOMImplementation=function(){return window.document.implementation};this.p [...]
- "text/xml")};this.exit=function(c){h("Calling exit with code "+String(c)+", but exit() is not implemented.")};this.getWindow=function(){return window}}
- function NodeJSRuntime(){function e(b,a,d){b=n.resolve(m,b);"binary"!==a?f.readFile(b,a,d):f.readFile(b,null,d)}var h=this,f=require("fs"),n=require("path"),m="",p,c;this.ByteArray=function(b){return new Buffer(b)};this.byteArrayFromArray=function(b){var a=new Buffer(b.length),d,c=b.length;for(d=0;d<c;d+=1)a[d]=b[d];return a};this.concatByteArrays=function(b,a){var d=new Buffer(b.length+a.length);b.copy(d,0,0);a.copy(d,b.length,0);return d};this.byteArrayFromString=function(b,a){return  [...]
- a)};this.byteArrayToString=function(b,a){return b.toString(a)};this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.readFile=e;this.loadXML=function(b,a){e(b,"utf-8",function(d,b){if(d)return a(d);a(null,h.parseXML(b))})};this.writeFile=function(b,a,d){b=n.resolve(m,b);f.writeFile(b,a,"binary",function(a){d(a||null)})};this.deleteFile=function(b,a){b=n.resolve(m,b);f.unlink(b,a)};this.read=function(b,a,d,c){b=n.resolve(m,b);f.open(b,"r+",66 [...]
- b){if(g)c(g);else{var l=new Buffer(d);f.read(b,l,0,d,a,function(a){f.close(b);c(a,l)})}})};this.readFileSync=function(b,a){return a?"binary"===a?f.readFileSync(b,null):f.readFileSync(b,a):""};this.isFile=function(b,a){b=n.resolve(m,b);f.stat(b,function(d,b){a(!d&&b.isFile())})};this.getFileSize=function(b,a){b=n.resolve(m,b);f.stat(b,function(d,b){d?a(-1):a(b.size)})};this.log=function(b,a){var d;void 0!==a?d=b:a=b;"alert"===d&&process.stderr.write("\n!!!!! ALERT !!!!!\n");process.stder [...]
- "\n");"alert"===d&&process.stderr.write("!!!!! ALERT !!!!!\n")};this.assert=function(b,a,d){b||(process.stderr.write("ASSERTION FAILED: "+a),d&&d())};this.setTimeout=function(b,a){return setTimeout(function(){b()},a)};this.clearTimeout=function(b){clearTimeout(b)};this.libraryPaths=function(){return[__dirname]};this.setCurrentDirectory=function(b){m=b};this.currentDirectory=function(){return m};this.type=function(){return"NodeJSRuntime"};this.getDOMImplementation=function(){return c};th [...]
- function(b){return p.parseFromString(b,"text/xml")};this.exit=process.exit;this.getWindow=function(){return null};p=new (require("xmldom").DOMParser);c=h.parseXML("<a/>").implementation}
- function RhinoRuntime(){function e(c,b){var a;void 0!==b?a=c:b=c;"alert"===a&&print("\n!!!!! ALERT !!!!!");print(b);"alert"===a&&print("!!!!! ALERT !!!!!")}var h=this,f=Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(),n,m,p="";f.setValidating(!1);f.setNamespaceAware(!0);f.setExpandEntityReferences(!1);f.setSchema(null);m=Packages.org.xml.sax.EntityResolver({resolveEntity:function(c,b){var a=new Packages.java.io.FileReader(b);return new Packages.org.xml.sax.InputSource(a)} [...]
- n.setEntityResolver(m);this.ByteArray=function(c){return[c]};this.byteArrayFromArray=function(c){return c};this.byteArrayFromString=function(c,b){var a=[],d,k=c.length;for(d=0;d<k;d+=1)a[d]=c.charCodeAt(d)&255;return a};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.concatByteArrays=function(c,b){return c.concat(b)};this.loadXML=function(c,b){var a=new Packages.java.io.File(c),d;try{d=n [...]
- b(k);return}b(null,d)};this.readFile=function(c,b,a){p&&(c=p+"/"+c);var d=new Packages.java.io.File(c),k="binary"===b?"latin1":b;d.isFile()?(c=readFile(c,k),"binary"===b&&(c=h.byteArrayFromString(c,"binary")),a(null,c)):a(c+" is not a file.")};this.writeFile=function(c,b,a){p&&(c=p+"/"+c);c=new Packages.java.io.FileOutputStream(c);var d,k=b.length;for(d=0;d<k;d+=1)c.write(b[d]);c.close();a(null)};this.deleteFile=function(c,b){p&&(c=p+"/"+c);(new Packages.java.io.File(c))["delete"]()?b(n [...]
- c)};this.read=function(c,b,a,d){p&&(c=p+"/"+c);var k;k=c;var g="binary";(new Packages.java.io.File(k)).isFile()?("binary"===g&&(g="latin1"),k=readFile(k,g)):k=null;k?d(null,this.byteArrayFromString(k.substring(b,b+a),"binary")):d("Cannot read "+c)};this.readFileSync=function(c,b){return b?readFile(c,b):""};this.isFile=function(c,b){p&&(c=p+"/"+c);var a=new Packages.java.io.File(c);b(a.isFile())};this.getFileSize=function(c,b){p&&(c=p+"/"+c);var a=new Packages.java.io.File(c);b(a.length( [...]
- e;this.assert=function(c,b,a){c||(e("alert","ASSERTION FAILED: "+b),a&&a())};this.setTimeout=function(c){c();return 0};this.clearTimeout=function(){};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(c){p=c};this.currentDirectory=function(){return p};this.type=function(){return"RhinoRuntime"};this.getDOMImplementation=function(){return n.getDOMImplementation()};this.parseXML=function(c){return n.parse(c)};this.exit=quit;this.getWindow=function(){return null}}
++function Runtime(){}Runtime.ByteArray=function(h){};Runtime.prototype.getVariable=function(h){};Runtime.prototype.toJson=function(h){};Runtime.prototype.fromJson=function(h){};Runtime.ByteArray.prototype.slice=function(h,m){};Runtime.ByteArray.prototype.length=0;Runtime.prototype.byteArrayFromArray=function(h){};Runtime.prototype.byteArrayFromString=function(h,m){};Runtime.prototype.byteArrayToString=function(h,m){};Runtime.prototype.concatByteArrays=function(h,m){};
++Runtime.prototype.read=function(h,m,e,p){};Runtime.prototype.readFile=function(h,m,e){};Runtime.prototype.readFileSync=function(h,m){};Runtime.prototype.loadXML=function(h,m){};Runtime.prototype.writeFile=function(h,m,e){};Runtime.prototype.isFile=function(h,m){};Runtime.prototype.getFileSize=function(h,m){};Runtime.prototype.deleteFile=function(h,m){};Runtime.prototype.log=function(h,m){};Runtime.prototype.setTimeout=function(h,m){};Runtime.prototype.clearTimeout=function(h){};
++Runtime.prototype.libraryPaths=function(){};Runtime.prototype.type=function(){};Runtime.prototype.getDOMImplementation=function(){};Runtime.prototype.parseXML=function(h){};Runtime.prototype.getWindow=function(){};Runtime.prototype.assert=function(h,m,e){};var IS_COMPILED_CODE=!0;
++Runtime.byteArrayToString=function(h,m){function e(e){var a="",d,f=e.length;for(d=0;d<f;d+=1)a+=String.fromCharCode(e[d]&255);return a}function p(e){var a="",d,f=e.length,b,k,c,g;for(d=0;d<f;d+=1)b=e[d],128>b?a+=String.fromCharCode(b):(d+=1,k=e[d],194<=b&&224>b?a+=String.fromCharCode((b&31)<<6|k&63):(d+=1,c=e[d],224<=b&&240>b?a+=String.fromCharCode((b&15)<<12|(k&63)<<6|c&63):(d+=1,g=e[d],240<=b&&245>b&&(b=(b&7)<<18|(k&63)<<12|(c&63)<<6|g&63,b-=65536,a+=String.fromCharCode((b>>10)+55296, [...]
++return a}var l;"utf8"===m?l=p(h):("binary"!==m&&this.log("Unsupported encoding: "+m),l=e(h));return l};Runtime.getVariable=function(h){try{return eval(h)}catch(m){}};Runtime.toJson=function(h){return JSON.stringify(h)};Runtime.fromJson=function(h){return JSON.parse(h)};Runtime.getFunctionName=function(h){return void 0===h.name?(h=/function\s+(\w+)/.exec(h))&&h[1]:h.name};
++function BrowserRuntime(h){function m(a,d){var f,b,k;void 0!==d?k=a:d=a;h?(b=h.ownerDocument,k&&(f=b.createElement("span"),f.className=k,f.appendChild(b.createTextNode(k)),h.appendChild(f),h.appendChild(b.createTextNode(" "))),f=b.createElement("span"),0<d.length&&"<"===d[0]?f.innerHTML=d:f.appendChild(b.createTextNode(d)),h.appendChild(f),h.appendChild(b.createElement("br"))):console&&console.log(d);"alert"===k&&alert(d)}function e(a,d,f){function b(){var c;4===k.readyState&&(0!==k.sta [...]
++200===k.status||0===k.status?(c="binary"===d?null!==k.responseBody&&"undefined"!==String(typeof VBArray)?(new VBArray(k.responseBody)).toArray():p.byteArrayFromString(k.responseText,"binary"):k.responseText,l[a]=c,f(null,c)):f(k.responseText||k.statusText):f("File "+a+" is empty."))}if(l.hasOwnProperty(a))f(null,l[a]);else{var k=new XMLHttpRequest;k.open("GET",a,!0);k.onreadystatechange=b;k.overrideMimeType&&("binary"!==d?k.overrideMimeType("text/plain; charset="+d):k.overrideMimeType(" [...]
++try{k.send(null)}catch(c){f(c.message)}}}var p=this,l={},q=window.ArrayBuffer&&window.Uint8Array;q&&(Uint8Array.prototype.slice=function(a,d){void 0===d&&(void 0===a&&(a=0),d=this.length);var f=this.subarray(a,d),b,k;d-=a;b=new Uint8Array(new ArrayBuffer(d));for(k=0;k<d;k+=1)b[k]=f[k];return b});this.ByteArray=q?function(a){return new Uint8Array(new ArrayBuffer(a))}:function(a){var d=[];d.length=a;return d};this.concatByteArrays=q?function(a,d){var f,b=a.length,k=d.length,c=new this.Byt [...]
++for(f=0;f<b;f+=1)c[f]=a[f];for(f=0;f<k;f+=1)c[f+b]=d[f];return c}:function(a,d){return a.concat(d)};this.byteArrayFromArray=function(a){return a.slice()};this.byteArrayFromString=function(a,d){var f;if("utf8"===d){f=a.length;var b,k,c,g=0;for(k=0;k<f;k+=1)c=a.charCodeAt(k),g+=1+(128<c)+(2048<c);b=new p.ByteArray(g);for(k=g=0;k<f;k+=1)c=a.charCodeAt(k),128>c?(b[g]=c,g+=1):2048>c?(b[g]=192|c>>>6,b[g+1]=128|c&63,g+=2):(b[g]=224|c>>>12&15,b[g+1]=128|c>>>6&63,b[g+2]=128|c&63,g+=3)}else for(" [...]
++d&&p.log("unknown encoding: "+d),f=a.length,b=new p.ByteArray(f),k=0;k<f;k+=1)b[k]=a.charCodeAt(k)&255;return f=b};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.readFile=e;this.read=function(a,d,f,b){function k(){var g;4===c.readyState&&(0!==c.status||c.responseText?200===c.status||0===c.status?(c.response?(g=c.response,g=new Uint8Array(g)):g=null!==c.responseBody&&"undefined"!==String [...]
++(new VBArray(c.responseBody)).toArray():p.byteArrayFromString(c.responseText,"binary"),l[a]=g,b(null,g.slice(d,d+f))):b(c.responseText||c.statusText):b("File "+a+" is empty."))}if(l.hasOwnProperty(a))b(null,l[a].slice(d,d+f));else{var c=new XMLHttpRequest;c.open("GET",a,!0);c.onreadystatechange=k;c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined");c.responseType="arraybuffer";try{c.send(null)}catch(g){b(g.message)}}};this.readFileSync=function(a,d){var f=new XML [...]
++b;f.open("GET",a,!1);f.overrideMimeType&&("binary"!==d?f.overrideMimeType("text/plain; charset="+d):f.overrideMimeType("text/plain; charset=x-user-defined"));try{if(f.send(null),200===f.status||0===f.status)b=f.responseText}catch(k){}return b};this.writeFile=function(a,d,f){l[a]=d;var b=new XMLHttpRequest;b.open("PUT",a,!0);b.onreadystatechange=function(){4===b.readyState&&(0!==b.status||b.responseText?200<=b.status&&300>b.status||0===b.status?f(null):f("Status "+String(b.status)+": "+b [...]
++b.statusText):f("File "+a+" is empty."))};d=d.buffer&&!b.sendAsBinary?d.buffer:p.byteArrayToString(d,"binary");try{b.sendAsBinary?b.sendAsBinary(d):b.send(d)}catch(k){p.log("HUH? "+k+" "+d),f(k.message)}};this.deleteFile=function(a,d){delete l[a];var f=new XMLHttpRequest;f.open("DELETE",a,!0);f.onreadystatechange=function(){4===f.readyState&&(200>f.status&&300<=f.status?d(f.responseText):d(null))};f.send(null)};this.loadXML=function(a,d){var f=new XMLHttpRequest;f.open("GET",a,!0);f.ove [...]
++f.overrideMimeType("text/xml");f.onreadystatechange=function(){4===f.readyState&&(0!==f.status||f.responseText?200===f.status||0===f.status?d(null,f.responseXML):d(f.responseText):d("File "+a+" is empty."))};try{f.send(null)}catch(b){d(b.message)}};this.isFile=function(a,d){p.getFileSize(a,function(a){d(-1!==a)})};this.getFileSize=function(a,d){var f=new XMLHttpRequest;f.open("HEAD",a,!0);f.onreadystatechange=function(){if(4===f.readyState){var b=f.getResponseHeader("Content-Length");b? [...]
++10)):e(a,"binary",function(b,c){b?d(-1):d(c.length)})}};f.send(null)};this.log=m;this.assert=function(a,d,f){if(!a)throw m("alert","ASSERTION FAILED:\n"+d),f&&f(),d;};this.setTimeout=function(a,d){return setTimeout(function(){a()},d)};this.clearTimeout=function(a){clearTimeout(a)};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(){};this.type=function(){return"BrowserRuntime"};this.getDOMImplementation=function(){return window.document.implementation};this.p [...]
++"text/xml")};this.exit=function(a){m("Calling exit with code "+String(a)+", but exit() is not implemented.")};this.getWindow=function(){return window}}
++function NodeJSRuntime(){function h(d,a,b){d=p.resolve(l,d);"binary"!==a?e.readFile(d,a,b):e.readFile(d,null,b)}var m=this,e=require("fs"),p=require("path"),l="",q,a;this.ByteArray=function(d){return new Buffer(d)};this.byteArrayFromArray=function(d){var a=new Buffer(d.length),b,k=d.length;for(b=0;b<k;b+=1)a[b]=d[b];return a};this.concatByteArrays=function(d,a){var b=new Buffer(d.length+a.length);d.copy(b,0,0);a.copy(b,d.length,0);return b};this.byteArrayFromString=function(d,a){return  [...]
++a)};this.byteArrayToString=function(d,a){return d.toString(a)};this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.readFile=h;this.loadXML=function(d,a){h(d,"utf-8",function(b,d){if(b)return a(b);a(null,m.parseXML(d))})};this.writeFile=function(d,a,b){d=p.resolve(l,d);e.writeFile(d,a,"binary",function(d){b(d||null)})};this.deleteFile=function(d,a){d=p.resolve(l,d);e.unlink(d,a)};this.read=function(d,a,b,k){d=p.resolve(l,d);e.open(d,"r+",66 [...]
++g){if(c)k(c);else{var d=new Buffer(b);e.read(g,d,0,b,a,function(c){e.close(g);k(c,d)})}})};this.readFileSync=function(d,a){return a?"binary"===a?e.readFileSync(d,null):e.readFileSync(d,a):""};this.isFile=function(a,f){a=p.resolve(l,a);e.stat(a,function(b,a){f(!b&&a.isFile())})};this.getFileSize=function(a,f){a=p.resolve(l,a);e.stat(a,function(b,a){b?f(-1):f(a.size)})};this.log=function(a,f){var b;void 0!==f?b=a:f=a;"alert"===b&&process.stderr.write("\n!!!!! ALERT !!!!!\n");process.stder [...]
++"\n");"alert"===b&&process.stderr.write("!!!!! ALERT !!!!!\n")};this.assert=function(a,f,b){a||(process.stderr.write("ASSERTION FAILED: "+f),b&&b())};this.setTimeout=function(a,f){return setTimeout(function(){a()},f)};this.clearTimeout=function(a){clearTimeout(a)};this.libraryPaths=function(){return[__dirname]};this.setCurrentDirectory=function(a){l=a};this.currentDirectory=function(){return l};this.type=function(){return"NodeJSRuntime"};this.getDOMImplementation=function(){return a};th [...]
++function(a){return q.parseFromString(a,"text/xml")};this.exit=process.exit;this.getWindow=function(){return null};q=new (require("xmldom").DOMParser);a=m.parseXML("<a/>").implementation}
++function RhinoRuntime(){function h(a,d){var f;void 0!==d?f=a:d=a;"alert"===f&&print("\n!!!!! ALERT !!!!!");print(d);"alert"===f&&print("!!!!! ALERT !!!!!")}var m=this,e=Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(),p,l,q="";e.setValidating(!1);e.setNamespaceAware(!0);e.setExpandEntityReferences(!1);e.setSchema(null);l=Packages.org.xml.sax.EntityResolver({resolveEntity:function(a,d){var f=new Packages.java.io.FileReader(d);return new Packages.org.xml.sax.InputSource(f)} [...]
++p.setEntityResolver(l);this.ByteArray=function(a){return[a]};this.byteArrayFromArray=function(a){return a};this.byteArrayFromString=function(a,d){var f=[],b,k=a.length;for(b=0;b<k;b+=1)f[b]=a.charCodeAt(b)&255;return f};this.byteArrayToString=Runtime.byteArrayToString;this.getVariable=Runtime.getVariable;this.fromJson=Runtime.fromJson;this.toJson=Runtime.toJson;this.concatByteArrays=function(a,d){return a.concat(d)};this.loadXML=function(a,d){var f=new Packages.java.io.File(a),b;try{b=p [...]
++d(k);return}d(null,b)};this.readFile=function(a,d,f){q&&(a=q+"/"+a);var b=new Packages.java.io.File(a),k="binary"===d?"latin1":d;b.isFile()?(a=readFile(a,k),"binary"===d&&(a=m.byteArrayFromString(a,"binary")),f(null,a)):f(a+" is not a file.")};this.writeFile=function(a,d,f){q&&(a=q+"/"+a);a=new Packages.java.io.FileOutputStream(a);var b,k=d.length;for(b=0;b<k;b+=1)a.write(d[b]);a.close();f(null)};this.deleteFile=function(a,d){q&&(a=q+"/"+a);(new Packages.java.io.File(a))["delete"]()?d(n [...]
++a)};this.read=function(a,d,f,b){q&&(a=q+"/"+a);var k;k=a;var c="binary";(new Packages.java.io.File(k)).isFile()?("binary"===c&&(c="latin1"),k=readFile(k,c)):k=null;k?b(null,this.byteArrayFromString(k.substring(d,d+f),"binary")):b("Cannot read "+a)};this.readFileSync=function(a,d){return d?readFile(a,d):""};this.isFile=function(a,d){q&&(a=q+"/"+a);var f=new Packages.java.io.File(a);d(f.isFile())};this.getFileSize=function(a,d){q&&(a=q+"/"+a);var f=new Packages.java.io.File(a);d(f.length( [...]
++h;this.assert=function(a,d,f){a||(h("alert","ASSERTION FAILED: "+d),f&&f())};this.setTimeout=function(a){a();return 0};this.clearTimeout=function(){};this.libraryPaths=function(){return["lib"]};this.setCurrentDirectory=function(a){q=a};this.currentDirectory=function(){return q};this.type=function(){return"RhinoRuntime"};this.getDOMImplementation=function(){return p.getDOMImplementation()};this.parseXML=function(a){return p.parse(a)};this.exit=quit;this.getWindow=function(){return null}}
 +var runtime=function(){return"undefined"!==String(typeof window)?new BrowserRuntime(window.document.getElementById("logoutput")):"undefined"!==String(typeof require)?new NodeJSRuntime:new RhinoRuntime}();
- (function(){function e(f){var e=f[0],h;h=eval("if (typeof "+e+" === 'undefined') {eval('"+e+" = {};');}"+e);for(e=1;e<f.length-1;e+=1)h=h.hasOwnProperty(f[e])?h[f[e]]:h[f[e]]={};return h[f[f.length-1]]}var h={},f={};runtime.loadClass=function(n){function m(a){a=a.replace(/\./g,"/")+".js";var d=runtime.libraryPaths(),b,g,c;runtime.currentDirectory&&d.push(runtime.currentDirectory());for(b=0;b<d.length;b+=1){g=d[b];if(!f.hasOwnProperty(g))try{c=runtime.readFileSync(d[b]+"/manifest.js","ut [...]
- c&&c.length?eval(c):null}catch(l){f[g]=null,runtime.log("Cannot load manifest for "+g+".")}c=null;if((g=f[g])&&g.indexOf&&-1!==g.indexOf(a))return d[b]+"/"+a}return null}function p(a){var d,b;b=m(a);if(!b)throw a+" is not listed in any manifest.js.";try{d=runtime.readFileSync(b,"utf8")}catch(g){throw runtime.log("Error loading "+a+" "+g),g;}if(void 0===d)throw"Cannot load class "+a;d=d+("\n//# sourceURL="+b)+("\n//@ sourceURL="+b);try{d=eval(a+" = eval(code);")}catch(c){throw runtime.lo [...]
- a+" "+c),c;}return d}if(!IS_COMPILED_CODE&&!h.hasOwnProperty(n)){var c=n.split("."),b;b=e(c);if(!b&&(b=p(n),!b||Runtime.getFunctionName(b)!==c[c.length-1]))throw runtime.log("Loaded code is not for "+c[c.length-1]),"Loaded code is not for "+c[c.length-1];h[n]=!0}}})();(function(){var e=function(){};runtime.getTranslator=function(){return e};runtime.setTranslator=function(h){e=h};runtime.tr=function(h){var f=e(h);return f&&"string"===String(typeof f)?f:h}})();
- (function(e){function h(f){if(f.length){var e=f[0];runtime.readFile(e,"utf8",function(h,p){function c(){var d;(d=eval(a))&&runtime.exit(d)}var b="",a=p;-1!==e.indexOf("/")&&(b=e.substring(0,e.indexOf("/")));runtime.setCurrentDirectory(b);h||null===a?(runtime.log(h),runtime.exit(1)):c.apply(null,f)})}}e=e?Array.prototype.slice.call(e):[];"NodeJSRuntime"===runtime.type()?h(process.argv.slice(2)):"RhinoRuntime"===runtime.type()?h(e):h(e.slice(1))})("undefined"!==String(typeof arguments)&&a [...]
++(function(){function h(e){var l=e[0],h;h=eval("if (typeof "+l+" === 'undefined') {eval('"+l+" = {};');}"+l);for(l=1;l<e.length-1;l+=1)h=h.hasOwnProperty(e[l])?h[e[l]]:h[e[l]]={};return h[e[e.length-1]]}var m={},e={};runtime.loadClass=function(p){function l(a){a=a.replace(/\./g,"/")+".js";var b=runtime.libraryPaths(),d,c,g;runtime.currentDirectory&&b.push(runtime.currentDirectory());for(d=0;d<b.length;d+=1){c=b[d];if(!e.hasOwnProperty(c))try{g=runtime.readFileSync(b[d]+"/manifest.js","ut [...]
++g&&g.length?eval(g):null}catch(n){e[c]=null,runtime.log("Cannot load manifest for "+c+".")}g=null;if((c=e[c])&&c.indexOf&&-1!==c.indexOf(a))return b[d]+"/"+a}return null}function q(a){var b,d;d=l(a);if(!d)throw a+" is not listed in any manifest.js.";try{b=runtime.readFileSync(d,"utf8")}catch(c){throw runtime.log("Error loading "+a+" "+c),c;}if(void 0===b)throw"Cannot load class "+a;b=b+("\n//# sourceURL="+d)+("\n//@ sourceURL="+d);try{b=eval(a+" = eval(code);")}catch(g){throw runtime.lo [...]
++a+" "+g),g;}return b}if(!IS_COMPILED_CODE&&!m.hasOwnProperty(p)){var a=p.split("."),d;d=h(a);if(!d&&(d=q(p),!d||Runtime.getFunctionName(d)!==a[a.length-1]))throw runtime.log("Loaded code is not for "+a[a.length-1]),"Loaded code is not for "+a[a.length-1];m[p]=!0}}})();(function(){var h=function(){};runtime.getTranslator=function(){return h};runtime.setTranslator=function(m){h=m};runtime.tr=function(m){var e=h(m);return e&&"string"===String(typeof e)?e:m}})();
++(function(h){function m(e){if(e.length){var h=e[0];runtime.readFile(h,"utf8",function(l,m){function a(){var b;(b=eval(f))&&runtime.exit(b)}var d="",f=m;-1!==h.indexOf("/")&&(d=h.substring(0,h.indexOf("/")));runtime.setCurrentDirectory(d);l||null===f?(runtime.log(l),runtime.exit(1)):a.apply(null,e)})}}h=h?Array.prototype.slice.call(h):[];"NodeJSRuntime"===runtime.type()?m(process.argv.slice(2)):"RhinoRuntime"===runtime.type()?m(h):m(h.slice(1))})("undefined"!==String(typeof arguments)&&a [...]
 +// Input 2
- core.Base64=function(){function e(a){var d=[],b,g=a.length;for(b=0;b<g;b+=1)d[b]=a.charCodeAt(b)&255;return d}function h(a){var d,b="",g,c=a.length-2;for(g=0;g<c;g+=3)d=a[g]<<16|a[g+1]<<8|a[g+2],b+=r[d>>>18],b+=r[d>>>12&63],b+=r[d>>>6&63],b+=r[d&63];g===c+1?(d=a[g]<<4,b+=r[d>>>6],b+=r[d&63],b+="=="):g===c&&(d=a[g]<<10|a[g+1]<<2,b+=r[d>>>12],b+=r[d>>>6&63],b+=r[d&63],b+="=");return b}function f(a){a=a.replace(/[^A-Za-z0-9+\/]+/g,"");var d=[],b=a.length%4,g,c=a.length,k;for(g=0;g<c;g+=4)k [...]
- 0)<<18|(t[a.charAt(g+1)]||0)<<12|(t[a.charAt(g+2)]||0)<<6|(t[a.charAt(g+3)]||0),d.push(k>>16,k>>8&255,k&255);d.length-=[0,0,2,1][b];return d}function n(a){var d=[],b,g=a.length,c;for(b=0;b<g;b+=1)c=a[b],128>c?d.push(c):2048>c?d.push(192|c>>>6,128|c&63):d.push(224|c>>>12&15,128|c>>>6&63,128|c&63);return d}function m(a){var d=[],b,g=a.length,c,k,l;for(b=0;b<g;b+=1)c=a[b],128>c?d.push(c):(b+=1,k=a[b],224>c?d.push((c&31)<<6|k&63):(b+=1,l=a[b],d.push((c&15)<<12|(k&63)<<6|l&63)));return d}fun [...]
- function c(a){return String.fromCharCode.apply(String,f(a))}function b(a){return m(e(a))}function a(a){a=m(a);for(var d="",b=0;b<a.length;)d+=String.fromCharCode.apply(String,a.slice(b,b+45E3)),b+=45E3;return d}function d(a,d,b){var g="",c,k,l;for(l=d;l<b;l+=1)d=a.charCodeAt(l)&255,128>d?g+=String.fromCharCode(d):(l+=1,c=a.charCodeAt(l)&255,224>d?g+=String.fromCharCode((d&31)<<6|c&63):(l+=1,k=a.charCodeAt(l)&255,g+=String.fromCharCode((d&15)<<12|(c&63)<<6|k&63)));return g}function k(a,b [...]
- k+c;q>a.length&&(q=a.length);l+=d(a,k,q);k=q;q=k===a.length;b(l,q)&&!q&&runtime.setTimeout(g,0)}var c=1E5,l="",k=0;a.length<c?b(d(a,0,a.length),!0):("string"!==typeof a&&(a=a.slice()),g())}function g(a){return n(e(a))}function q(a){return String.fromCharCode.apply(String,n(a))}function l(a){return String.fromCharCode.apply(String,n(e(a)))}var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=function(a){var d={},b,g;b=0;for(g=a.length;b<g;b+=1)d[a.charAt(b)]=b;retur [...]
- v,y=runtime.getWindow(),x,u;y&&y.btoa?(x=function(a){return y.btoa(a)},w=function(a){return x(l(a))}):(x=p,w=function(a){return h(g(a))});y&&y.atob?(u=function(a){return y.atob(a)},v=function(a){a=u(a);return d(a,0,a.length)}):(u=c,v=function(d){return a(f(d))});return function(){this.convertByteArrayToBase64=this.convertUTF8ArrayToBase64=h;this.convertBase64ToByteArray=this.convertBase64ToUTF8Array=f;this.convertUTF16ArrayToByteArray=this.convertUTF16ArrayToUTF8Array=n;this.convertByte [...]
- this.convertUTF8ArrayToUTF16Array=m;this.convertUTF8StringToBase64=p;this.convertBase64ToUTF8String=c;this.convertUTF8StringToUTF16Array=b;this.convertByteArrayToUTF16String=this.convertUTF8ArrayToUTF16String=a;this.convertUTF8StringToUTF16String=k;this.convertUTF16StringToByteArray=this.convertUTF16StringToUTF8Array=g;this.convertUTF16ArrayToUTF8String=q;this.convertUTF16StringToUTF8String=l;this.convertUTF16StringToBase64=w;this.convertBase64ToUTF16String=v;this.fromBase64=c;this.toBa [...]
- u;this.btoa=x;this.utob=l;this.btou=k;this.encode=w;this.encodeURI=function(a){return w(a).replace(/[+\/]/g,function(a){return"+"===a?"-":"_"}).replace(/\\=+$/,"")};this.decode=function(a){return v(a.replace(/[\-_]/g,function(a){return"-"===a?"+":"/"}))}}}();
++core.Base64=function(){function h(c){var g=[],b,a=c.length;for(b=0;b<a;b+=1)g[b]=c.charCodeAt(b)&255;return g}function m(c){var g,b="",a,d=c.length-2;for(a=0;a<d;a+=3)g=c[a]<<16|c[a+1]<<8|c[a+2],b+=r[g>>>18],b+=r[g>>>12&63],b+=r[g>>>6&63],b+=r[g&63];a===d+1?(g=c[a]<<4,b+=r[g>>>6],b+=r[g&63],b+="=="):a===d&&(g=c[a]<<10|c[a+1]<<2,b+=r[g>>>12],b+=r[g>>>6&63],b+=r[g&63],b+="=");return b}function e(c){c=c.replace(/[^A-Za-z0-9+\/]+/g,"");var g=[],b=c.length%4,a,d=c.length,n;for(a=0;a<d;a+=4)n [...]
++0)<<18|(u[c.charAt(a+1)]||0)<<12|(u[c.charAt(a+2)]||0)<<6|(u[c.charAt(a+3)]||0),g.push(n>>16,n>>8&255,n&255);g.length-=[0,0,2,1][b];return g}function p(c){var g=[],b,a=c.length,d;for(b=0;b<a;b+=1)d=c[b],128>d?g.push(d):2048>d?g.push(192|d>>>6,128|d&63):g.push(224|d>>>12&15,128|d>>>6&63,128|d&63);return g}function l(c){var g=[],b,a=c.length,d,n,f;for(b=0;b<a;b+=1)d=c[b],128>d?g.push(d):(b+=1,n=c[b],224>d?g.push((d&31)<<6|n&63):(b+=1,f=c[b],g.push((d&15)<<12|(n&63)<<6|f&63)));return g}fun [...]
++function a(c){return String.fromCharCode.apply(String,e(c))}function d(c){return l(h(c))}function f(c){c=l(c);for(var g="",b=0;b<c.length;)g+=String.fromCharCode.apply(String,c.slice(b,b+45E3)),b+=45E3;return g}function b(c,g,b){var a="",d,n,f;for(f=g;f<b;f+=1)g=c.charCodeAt(f)&255,128>g?a+=String.fromCharCode(g):(f+=1,d=c.charCodeAt(f)&255,224>g?a+=String.fromCharCode((g&31)<<6|d&63):(f+=1,n=c.charCodeAt(f)&255,a+=String.fromCharCode((g&15)<<12|(d&63)<<6|n&63)));return a}function k(c,g [...]
++f+d;k>c.length&&(k=c.length);n+=b(c,f,k);f=k;k=f===c.length;g(n,k)&&!k&&runtime.setTimeout(a,0)}var d=1E5,n="",f=0;c.length<d?g(b(c,0,c.length),!0):("string"!==typeof c&&(c=c.slice()),a())}function c(c){return p(h(c))}function g(c){return String.fromCharCode.apply(String,p(c))}function n(c){return String.fromCharCode.apply(String,p(h(c)))}var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=function(c){var g={},b,a;b=0;for(a=c.length;b<a;b+=1)g[c.charAt(b)]=b;retur [...]
++x,w=runtime.getWindow(),v,t;w&&w.btoa?(v=function(c){return w.btoa(c)},y=function(c){return v(n(c))}):(v=q,y=function(g){return m(c(g))});w&&w.atob?(t=function(c){return w.atob(c)},x=function(c){c=t(c);return b(c,0,c.length)}):(t=a,x=function(c){return f(e(c))});return function(){this.convertByteArrayToBase64=this.convertUTF8ArrayToBase64=m;this.convertBase64ToByteArray=this.convertBase64ToUTF8Array=e;this.convertUTF16ArrayToByteArray=this.convertUTF16ArrayToUTF8Array=p;this.convertByte [...]
++this.convertUTF8ArrayToUTF16Array=l;this.convertUTF8StringToBase64=q;this.convertBase64ToUTF8String=a;this.convertUTF8StringToUTF16Array=d;this.convertByteArrayToUTF16String=this.convertUTF8ArrayToUTF16String=f;this.convertUTF8StringToUTF16String=k;this.convertUTF16StringToByteArray=this.convertUTF16StringToUTF8Array=c;this.convertUTF16ArrayToUTF8String=g;this.convertUTF16StringToUTF8String=n;this.convertUTF16StringToBase64=y;this.convertBase64ToUTF16String=x;this.fromBase64=a;this.toBa [...]
++t;this.btoa=v;this.utob=n;this.btou=k;this.encode=y;this.encodeURI=function(c){return y(c).replace(/[+\/]/g,function(c){return"+"===c?"-":"_"}).replace(/\\=+$/,"")};this.decode=function(c){return x(c.replace(/[\-_]/g,function(c){return"-"===c?"+":"/"}))}}}();
 +// Input 3
- core.RawDeflate=function(){function e(){this.dl=this.fc=0}function h(){this.extra_bits=this.static_tree=this.dyn_tree=null;this.max_code=this.max_length=this.elems=this.extra_base=0}function f(a,d,b,g){this.good_length=a;this.max_lazy=d;this.nice_length=b;this.max_chain=g}function n(){this.next=null;this.len=0;this.ptr=[];this.ptr.length=m;this.off=0}var m=8192,p,c,b,a,d=null,k,g,q,l,r,t,w,v,y,x,u,s,C,B,A,I,z,N,G,R,Z,ka,T,ra,$,ha,U,O,W,E,H,M,S,P,aa,na,da,V,Q,J,ea,oa,D,fa,F,ia,Y,ba,la,L, [...]
- 0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ma=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],ya=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],za=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ta;ta=[new f(0,0,0,0),new f(4,4,8,4),new f(4,5,16,8),new f(4,6,32,32),new f(4,4,16,16),new f(8,16,32,32),new f(8,16,128,128),new f(8,32,128,256),new f(32,128,258,1024),new f(32,258,258,4096)];var xa=function(a){d[g+k++]=a;if(g+k===m){var l;if(0!==k){null!==p?(a=p,p=p. [...]
- a.next=null;a.len=a.off=0;null===c?c=b=a:b=b.next=a;a.len=k-g;for(l=0;l<a.len;l++)a.ptr[l]=d[g+l];k=g=0}}},ca=function(a){a&=65535;g+k<m-2?(d[g+k++]=a&255,d[g+k++]=a>>>8):(xa(a&255),xa(a>>>8))},X=function(){u=(u<<5^l[z+3-1]&255)&8191;s=w[32768+u];w[z&32767]=s;w[32768+u]=z},ga=function(a,d){y>16-d?(v|=a<<y,ca(v),v=a>>16-y,y+=d-16):(v|=a<<y,y+=d)},K=function(a,d){ga(d[a].fc,d[a].dl)},ja=function(a,d,b){return a[d].fc<a[b].fc||a[d].fc===a[b].fc&&da[d]<=da[b]},qa=function(a,d,b){var g;for(g [...]
- L.length;g++)a[d+g]=L.charCodeAt(sa++)&255;return g},Aa=function(){var a,d,b=65536-R-z;if(-1===b)b--;else if(65274<=z){for(a=0;32768>a;a++)l[a]=l[a+32768];N-=32768;z-=32768;x-=32768;for(a=0;8192>a;a++)d=w[32768+a],w[32768+a]=32768<=d?d-32768:0;for(a=0;32768>a;a++)d=w[a],w[a]=32768<=d?d-32768:0;b+=32768}G||(a=qa(l,z+R,b),0>=a?G=!0:R+=a)},va=function(a){var d=Z,b=z,g,c=I,k=32506<z?z-32506:0,q=z+258,f=l[b+c-1],e=l[b+c];I>=ra&&(d>>=2);do if(g=a,l[g+c]===e&&l[g+c-1]===f&&l[g]===l[b]&&l[++g]= [...]
- 2;g++;do++b;while(l[b]===l[++g]&&l[++b]===l[++g]&&l[++b]===l[++g]&&l[++b]===l[++g]&&l[++b]===l[++g]&&l[++b]===l[++g]&&l[++b]===l[++g]&&l[++b]===l[++g]&&b<q);g=258-(q-b);b=q-258;if(g>c){N=a;c=g;if(258<=g)break;f=l[b+c-1];e=l[b+c]}a=w[a&32767]}while(a>k&&0!==--d);return c},wa=function(a,d){t[D++]=d;0===a?$[d].fc++:(a--,$[V[d]+256+1].fc++,ha[(256>a?Q[a]:Q[256+(a>>7)])&255].fc++,r[fa++]=a,ia|=Y);Y<<=1;0===(D&7)&&(oa[F++]=ia,ia=0,Y=1);if(2<T&&0===(D&4095)){var b=8*D,g=z-x,c;for(c=0;30>c;c++) [...]
- (5+ma[c]);b>>=3;if(fa<parseInt(D/2,10)&&b<parseInt(g/2,10))return!0}return 8191===D||8192===fa},ua=function(a,d){for(var b=P[d],g=d<<1;g<=aa;){g<aa&&ja(a,P[g+1],P[g])&&g++;if(ja(a,b,P[g]))break;P[d]=P[g];d=g;g<<=1}P[d]=b},Da=function(a,d){var b=0;do b|=a&1,a>>=1,b<<=1;while(0<--d);return b>>1},Ea=function(a,d){var b=[];b.length=16;var g=0,c;for(c=1;15>=c;c++)g=g+S[c-1]<<1,b[c]=g;for(g=0;g<=d;g++)c=a[g].dl,0!==c&&(a[g].fc=Da(b[c]++,c))},Ca=function(a){var d=a.dyn_tree,b=a.static_tree,g=a [...]
- -1,k=g;aa=0;na=573;for(c=0;c<g;c++)0!==d[c].fc?(P[++aa]=l=c,da[c]=0):d[c].dl=0;for(;2>aa;)c=P[++aa]=2>l?++l:0,d[c].fc=1,da[c]=0,ba--,null!==b&&(la-=b[c].dl);a.max_code=l;for(c=aa>>1;1<=c;c--)ua(d,c);do c=P[1],P[1]=P[aa--],ua(d,1),b=P[1],P[--na]=c,P[--na]=b,d[k].fc=d[c].fc+d[b].fc,da[k]=da[c]>da[b]+1?da[c]:da[b]+1,d[c].dl=d[b].dl=k,P[1]=k++,ua(d,1);while(2<=aa);P[--na]=P[1];k=a.dyn_tree;c=a.extra_bits;var g=a.extra_base,b=a.max_code,q=a.max_length,f=a.static_tree,e,r,A,h,s=0;for(r=0;15>= [...]
- 0;k[P[na]].dl=0;for(a=na+1;573>a;a++)e=P[a],r=k[k[e].dl].dl+1,r>q&&(r=q,s++),k[e].dl=r,e>b||(S[r]++,A=0,e>=g&&(A=c[e-g]),h=k[e].fc,ba+=h*(r+A),null!==f&&(la+=h*(f[e].dl+A)));if(0!==s){do{for(r=q-1;0===S[r];)r--;S[r]--;S[r+1]+=2;S[q]--;s-=2}while(0<s);for(r=q;0!==r;r--)for(e=S[r];0!==e;)c=P[--a],c>b||(k[c].dl!==r&&(ba+=(r-k[c].dl)*k[c].fc,k[c].fc=r),e--)}Ea(d,l)},Fa=function(a,d){var b,g=-1,c,k=a[0].dl,l=0,q=7,e=4;0===k&&(q=138,e=3);a[d+1].dl=65535;for(b=0;b<=d;b++)c=k,k=a[b+1].dl,++l<q& [...]
- e?W[c].fc+=l:0!==c?(c!==g&&W[c].fc++,W[16].fc++):10>=l?W[17].fc++:W[18].fc++,l=0,g=c,0===k?(q=138,e=3):c===k?(q=6,e=3):(q=7,e=4))},Ga=function(){8<y?ca(v):0<y&&xa(v);y=v=0},Ha=function(a,d){var b,g=0,c=0,k=0,l=0,q,e;if(0!==D){do 0===(g&7)&&(l=oa[k++]),b=t[g++]&255,0===(l&1)?K(b,a):(q=V[b],K(q+256+1,a),e=pa[q],0!==e&&(b-=J[q],ga(b,e)),b=r[c++],q=(256>b?Q[b]:Q[256+(b>>7)])&255,K(q,d),e=ma[q],0!==e&&(b-=ea[q],ga(b,e))),l>>=1;while(g<D)}K(256,a)},Ia=function(a,d){var b,g=-1,c,k=a[0].dl,l=0, [...]
- k&&(q=138,e=3);for(b=0;b<=d;b++)if(c=k,k=a[b+1].dl,!(++l<q&&c===k)){if(l<e){do K(c,W);while(0!==--l)}else 0!==c?(c!==g&&(K(c,W),l--),K(16,W),ga(l-3,2)):10>=l?(K(17,W),ga(l-3,3)):(K(18,W),ga(l-11,7));l=0;g=c;0===k?(q=138,e=3):c===k?(q=6,e=3):(q=7,e=4)}},Ja=function(){var a;for(a=0;286>a;a++)$[a].fc=0;for(a=0;30>a;a++)ha[a].fc=0;for(a=0;19>a;a++)W[a].fc=0;$[256].fc=1;ia=D=fa=F=ba=la=0;Y=1},Ba=function(a){var d,b,g,c;c=z-x;oa[F]=ia;Ca(E);Ca(H);Fa($,E.max_code);Fa(ha,H.max_code);Ca(M);for(g [...]
- 0===W[za[g]].dl;g--);ba+=3*(g+1)+14;d=ba+3+7>>3;b=la+3+7>>3;b<=d&&(d=b);if(c+4<=d&&0<=x)for(ga(0+a,3),Ga(),ca(c),ca(~c),g=0;g<c;g++)xa(l[x+g]);else if(b===d)ga(2+a,3),Ha(U,O);else{ga(4+a,3);c=E.max_code+1;d=H.max_code+1;g+=1;ga(c-257,5);ga(d-1,5);ga(g-4,4);for(b=0;b<g;b++)ga(W[za[b]].dl,3);Ia($,c-1);Ia(ha,d-1);Ha($,ha)}Ja();0!==a&&Ga()},Ka=function(a,b,l){var q,e,f;for(q=0;null!==c&&q<l;){e=l-q;e>c.len&&(e=c.len);for(f=0;f<e;f++)a[b+q+f]=c.ptr[c.off+f];c.off+=e;c.len-=e;q+=e;0===c.len&& [...]
- e.next=p,p=e)}if(q===l)return q;if(g<k){e=l-q;e>k-g&&(e=k-g);for(f=0;f<e;f++)a[b+q+f]=d[g+f];g+=e;q+=e;k===g&&(k=g=0)}return q},La=function(d,b,e){var f;if(!a){if(!G){y=v=0;var r,h;if(0===O[0].dl){E.dyn_tree=$;E.static_tree=U;E.extra_bits=pa;E.extra_base=257;E.elems=286;E.max_length=15;E.max_code=0;H.dyn_tree=ha;H.static_tree=O;H.extra_bits=ma;H.extra_base=0;H.elems=30;H.max_length=15;H.max_code=0;M.dyn_tree=W;M.static_tree=null;M.extra_bits=ya;M.extra_base=0;M.elems=19;M.max_length=7;f [...]
- 0;28>h;h++)for(J[h]=r,f=0;f<1<<pa[h];f++)V[r++]=h;V[r-1]=h;for(h=r=0;16>h;h++)for(ea[h]=r,f=0;f<1<<ma[h];f++)Q[r++]=h;for(r>>=7;30>h;h++)for(ea[h]=r<<7,f=0;f<1<<ma[h]-7;f++)Q[256+r++]=h;for(f=0;15>=f;f++)S[f]=0;for(f=0;143>=f;)U[f++].dl=8,S[8]++;for(;255>=f;)U[f++].dl=9,S[9]++;for(;279>=f;)U[f++].dl=7,S[7]++;for(;287>=f;)U[f++].dl=8,S[8]++;Ea(U,287);for(f=0;30>f;f++)O[f].dl=5,O[f].fc=Da(f,5);Ja()}for(f=0;8192>f;f++)w[32768+f]=0;ka=ta[T].max_lazy;ra=ta[T].good_length;Z=ta[T].max_chain;x= [...]
- 0,65536);if(0>=R)G=!0,R=0;else{for(G=!1;262>R&&!G;)Aa();for(f=u=0;2>f;f++)u=(u<<5^l[f]&255)&8191}c=null;g=k=0;3>=T?(I=2,A=0):(A=2,B=0);q=!1}a=!0;if(0===R)return q=!0,0}f=Ka(d,b,e);if(f===e)return e;if(q)return f;if(3>=T)for(;0!==R&&null===c;){X();0!==s&&32506>=z-s&&(A=va(s),A>R&&(A=R));if(3<=A)if(h=wa(z-N,A-3),R-=A,A<=ka){A--;do z++,X();while(0!==--A);z++}else z+=A,A=0,u=l[z]&255,u=(u<<5^l[z+1]&255)&8191;else h=wa(0,l[z]&255),R--,z++;h&&(Ba(0),x=z);for(;262>R&&!G;)Aa()}else for(;0!==R&& [...]
- I=A;C=N;A=2;0!==s&&I<ka&&32506>=z-s&&(A=va(s),A>R&&(A=R),3===A&&4096<z-N&&A--);if(3<=I&&A<=I){h=wa(z-1-C,I-3);R-=I-1;I-=2;do z++,X();while(0!==--I);B=0;A=2;z++;h&&(Ba(0),x=z)}else 0!==B?wa(0,l[z-1]&255)&&(Ba(0),x=z):B=1,z++,R--;for(;262>R&&!G;)Aa()}0===R&&(0!==B&&wa(0,l[z-1]&255),Ba(1),q=!0);return f+Ka(d,f+b,e-f)};this.deflate=function(g,k){var q,f;L=g;sa=0;"undefined"===String(typeof k)&&(k=6);(q=k)?1>q?q=1:9<q&&(q=9):q=6;T=q;G=a=!1;if(null===d){p=c=b=null;d=[];d.length=m;l=[];l.lengt [...]
- [];r.length=8192;t=[];t.length=32832;w=[];w.length=65536;$=[];$.length=573;for(q=0;573>q;q++)$[q]=new e;ha=[];ha.length=61;for(q=0;61>q;q++)ha[q]=new e;U=[];U.length=288;for(q=0;288>q;q++)U[q]=new e;O=[];O.length=30;for(q=0;30>q;q++)O[q]=new e;W=[];W.length=39;for(q=0;39>q;q++)W[q]=new e;E=new h;H=new h;M=new h;S=[];S.length=16;P=[];P.length=573;da=[];da.length=573;V=[];V.length=256;Q=[];Q.length=512;J=[];J.length=29;ea=[];ea.length=30;oa=[];oa.length=1024}var A=Array(1024),s=[],n=[];fo [...]
- A.length);0<q;){n.length=q;for(f=0;f<q;f++)n[f]=String.fromCharCode(A[f]);s[s.length]=n.join("");q=La(A,0,A.length)}L=null;return s.join("")}};
++core.RawDeflate=function(){function h(){this.dl=this.fc=0}function m(){this.extra_bits=this.static_tree=this.dyn_tree=null;this.max_code=this.max_length=this.elems=this.extra_base=0}function e(c,g,b,a){this.good_length=c;this.max_lazy=g;this.nice_length=b;this.max_chain=a}function p(){this.next=null;this.len=0;this.ptr=[];this.ptr.length=l;this.off=0}var l=8192,q,a,d,f,b=null,k,c,g,n,r,u,y,x,w,v,t,s,D,A,C,I,z,M,H,R,Z,ja,E,ka,ba,ga,S,Y,V,N,L,G,Q,O,ca,oa,da,T,P,ra,$,F,U,J,ia,fa,W,ha,B,sa, [...]
++0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ma=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],za=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],va=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],wa;wa=[new e(0,0,0,0),new e(4,4,8,4),new e(4,5,16,8),new e(4,6,32,32),new e(4,4,16,16),new e(8,16,32,32),new e(8,16,128,128),new e(8,32,128,256),new e(32,128,258,1024),new e(32,258,258,4096)];var ea=function(g){b[c+k++]=g;if(c+k===l){var n;if(0!==k){null!==q?(g=q,q=q. [...]
++g.next=null;g.len=g.off=0;null===a?a=d=g:d=d.next=g;g.len=k-c;for(n=0;n<g.len;n++)g.ptr[n]=b[c+n];k=c=0}}},X=function(g){g&=65535;c+k<l-2?(b[c+k++]=g&255,b[c+k++]=g>>>8):(ea(g&255),ea(g>>>8))},pa=function(){t=(t<<5^n[z+3-1]&255)&8191;s=y[32768+t];y[z&32767]=s;y[32768+t]=z},aa=function(c,g){w>16-g?(x|=c<<w,X(x),x=c>>16-w,w+=g-16):(x|=c<<w,w+=g)},K=function(c,g){aa(g[c].fc,g[c].dl)},na=function(c,g,b){return c[g].fc<c[b].fc||c[g].fc===c[b].fc&&da[g]<=da[b]},Aa=function(c,g,b){var a;for(a= [...]
++sa.length;a++)c[g+a]=sa.charCodeAt(la++)&255;return a},ua=function(){var c,g,b=65536-R-z;if(-1===b)b--;else if(65274<=z){for(c=0;32768>c;c++)n[c]=n[c+32768];M-=32768;z-=32768;v-=32768;for(c=0;8192>c;c++)g=y[32768+c],y[32768+c]=32768<=g?g-32768:0;for(c=0;32768>c;c++)g=y[c],y[c]=32768<=g?g-32768:0;b+=32768}H||(c=Aa(n,z+R,b),0>=c?H=!0:R+=c)},xa=function(c){var g=Z,b=z,a,d=I,f=32506<z?z-32506:0,k=z+258,e=n[b+d-1],r=n[b+d];I>=ka&&(g>>=2);do if(a=c,n[a+d]===r&&n[a+d-1]===e&&n[a]===n[b]&&n[++a [...]
++2;a++;do++b;while(n[b]===n[++a]&&n[++b]===n[++a]&&n[++b]===n[++a]&&n[++b]===n[++a]&&n[++b]===n[++a]&&n[++b]===n[++a]&&n[++b]===n[++a]&&n[++b]===n[++a]&&b<k);a=258-(k-b);b=k-258;if(a>d){M=c;d=a;if(258<=a)break;e=n[b+d-1];r=n[b+d]}c=y[c&32767]}while(c>f&&0!==--g);return d},qa=function(c,g){u[U++]=g;0===c?ba[g].fc++:(c--,ba[T[g]+256+1].fc++,ga[(256>c?P[c]:P[256+(c>>7)])&255].fc++,r[J++]=c,fa|=W);W<<=1;0===(U&7)&&(F[ia++]=fa,fa=0,W=1);if(2<E&&0===(U&4095)){var b=8*U,a=z-v,d;for(d=0;30>d;d++ [...]
++(5+ma[d]);b>>=3;if(J<parseInt(U/2,10)&&b<parseInt(a/2,10))return!0}return 8191===U||8192===J},ya=function(c,g){for(var b=O[g],a=g<<1;a<=ca;){a<ca&&na(c,O[a+1],O[a])&&a++;if(na(c,b,O[a]))break;O[g]=O[a];g=a;a<<=1}O[g]=b},Da=function(c,g){var b=0;do b|=c&1,c>>=1,b<<=1;while(0<--g);return b>>1},Ea=function(c,g){var b=[];b.length=16;var a=0,d;for(d=1;15>=d;d++)a=a+Q[d-1]<<1,b[d]=a;for(a=0;a<=g;a++)d=c[a].dl,0!==d&&(c[a].fc=Da(b[d]++,d))},Ca=function(c){var g=c.dyn_tree,b=c.static_tree,a=c.e [...]
++f=a;ca=0;oa=573;for(d=0;d<a;d++)0!==g[d].fc?(O[++ca]=n=d,da[d]=0):g[d].dl=0;for(;2>ca;)d=O[++ca]=2>n?++n:0,g[d].fc=1,da[d]=0,ha--,null!==b&&(B-=b[d].dl);c.max_code=n;for(d=ca>>1;1<=d;d--)ya(g,d);do d=O[1],O[1]=O[ca--],ya(g,1),b=O[1],O[--oa]=d,O[--oa]=b,g[f].fc=g[d].fc+g[b].fc,da[f]=da[d]>da[b]+1?da[d]:da[b]+1,g[d].dl=g[b].dl=f,O[1]=f++,ya(g,1);while(2<=ca);O[--oa]=O[1];f=c.dyn_tree;d=c.extra_bits;var a=c.extra_base,b=c.max_code,k=c.max_length,e=c.static_tree,r,s,h,C,l=0;for(s=0;15>=s;s+ [...]
++0;for(c=oa+1;573>c;c++)r=O[c],s=f[f[r].dl].dl+1,s>k&&(s=k,l++),f[r].dl=s,r>b||(Q[s]++,h=0,r>=a&&(h=d[r-a]),C=f[r].fc,ha+=C*(s+h),null!==e&&(B+=C*(e[r].dl+h)));if(0!==l){do{for(s=k-1;0===Q[s];)s--;Q[s]--;Q[s+1]+=2;Q[k]--;l-=2}while(0<l);for(s=k;0!==s;s--)for(r=Q[s];0!==r;)d=O[--c],d>b||(f[d].dl!==s&&(ha+=(s-f[d].dl)*f[d].fc,f[d].fc=s),r--)}Ea(g,n)},Fa=function(c,g){var b,a=-1,d,n=c[0].dl,f=0,k=7,e=4;0===n&&(k=138,e=3);c[g+1].dl=65535;for(b=0;b<=g;b++)d=n,n=c[b+1].dl,++f<k&&d===n||(f<e?V[ [...]
++d?(d!==a&&V[d].fc++,V[16].fc++):10>=f?V[17].fc++:V[18].fc++,f=0,a=d,0===n?(k=138,e=3):d===n?(k=6,e=3):(k=7,e=4))},Ga=function(){8<w?X(x):0<w&&ea(x);w=x=0},Ha=function(c,g){var b,a=0,d=0,n=0,f=0,k,e;if(0!==U){do 0===(a&7)&&(f=F[n++]),b=u[a++]&255,0===(f&1)?K(b,c):(k=T[b],K(k+256+1,c),e=ta[k],0!==e&&(b-=ra[k],aa(b,e)),b=r[d++],k=(256>b?P[b]:P[256+(b>>7)])&255,K(k,g),e=ma[k],0!==e&&(b-=$[k],aa(b,e))),f>>=1;while(a<U)}K(256,c)},Ia=function(c,g){var b,a=-1,d,n=c[0].dl,f=0,k=7,e=4;0===n&&(k=1 [...]
++0;b<=g;b++)if(d=n,n=c[b+1].dl,!(++f<k&&d===n)){if(f<e){do K(d,V);while(0!==--f)}else 0!==d?(d!==a&&(K(d,V),f--),K(16,V),aa(f-3,2)):10>=f?(K(17,V),aa(f-3,3)):(K(18,V),aa(f-11,7));f=0;a=d;0===n?(k=138,e=3):d===n?(k=6,e=3):(k=7,e=4)}},Ja=function(){var c;for(c=0;286>c;c++)ba[c].fc=0;for(c=0;30>c;c++)ga[c].fc=0;for(c=0;19>c;c++)V[c].fc=0;ba[256].fc=1;fa=U=J=ia=ha=B=0;W=1},Ba=function(c){var g,b,a,d;d=z-v;F[ia]=fa;Ca(N);Ca(L);Fa(ba,N.max_code);Fa(ga,L.max_code);Ca(G);for(a=18;3<=a&&0===V[va[ [...]
++ha+=3*(a+1)+14;g=ha+3+7>>3;b=B+3+7>>3;b<=g&&(g=b);if(d+4<=g&&0<=v)for(aa(0+c,3),Ga(),X(d),X(~d),a=0;a<d;a++)ea(n[v+a]);else if(b===g)aa(2+c,3),Ha(S,Y);else{aa(4+c,3);d=N.max_code+1;g=L.max_code+1;a+=1;aa(d-257,5);aa(g-1,5);aa(a-4,4);for(b=0;b<a;b++)aa(V[va[b]].dl,3);Ia(ba,d-1);Ia(ga,g-1);Ha(ba,ga)}Ja();0!==c&&Ga()},Ka=function(g,d,n){var f,e,r;for(f=0;null!==a&&f<n;){e=n-f;e>a.len&&(e=a.len);for(r=0;r<e;r++)g[d+f+r]=a.ptr[a.off+r];a.off+=e;a.len-=e;f+=e;0===a.len&&(e=a,a=a.next,e.next=q [...]
++n)return f;if(c<k){e=n-f;e>k-c&&(e=k-c);for(r=0;r<e;r++)g[d+f+r]=b[c+r];c+=e;f+=e;k===c&&(k=c=0)}return f},La=function(b,d,e){var r;if(!f){if(!H){w=x=0;var h,l;if(0===Y[0].dl){N.dyn_tree=ba;N.static_tree=S;N.extra_bits=ta;N.extra_base=257;N.elems=286;N.max_length=15;N.max_code=0;L.dyn_tree=ga;L.static_tree=Y;L.extra_bits=ma;L.extra_base=0;L.elems=30;L.max_length=15;L.max_code=0;G.dyn_tree=V;G.static_tree=null;G.extra_bits=za;G.extra_base=0;G.elems=19;G.max_length=7;for(l=h=G.max_code=0; [...]
++h,r=0;r<1<<ta[l];r++)T[h++]=l;T[h-1]=l;for(l=h=0;16>l;l++)for($[l]=h,r=0;r<1<<ma[l];r++)P[h++]=l;for(h>>=7;30>l;l++)for($[l]=h<<7,r=0;r<1<<ma[l]-7;r++)P[256+h++]=l;for(r=0;15>=r;r++)Q[r]=0;for(r=0;143>=r;)S[r++].dl=8,Q[8]++;for(;255>=r;)S[r++].dl=9,Q[9]++;for(;279>=r;)S[r++].dl=7,Q[7]++;for(;287>=r;)S[r++].dl=8,Q[8]++;Ea(S,287);for(r=0;30>r;r++)Y[r].dl=5,Y[r].fc=Da(r,5);Ja()}for(r=0;8192>r;r++)y[32768+r]=0;ja=wa[E].max_lazy;ka=wa[E].good_length;Z=wa[E].max_chain;v=z=0;R=Aa(n,0,65536);if [...]
++R=0;else{for(H=!1;262>R&&!H;)ua();for(r=t=0;2>r;r++)t=(t<<5^n[r]&255)&8191}a=null;c=k=0;3>=E?(I=2,C=0):(C=2,A=0);g=!1}f=!0;if(0===R)return g=!0,0}r=Ka(b,d,e);if(r===e)return e;if(g)return r;if(3>=E)for(;0!==R&&null===a;){pa();0!==s&&32506>=z-s&&(C=xa(s),C>R&&(C=R));if(3<=C)if(l=qa(z-M,C-3),R-=C,C<=ja){C--;do z++,pa();while(0!==--C);z++}else z+=C,C=0,t=n[z]&255,t=(t<<5^n[z+1]&255)&8191;else l=qa(0,n[z]&255),R--,z++;l&&(Ba(0),v=z);for(;262>R&&!H;)ua()}else for(;0!==R&&null===a;){pa();I=C; [...]
++s&&I<ja&&32506>=z-s&&(C=xa(s),C>R&&(C=R),3===C&&4096<z-M&&C--);if(3<=I&&C<=I){l=qa(z-1-D,I-3);R-=I-1;I-=2;do z++,pa();while(0!==--I);A=0;C=2;z++;l&&(Ba(0),v=z)}else 0!==A?qa(0,n[z-1]&255)&&(Ba(0),v=z):A=1,z++,R--;for(;262>R&&!H;)ua()}0===R&&(0!==A&&qa(0,n[z-1]&255),Ba(1),g=!0);return r+Ka(b,r+d,e-r)};this.deflate=function(c,g){var k,e;sa=c;la=0;"undefined"===String(typeof g)&&(g=6);(k=g)?1>k?k=1:9<k&&(k=9):k=6;E=k;H=f=!1;if(null===b){q=a=d=null;b=[];b.length=l;n=[];n.length=65536;r=[];r [...]
++u=[];u.length=32832;y=[];y.length=65536;ba=[];ba.length=573;for(k=0;573>k;k++)ba[k]=new h;ga=[];ga.length=61;for(k=0;61>k;k++)ga[k]=new h;S=[];S.length=288;for(k=0;288>k;k++)S[k]=new h;Y=[];Y.length=30;for(k=0;30>k;k++)Y[k]=new h;V=[];V.length=39;for(k=0;39>k;k++)V[k]=new h;N=new m;L=new m;G=new m;Q=[];Q.length=16;O=[];O.length=573;da=[];da.length=573;T=[];T.length=256;P=[];P.length=512;ra=[];ra.length=29;$=[];$.length=30;F=[];F.length=1024}var s=Array(1024),C=[],p=[];for(k=La(s,0,s.len [...]
++k;for(e=0;e<k;e++)p[e]=String.fromCharCode(s[e]);C[C.length]=p.join("");k=La(s,0,s.length)}sa=null;return C.join("")}};
 +// Input 4
- core.ByteArray=function(e){this.pos=0;this.data=e;this.readUInt32LE=function(){this.pos+=4;var e=this.data,f=this.pos;return e[--f]<<24|e[--f]<<16|e[--f]<<8|e[--f]};this.readUInt16LE=function(){this.pos+=2;var e=this.data,f=this.pos;return e[--f]<<8|e[--f]}};
++core.ByteArray=function(h){this.pos=0;this.data=h;this.readUInt32LE=function(){this.pos+=4;var h=this.data,e=this.pos;return h[--e]<<24|h[--e]<<16|h[--e]<<8|h[--e]};this.readUInt16LE=function(){this.pos+=2;var h=this.data,e=this.pos;return h[--e]<<8|h[--e]}};
 +// Input 5
- core.ByteArrayWriter=function(e){var h=this,f=new runtime.ByteArray(0);this.appendByteArrayWriter=function(e){f=runtime.concatByteArrays(f,e.getByteArray())};this.appendByteArray=function(e){f=runtime.concatByteArrays(f,e)};this.appendArray=function(e){f=runtime.concatByteArrays(f,runtime.byteArrayFromArray(e))};this.appendUInt16LE=function(f){h.appendArray([f&255,f>>8&255])};this.appendUInt32LE=function(f){h.appendArray([f&255,f>>8&255,f>>16&255,f>>24&255])};this.appendString=function( [...]
- runtime.byteArrayFromString(h,e))};this.getLength=function(){return f.length};this.getByteArray=function(){return f}};
++core.ByteArrayWriter=function(h){var m=this,e=new runtime.ByteArray(0);this.appendByteArrayWriter=function(h){e=runtime.concatByteArrays(e,h.getByteArray())};this.appendByteArray=function(h){e=runtime.concatByteArrays(e,h)};this.appendArray=function(h){e=runtime.concatByteArrays(e,runtime.byteArrayFromArray(h))};this.appendUInt16LE=function(e){m.appendArray([e&255,e>>8&255])};this.appendUInt32LE=function(e){m.appendArray([e&255,e>>8&255,e>>16&255,e>>24&255])};this.appendString=function( [...]
++runtime.byteArrayFromString(m,h))};this.getLength=function(){return e.length};this.getByteArray=function(){return e}};
 +// Input 6
- core.RawInflate=function(){var e,h,f=null,n,m,p,c,b,a,d,k,g,q,l,r,t,w,v=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],y=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],x=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],u=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],s=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13], [...]
- 0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],B=function(){this.list=this.next=null},A=function(){this.n=this.b=this.e=0;this.t=null},I=function(a,d,b,g,c,l){this.BMAX=16;this.N_MAX=288;this.status=0;this.root=null;this.m=0;var k=Array(this.BMAX+1),q,f,e,r,h,s,t,m=Array(this.BMAX+1),p,n,N,w=new A,G=Array(this.BMAX);r=Array(this.N_MAX);var z,u=Array(this.BMAX+1),I,v,R;R=this.root=null;for(h=0;h<k.length;h++)k[h]=0;for(h=0;h<m.length;h++)m[h]=0;for(h=0;h<G.length;h++)G[h]=null;for(h=0;h<r.length [...]
- 0;for(h=0;h<u.length;h++)u[h]=0;q=256<d?a[256]:this.BMAX;p=a;n=0;h=d;do k[p[n]]++,n++;while(0<--h);if(k[0]==d)this.root=null,this.status=this.m=0;else{for(s=1;s<=this.BMAX&&0==k[s];s++);t=s;l<s&&(l=s);for(h=this.BMAX;0!=h&&0==k[h];h--);e=h;l>h&&(l=h);for(I=1<<s;s<h;s++,I<<=1)if(0>(I-=k[s])){this.status=2;this.m=l;return}if(0>(I-=k[h]))this.status=2,this.m=l;else{k[h]+=I;u[1]=s=0;p=k;n=1;for(N=2;0<--h;)u[N++]=s+=p[n++];p=a;h=n=0;do 0!=(s=p[n++])&&(r[u[s]++]=h);while(++h<d);d=u[e];u[0]=h= [...]
- r=-1;z=m[0]=0;N=null;for(v=0;t<=e;t++)for(a=k[t];0<a--;){for(;t>z+m[1+r];){z+=m[1+r];r++;v=(v=e-z)>l?l:v;if((f=1<<(s=t-z))>a+1)for(f-=a+1,N=t;++s<v&&!((f<<=1)<=k[++N]);)f-=k[N];z+s>q&&z<q&&(s=q-z);v=1<<s;m[1+r]=s;N=Array(v);for(f=0;f<v;f++)N[f]=new A;R=null==R?this.root=new B:R.next=new B;R.next=null;R.list=N;G[r]=N;0<r&&(u[r]=h,w.b=m[r],w.e=16+s,w.t=N,s=(h&(1<<z)-1)>>z-m[r],G[r-1][s].e=w.e,G[r-1][s].b=w.b,G[r-1][s].n=w.n,G[r-1][s].t=w.t)}w.b=t-z;n>=d?w.e=99:p[n]<b?(w.e=256>p[n]?16:15,w [...]
- (w.e=c[p[n]-b],w.n=g[p[n++]-b]);f=1<<t-z;for(s=h>>z;s<v;s+=f)N[s].e=w.e,N[s].b=w.b,N[s].n=w.n,N[s].t=w.t;for(s=1<<t-1;0!=(h&s);s>>=1)h^=s;for(h^=s;(h&(1<<z)-1)!=u[r];)z-=m[r],r--}this.m=m[1];this.status=0!=I&&1!=e?1:0}}},z=function(a){for(;c<a;){var d=p,b;b=t.length==w?-1:t[w++];p=d|b<<c;c+=8}},N=function(a){return p&v[a]},G=function(a){p>>=a;c-=a},R=function(a,c,f){var s,A,t;if(0==f)return 0;for(t=0;;){z(l);A=g.list[N(l)];for(s=A.e;16<s;){if(99==s)return-1;G(A.b);s-=16;z(s);A=A.t[N(s)] [...]
- if(16==s)h&=32767,a[c+t++]=e[h++]=A.n;else{if(15==s)break;z(s);d=A.n+N(s);G(s);z(r);A=q.list[N(r)];for(s=A.e;16<s;){if(99==s)return-1;G(A.b);s-=16;z(s);A=A.t[N(s)];s=A.e}G(A.b);z(s);k=h-A.n-N(s);for(G(s);0<d&&t<f;)d--,k&=32767,h&=32767,a[c+t++]=e[h++]=e[k++]}if(t==f)return f}b=-1;return t},Z,ka=function(a,d,b){var c,k,f,e,h,A,t,m=Array(316);for(c=0;c<m.length;c++)m[c]=0;z(5);A=257+N(5);G(5);z(5);t=1+N(5);G(5);z(4);c=4+N(4);G(4);if(286<A||30<t)return-1;for(k=0;k<c;k++)z(3),m[C[k]]=N(3),G [...]
- k;k++)m[C[k]]=0;l=7;k=new I(m,19,19,null,null,l);if(0!=k.status)return-1;g=k.root;l=k.m;e=A+t;for(c=f=0;c<e;)if(z(l),h=g.list[N(l)],k=h.b,G(k),k=h.n,16>k)m[c++]=f=k;else if(16==k){z(2);k=3+N(2);G(2);if(c+k>e)return-1;for(;0<k--;)m[c++]=f}else{17==k?(z(3),k=3+N(3),G(3)):(z(7),k=11+N(7),G(7));if(c+k>e)return-1;for(;0<k--;)m[c++]=0;f=0}l=9;k=new I(m,A,257,y,x,l);0==l&&(k.status=1);if(0!=k.status)return-1;g=k.root;l=k.m;for(c=0;c<t;c++)m[c]=m[c+A];r=6;k=new I(m,t,0,u,s,r);q=k.root;r=k.m;ret [...]
- 257<A||0!=k.status?-1:R(a,d,b)};this.inflate=function(A,v){null==e&&(e=Array(65536));c=p=h=0;b=-1;a=!1;d=k=0;g=null;t=A;w=0;var B=new runtime.ByteArray(v);a:{var C,U;for(C=0;C<v&&(!a||-1!=b);){if(0<d){if(0!=b)for(;0<d&&C<v;)d--,k&=32767,h&=32767,B[0+C++]=e[h++]=e[k++];else{for(;0<d&&C<v;)d--,h&=32767,z(8),B[0+C++]=e[h++]=N(8),G(8);0==d&&(b=-1)}if(C==v)break}if(-1==b){if(a)break;z(1);0!=N(1)&&(a=!0);G(1);z(2);b=N(2);G(2);g=null;d=0}switch(b){case 0:U=B;var O=0+C,W=v-C,E=void 0,E=c&7;G(E) [...]
- G(16);z(16);if(E!=(~p&65535))U=-1;else{G(16);d=E;for(E=0;0<d&&E<W;)d--,h&=32767,z(8),U[O+E++]=e[h++]=N(8),G(8);0==d&&(b=-1);U=E}break;case 1:if(null!=g)U=R(B,0+C,v-C);else b:{U=B;O=0+C;W=v-C;if(null==f){for(var H=void 0,E=Array(288),H=void 0,H=0;144>H;H++)E[H]=8;for(;256>H;H++)E[H]=9;for(;280>H;H++)E[H]=7;for(;288>H;H++)E[H]=8;m=7;H=new I(E,288,257,y,x,m);if(0!=H.status){alert("HufBuild error: "+H.status);U=-1;break b}f=H.root;m=H.m;for(H=0;30>H;H++)E[H]=5;Z=5;H=new I(E,30,0,u,s,Z);if(1 [...]
- null;alert("HufBuild error: "+H.status);U=-1;break b}n=H.root;Z=H.m}g=f;q=n;l=m;r=Z;U=R(U,O,W)}break;case 2:U=null!=g?R(B,0+C,v-C):ka(B,0+C,v-C);break;default:U=-1}if(-1==U)break a;C+=U}}t=null;return B}};
++core.RawInflate=function(){var h,m,e=null,p,l,q,a,d,f,b,k,c,g,n,r,u,y,x=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],w=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],v=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],t=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],s=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13], [...]
++0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],A=function(){this.list=this.next=null},C=function(){this.n=this.b=this.e=0;this.t=null},I=function(c,g,b,a,d,n){this.BMAX=16;this.N_MAX=288;this.status=0;this.root=null;this.m=0;var f=Array(this.BMAX+1),k,e,r,s,h,l,m,p=Array(this.BMAX+1),q,M,x,u=new C,t=Array(this.BMAX);s=Array(this.N_MAX);var v,H=Array(this.BMAX+1),z,I,w;w=this.root=null;for(h=0;h<f.length;h++)f[h]=0;for(h=0;h<p.length;h++)p[h]=0;for(h=0;h<t.length;h++)t[h]=null;for(h=0;h<s.length [...]
++0;for(h=0;h<H.length;h++)H[h]=0;k=256<g?c[256]:this.BMAX;q=c;M=0;h=g;do f[q[M]]++,M++;while(0<--h);if(f[0]==g)this.root=null,this.status=this.m=0;else{for(l=1;l<=this.BMAX&&0==f[l];l++);m=l;n<l&&(n=l);for(h=this.BMAX;0!=h&&0==f[h];h--);r=h;n>h&&(n=h);for(z=1<<l;l<h;l++,z<<=1)if(0>(z-=f[l])){this.status=2;this.m=n;return}if(0>(z-=f[h]))this.status=2,this.m=n;else{f[h]+=z;H[1]=l=0;q=f;M=1;for(x=2;0<--h;)H[x++]=l+=q[M++];q=c;h=M=0;do 0!=(l=q[M++])&&(s[H[l]++]=h);while(++h<g);g=H[r];H[0]=h= [...]
++s=-1;v=p[0]=0;x=null;for(I=0;m<=r;m++)for(c=f[m];0<c--;){for(;m>v+p[1+s];){v+=p[1+s];s++;I=(I=r-v)>n?n:I;if((e=1<<(l=m-v))>c+1)for(e-=c+1,x=m;++l<I&&!((e<<=1)<=f[++x]);)e-=f[x];v+l>k&&v<k&&(l=k-v);I=1<<l;p[1+s]=l;x=Array(I);for(e=0;e<I;e++)x[e]=new C;w=null==w?this.root=new A:w.next=new A;w.next=null;w.list=x;t[s]=x;0<s&&(H[s]=h,u.b=p[s],u.e=16+l,u.t=x,l=(h&(1<<v)-1)>>v-p[s],t[s-1][l].e=u.e,t[s-1][l].b=u.b,t[s-1][l].n=u.n,t[s-1][l].t=u.t)}u.b=m-v;M>=g?u.e=99:q[M]<b?(u.e=256>q[M]?16:15,u [...]
++(u.e=d[q[M]-b],u.n=a[q[M++]-b]);e=1<<m-v;for(l=h>>v;l<I;l+=e)x[l].e=u.e,x[l].b=u.b,x[l].n=u.n,x[l].t=u.t;for(l=1<<m-1;0!=(h&l);l>>=1)h^=l;for(h^=l;(h&(1<<v)-1)!=H[s];)v-=p[s],s--}this.m=p[1];this.status=0!=z&&1!=r?1:0}}},z=function(c){for(;a<c;){var g=q,b;b=u.length==y?-1:u[y++];q=g|b<<a;a+=8}},M=function(c){return q&x[c]},H=function(c){q>>=c;a-=c},R=function(a,f,e){var l,s,C;if(0==e)return 0;for(C=0;;){z(n);s=c.list[M(n)];for(l=s.e;16<l;){if(99==l)return-1;H(s.b);l-=16;z(l);s=s.t[M(l)] [...]
++if(16==l)m&=32767,a[f+C++]=h[m++]=s.n;else{if(15==l)break;z(l);b=s.n+M(l);H(l);z(r);s=g.list[M(r)];for(l=s.e;16<l;){if(99==l)return-1;H(s.b);l-=16;z(l);s=s.t[M(l)];l=s.e}H(s.b);z(l);k=m-s.n-M(l);for(H(l);0<b&&C<e;)b--,k&=32767,m&=32767,a[f+C++]=h[m++]=h[k++]}if(C==e)return e}d=-1;return C},Z,ja=function(b,a,d){var f,k,e,l,h,C,m,p=Array(316);for(f=0;f<p.length;f++)p[f]=0;z(5);C=257+M(5);H(5);z(5);m=1+M(5);H(5);z(4);f=4+M(4);H(4);if(286<C||30<m)return-1;for(k=0;k<f;k++)z(3),p[D[k]]=M(3),H [...]
++k;k++)p[D[k]]=0;n=7;k=new I(p,19,19,null,null,n);if(0!=k.status)return-1;c=k.root;n=k.m;l=C+m;for(f=e=0;f<l;)if(z(n),h=c.list[M(n)],k=h.b,H(k),k=h.n,16>k)p[f++]=e=k;else if(16==k){z(2);k=3+M(2);H(2);if(f+k>l)return-1;for(;0<k--;)p[f++]=e}else{17==k?(z(3),k=3+M(3),H(3)):(z(7),k=11+M(7),H(7));if(f+k>l)return-1;for(;0<k--;)p[f++]=0;e=0}n=9;k=new I(p,C,257,w,v,n);0==n&&(k.status=1);if(0!=k.status)return-1;c=k.root;n=k.m;for(f=0;f<m;f++)p[f]=p[f+C];r=6;k=new I(p,m,0,t,s,r);g=k.root;r=k.m;ret [...]
++257<C||0!=k.status?-1:R(b,a,d)};this.inflate=function(C,x){null==h&&(h=Array(65536));a=q=m=0;d=-1;f=!1;b=k=0;c=null;u=C;y=0;var A=new runtime.ByteArray(x);a:{var D,S;for(D=0;D<x&&(!f||-1!=d);){if(0<b){if(0!=d)for(;0<b&&D<x;)b--,k&=32767,m&=32767,A[0+D++]=h[m++]=h[k++];else{for(;0<b&&D<x;)b--,m&=32767,z(8),A[0+D++]=h[m++]=M(8),H(8);0==b&&(d=-1)}if(D==x)break}if(-1==d){if(f)break;z(1);0!=M(1)&&(f=!0);H(1);z(2);d=M(2);H(2);c=null;b=0}switch(d){case 0:S=A;var Y=0+D,V=x-D,N=void 0,N=a&7;H(N) [...]
++H(16);z(16);if(N!=(~q&65535))S=-1;else{H(16);b=N;for(N=0;0<b&&N<V;)b--,m&=32767,z(8),S[Y+N++]=h[m++]=M(8),H(8);0==b&&(d=-1);S=N}break;case 1:if(null!=c)S=R(A,0+D,x-D);else b:{S=A;Y=0+D;V=x-D;if(null==e){for(var L=void 0,N=Array(288),L=void 0,L=0;144>L;L++)N[L]=8;for(;256>L;L++)N[L]=9;for(;280>L;L++)N[L]=7;for(;288>L;L++)N[L]=8;l=7;L=new I(N,288,257,w,v,l);if(0!=L.status){alert("HufBuild error: "+L.status);S=-1;break b}e=L.root;l=L.m;for(L=0;30>L;L++)N[L]=5;Z=5;L=new I(N,30,0,t,s,Z);if(1 [...]
++null;alert("HufBuild error: "+L.status);S=-1;break b}p=L.root;Z=L.m}c=e;g=p;n=l;r=Z;S=R(S,Y,V)}break;case 2:S=null!=c?R(A,0+D,x-D):ja(A,0+D,x-D);break;default:S=-1}if(-1==S)break a;D+=S}}u=null;return A}};
 +// Input 7
 +/*
 +
 + Copyright (C) 2012 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- core.LoopWatchDog=function(e,h){var f=Date.now(),n=0;this.check=function(){var m;if(e&&(m=Date.now(),m-f>e))throw runtime.log("alert","watchdog timeout"),"timeout!";if(0<h&&(n+=1,n>h))throw runtime.log("alert","watchdog loop overflow"),"loop overflow";}};
++core.LoopWatchDog=function(h,m){var e=Date.now(),p=0;this.check=function(){var l;if(h&&(l=Date.now(),l-e>h))throw runtime.log("alert","watchdog timeout"),"timeout!";if(0<m&&(p+=1,p>m))throw runtime.log("alert","watchdog loop overflow"),"loop overflow";}};
 +// Input 8
- core.Utils=function(){function e(h,f){f&&Array.isArray(f)?h=(h||[]).concat(f.map(function(f){return e({},f)})):f&&"object"===typeof f?(h=h||{},Object.keys(f).forEach(function(n){h[n]=e(h[n],f[n])})):h=f;return h}this.hashString=function(e){var f=0,n,m;n=0;for(m=e.length;n<m;n+=1)f=(f<<5)-f+e.charCodeAt(n),f|=0;return f};this.mergeObjects=e};
++core.Utils=function(){function h(m,e){e&&Array.isArray(e)?m=(m||[]).concat(e.map(function(e){return h({},e)})):e&&"object"===typeof e?(m=m||{},Object.keys(e).forEach(function(p){m[p]=h(m[p],e[p])})):m=e;return m}this.hashString=function(h){var e=0,p,l;p=0;for(l=h.length;p<l;p+=1)e=(e<<5)-e+h.charCodeAt(p),e|=0;return e};this.mergeObjects=h};
 +// Input 9
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- (function(){function e(f){var e,m,p,c;void 0===h&&(c=f.createElement("div"),c.style.position="absolute",c.style.left="-99999px",c.style.transform="scale(2)",c.style["-webkit-transform"]="scale(2)",p=f.createElement("div"),p.style.width="10px",p.style.height="10px",c.appendChild(p),f.body.appendChild(c),e=p.ownerDocument.createRange(),m=p.getBoundingClientRect(),e.selectNode(p),p=e.getBoundingClientRect(),h=m.height!==p.height,e.detach(),f.body.removeChild(c));return h}var h;core.DomUtil [...]
- a){var d=null;b.nodeType===Node.TEXT_NODE&&(0===b.length?(b.parentNode.removeChild(b),a.nodeType===Node.TEXT_NODE&&(d=a)):(a.nodeType===Node.TEXT_NODE&&(b.appendData(a.data),a.parentNode.removeChild(a)),d=b));return d}function h(b){for(var a=b.parentNode;b.firstChild;)a.insertBefore(b.firstChild,b);a.removeChild(b);return a}function m(b,a){for(var d=b.parentNode,c=b.firstChild,g;c;)g=c.nextSibling,m(c,a),c=g;a(b)&&(d=h(b));return d}function p(b,a){for(var d=0,c;b.parentNode!==a;)runtime [...]
- b.parentNode,"parent is null"),b=b.parentNode;for(c=a.firstChild;c!==b;)d+=1,c=c.nextSibling;return d}function c(b,a){return b===a||Boolean(b.compareDocumentPosition(a)&Node.DOCUMENT_POSITION_CONTAINED_BY)}this.splitBoundaries=function(b){var a=[],d;if(b.startContainer.nodeType===Node.TEXT_NODE||b.endContainer.nodeType===Node.TEXT_NODE){d=b.endContainer;var c=b.endOffset;if(c<d.childNodes.length)for(d=d.childNodes[c],c=0;d.firstChild;)d=d.firstChild;else for(;d.lastChild;)d=d.lastChild, [...]
- Node.TEXT_NODE?d.textContent.length:d.childNodes.length;b.setEnd(d,c);0!==b.endOffset&&b.endContainer.nodeType===Node.TEXT_NODE&&b.endOffset!==b.endContainer.length&&(a.push(b.endContainer.splitText(b.endOffset)),a.push(b.endContainer));0!==b.startOffset&&b.startContainer.nodeType===Node.TEXT_NODE&&b.startOffset!==b.startContainer.length&&(d=b.startContainer.splitText(b.startOffset),a.push(b.startContainer),a.push(d),b.setStart(d,0))}return a};this.containsRange=function(b,a){return 0>= [...]
- a)&&0<=b.compareBoundaryPoints(b.END_TO_END,a)};this.rangesIntersect=function(b,a){return 0>=b.compareBoundaryPoints(b.END_TO_START,a)&&0<=b.compareBoundaryPoints(b.START_TO_END,a)};this.getNodesInRange=function(b,a){var d=[],c,g,q=b.startContainer.ownerDocument.createTreeWalker(b.commonAncestorContainer,NodeFilter.SHOW_ALL,a,!1);for(c=q.currentNode=b.startContainer;c;){g=a(c);if(g===NodeFilter.FILTER_ACCEPT)d.push(c);else if(g===NodeFilter.FILTER_REJECT)break;c=c.parentNode}d.reverse() [...]
- c=q.nextNode();return d};this.normalizeTextNodes=function(b){b&&b.nextSibling&&(b=f(b,b.nextSibling));b&&b.previousSibling&&f(b.previousSibling,b)};this.rangeContainsNode=function(b,a){var d=a.ownerDocument.createRange(),c=a.nodeType===Node.TEXT_NODE?a.length:a.childNodes.length;d.setStart(b.startContainer,b.startOffset);d.setEnd(b.endContainer,b.endOffset);c=0===d.comparePoint(a,0)&&0===d.comparePoint(a,c);d.detach();return c};this.mergeIntoParent=h;this.removeUnwantedNodes=m;this.getE [...]
- function(b,a,d){return Array.prototype.slice.call(b.getElementsByTagNameNS(a,d))};this.rangeIntersectsNode=function(b,a){var d=a.nodeType===Node.TEXT_NODE?a.length:a.childNodes.length;return 0>=b.comparePoint(a,0)&&0<=b.comparePoint(a,d)};this.containsNode=function(b,a){return b===a||b.contains(a)};this.comparePoints=function(b,a,d,c){if(b===d)return c-a;var g=b.compareDocumentPosition(d);2===g?g=-1:4===g?g=1:10===g?(a=p(b,d),g=a<c?1:-1):(c=p(d,b),g=c<a?-1:1);return g};this.areRangeRect [...]
- function(b){return!e(b)};this.adaptRangeDifferenceToZoomLevel=function(b,a){var d=runtime.getWindow();return(d=d&&d.document)&&e(d)?b:b/a};(function(b){var a=runtime.getWindow(),d;null!==a&&(d=a.navigator.appVersion.toLowerCase(),a=-1===d.indexOf("chrome")&&(-1!==d.indexOf("applewebkit")||-1!==d.indexOf("safari")),d=d.indexOf("msie"),a||d)&&(b.containsNode=c)})(this)};return core.DomUtils})();
++(function(){function h(e){var h,l,q,a;void 0===m&&(a=e.createElement("div"),a.style.position="absolute",a.style.left="-99999px",a.style.transform="scale(2)",a.style["-webkit-transform"]="scale(2)",q=e.createElement("div"),q.style.width="10px",q.style.height="10px",a.appendChild(q),e.body.appendChild(a),h=q.ownerDocument.createRange(),l=q.getBoundingClientRect(),h.selectNode(q),q=h.getBoundingClientRect(),m=l.height!==q.height,h.detach(),e.body.removeChild(a));return m}var m;core.DomUtil [...]
++f){var b=null;a.nodeType===Node.TEXT_NODE&&(0===a.length?(a.parentNode.removeChild(a),f.nodeType===Node.TEXT_NODE&&(b=f)):(f.nodeType===Node.TEXT_NODE&&(a.appendData(f.data),f.parentNode.removeChild(f)),b=a));return b}function m(a){for(var f=a.parentNode;a.firstChild;)f.insertBefore(a.firstChild,a);f.removeChild(a);return f}function l(a,f){for(var b=a.parentNode,k=a.firstChild,c;k;)c=k.nextSibling,l(k,f),k=c;f(a)&&(b=m(a));return b}function q(a,f){for(var b=0,k;a.parentNode!==f;)runtime [...]
++a.parentNode,"parent is null"),a=a.parentNode;for(k=f.firstChild;k!==a;)b+=1,k=k.nextSibling;return b}function a(a,f){return a===f||Boolean(a.compareDocumentPosition(f)&Node.DOCUMENT_POSITION_CONTAINED_BY)}this.splitBoundaries=function(a){var f=[],b;if(a.startContainer.nodeType===Node.TEXT_NODE||a.endContainer.nodeType===Node.TEXT_NODE){b=a.endContainer;var k=a.endOffset;if(k<b.childNodes.length)for(b=b.childNodes[k],k=0;b.firstChild;)b=b.firstChild;else for(;b.lastChild;)b=b.lastChild, [...]
++Node.TEXT_NODE?b.textContent.length:b.childNodes.length;a.setEnd(b,k);0!==a.endOffset&&a.endContainer.nodeType===Node.TEXT_NODE&&a.endOffset!==a.endContainer.length&&(f.push(a.endContainer.splitText(a.endOffset)),f.push(a.endContainer));0!==a.startOffset&&a.startContainer.nodeType===Node.TEXT_NODE&&a.startOffset!==a.startContainer.length&&(b=a.startContainer.splitText(a.startOffset),f.push(a.startContainer),f.push(b),a.setStart(b,0))}return f};this.containsRange=function(a,f){return 0>= [...]
++f)&&0<=a.compareBoundaryPoints(a.END_TO_END,f)};this.rangesIntersect=function(a,f){return 0>=a.compareBoundaryPoints(a.END_TO_START,f)&&0<=a.compareBoundaryPoints(a.START_TO_END,f)};this.getNodesInRange=function(a,f){var b=[],k,c,g=a.startContainer.ownerDocument.createTreeWalker(a.commonAncestorContainer,NodeFilter.SHOW_ALL,f,!1);for(k=g.currentNode=a.startContainer;k;){c=f(k);if(c===NodeFilter.FILTER_ACCEPT)b.push(k);else if(c===NodeFilter.FILTER_REJECT)break;k=k.parentNode}b.reverse() [...]
++k=g.nextNode();return b};this.normalizeTextNodes=function(a){a&&a.nextSibling&&(a=e(a,a.nextSibling));a&&a.previousSibling&&e(a.previousSibling,a)};this.rangeContainsNode=function(a,f){var b=f.ownerDocument.createRange(),k=f.nodeType===Node.TEXT_NODE?f.length:f.childNodes.length;b.setStart(a.startContainer,a.startOffset);b.setEnd(a.endContainer,a.endOffset);k=0===b.comparePoint(f,0)&&0===b.comparePoint(f,k);b.detach();return k};this.mergeIntoParent=m;this.removeUnwantedNodes=l;this.getE [...]
++function(a,f,b){return Array.prototype.slice.call(a.getElementsByTagNameNS(f,b))};this.rangeIntersectsNode=function(a,f){var b=f.nodeType===Node.TEXT_NODE?f.length:f.childNodes.length;return 0>=a.comparePoint(f,0)&&0<=a.comparePoint(f,b)};this.containsNode=function(a,f){return a===f||a.contains(f)};this.comparePoints=function(a,f,b,k){if(a===b)return k-f;var c=a.compareDocumentPosition(b);2===c?c=-1:4===c?c=1:10===c?(f=q(a,b),c=f<k?1:-1):(k=q(b,a),c=k<f?-1:1);return c};this.areRangeRect [...]
++function(a){return!h(a)};this.adaptRangeDifferenceToZoomLevel=function(a,f){var b=runtime.getWindow();return(b=b&&b.document)&&h(b)?a:a/f};(function(d){var f=runtime.getWindow(),b;null!==f&&(b=f.navigator.appVersion.toLowerCase(),f=-1===b.indexOf("chrome")&&(-1!==b.indexOf("applewebkit")||-1!==b.indexOf("safari")),b=b.indexOf("msie"),f||b)&&(d.containsNode=a)})(this)};return core.DomUtils})();
 +// Input 10
 +runtime.loadClass("core.DomUtils");
- core.Cursor=function(e,h){function f(a){a.parentNode&&(b.push(a.previousSibling),b.push(a.nextSibling),a.parentNode.removeChild(a))}function n(a,d,c){if(d.nodeType===Node.TEXT_NODE){runtime.assert(Boolean(d),"putCursorIntoTextNode: invalid container");var k=d.parentNode;runtime.assert(Boolean(k),"putCursorIntoTextNode: container without parent");runtime.assert(0<=c&&c<=d.length,"putCursorIntoTextNode: offset is out of bounds");0===c?k.insertBefore(a,d):(c!==d.length&&d.splitText(c),k.in [...]
- d.nextSibling))}else if(d.nodeType===Node.ELEMENT_NODE){runtime.assert(Boolean(d),"putCursorIntoContainer: invalid container");for(k=d.firstChild;null!==k&&0<c;)k=k.nextSibling,c-=1;d.insertBefore(a,k)}b.push(a.previousSibling);b.push(a.nextSibling)}var m=e.createElementNS("urn:webodf:names:cursor","cursor"),p=e.createElementNS("urn:webodf:names:cursor","anchor"),c,b=[],a,d,k=new core.DomUtils;this.getNode=function(){return m};this.getAnchorNode=function(){return p.parentNode?p:m};this. [...]
- function(){d?(a.setStartBefore(m),a.collapse(!0)):(a.setStartAfter(c?p:m),a.setEndBefore(c?m:p));return a};this.setSelectedRange=function(g,q){a&&a!==g&&a.detach();a=g;c=!1!==q;(d=g.collapsed)?(f(p),f(m),n(m,g.startContainer,g.startOffset)):(f(p),f(m),n(c?m:p,g.endContainer,g.endOffset),n(c?p:m,g.startContainer,g.startOffset));b.forEach(k.normalizeTextNodes);b.length=0};this.hasForwardSelection=function(){return c};this.remove=function(){f(m);b.forEach(k.normalizeTextNodes);b.length=0}; [...]
- "memberId",h);p.setAttributeNS("urn:webodf:names:cursor","memberId",h)};
++core.Cursor=function(h,m){function e(c){c.parentNode&&(d.push(c.previousSibling),d.push(c.nextSibling),c.parentNode.removeChild(c))}function p(c,a,b){if(a.nodeType===Node.TEXT_NODE){runtime.assert(Boolean(a),"putCursorIntoTextNode: invalid container");var f=a.parentNode;runtime.assert(Boolean(f),"putCursorIntoTextNode: container without parent");runtime.assert(0<=b&&b<=a.length,"putCursorIntoTextNode: offset is out of bounds");0===b?f.insertBefore(c,a):(b!==a.length&&a.splitText(b),f.in [...]
++a.nextSibling))}else a.nodeType===Node.ELEMENT_NODE&&a.insertBefore(c,a.childNodes[b]);d.push(c.previousSibling);d.push(c.nextSibling)}var l=h.createElementNS("urn:webodf:names:cursor","cursor"),q=h.createElementNS("urn:webodf:names:cursor","anchor"),a,d=[],f,b,k=new core.DomUtils;this.getNode=function(){return l};this.getAnchorNode=function(){return q.parentNode?q:l};this.getSelectedRange=function(){b?(f.setStartBefore(l),f.collapse(!0)):(f.setStartAfter(a?q:l),f.setEndBefore(a?l:q));r [...]
++function(c,g){f&&f!==c&&f.detach();f=c;a=!1!==g;(b=c.collapsed)?(e(q),e(l),p(l,c.startContainer,c.startOffset)):(e(q),e(l),p(a?l:q,c.endContainer,c.endOffset),p(a?q:l,c.startContainer,c.startOffset));d.forEach(k.normalizeTextNodes);d.length=0};this.hasForwardSelection=function(){return a};this.remove=function(){e(l);d.forEach(k.normalizeTextNodes);d.length=0};l.setAttributeNS("urn:webodf:names:cursor","memberId",m);q.setAttributeNS("urn:webodf:names:cursor","memberId",m)};
 +// Input 11
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- core.EventNotifier=function(e){var h={};this.emit=function(f,e){var m,p;runtime.assert(h.hasOwnProperty(f),'unknown event fired "'+f+'"');p=h[f];for(m=0;m<p.length;m+=1)p[m](e)};this.subscribe=function(f,e){runtime.assert(h.hasOwnProperty(f),'tried to subscribe to unknown event "'+f+'"');h[f].push(e);runtime.log('event "'+f+'" subscribed.')};this.unsubscribe=function(f,e){var m;runtime.assert(h.hasOwnProperty(f),'tried to unsubscribe from unknown event "'+f+'"');m=h[f].indexOf(e);runtim [...]
- m,'tried to unsubscribe unknown callback from event "'+f+'"');-1!==m&&h[f].splice(m,1);runtime.log('event "'+f+'" unsubscribed.')};(function(){var f;for(f=0;f<e.length;f+=1)h[e[f]]=[]})()};
++core.EventNotifier=function(h){var m={};this.emit=function(e,h){var l,q;runtime.assert(m.hasOwnProperty(e),'unknown event fired "'+e+'"');q=m[e];for(l=0;l<q.length;l+=1)q[l](h)};this.subscribe=function(e,h){runtime.assert(m.hasOwnProperty(e),'tried to subscribe to unknown event "'+e+'"');m[e].push(h);runtime.log('event "'+e+'" subscribed.')};this.unsubscribe=function(e,h){var l;runtime.assert(m.hasOwnProperty(e),'tried to unsubscribe from unknown event "'+e+'"');l=m[e].indexOf(h);runtim [...]
++l,'tried to unsubscribe unknown callback from event "'+e+'"');-1!==l&&m[e].splice(l,1);runtime.log('event "'+e+'" unsubscribed.')};(function(){var e;for(e=0;e<h.length;e+=1)m[h[e]]=[]})()};
 +// Input 12
 +core.UnitTest=function(){};core.UnitTest.prototype.setUp=function(){};core.UnitTest.prototype.tearDown=function(){};core.UnitTest.prototype.description=function(){};core.UnitTest.prototype.tests=function(){};core.UnitTest.prototype.asyncTests=function(){};
- core.UnitTest.provideTestAreaDiv=function(){var e=runtime.getWindow().document,h=e.getElementById("testarea");runtime.assert(!h,'Unclean test environment, found a div with id "testarea".');h=e.createElement("div");h.setAttribute("id","testarea");e.body.appendChild(h);return h};
- core.UnitTest.cleanupTestAreaDiv=function(){var e=runtime.getWindow().document,h=e.getElementById("testarea");runtime.assert(!!h&&h.parentNode===e.body,'Test environment broken, found no div with id "testarea" below body.');e.body.removeChild(h)};core.UnitTest.createOdtDocument=function(e,h){var f="<?xml version='1.0' encoding='UTF-8'?>",f=f+"<office:document";Object.keys(h).forEach(function(e){f+=" xmlns:"+e+'="'+h[e]+'"'});f+=">";f+=e;f+="</office:document>";return runtime.parseXML(f)};
- core.UnitTestRunner=function(){function e(a){c+=1;runtime.log("fail",a)}function h(a,d){var b;try{if(a.length!==d.length)return e("array of length "+a.length+" should be "+d.length+" long"),!1;for(b=0;b<a.length;b+=1)if(a[b]!==d[b])return e(a[b]+" should be "+d[b]+" at array index "+b),!1}catch(c){return!1}return!0}function f(a,d,b){var c=a.attributes,q=c.length,l,r,h;for(l=0;l<q;l+=1)if(r=c.item(l),"xmlns"!==r.prefix){h=d.getAttributeNS(r.namespaceURI,r.localName);if(!d.hasAttributeNS( [...]
- r.localName))return e("Attribute "+r.localName+" with value "+r.value+" was not present"),!1;if(h!==r.value)return e("Attribute "+r.localName+" was "+h+" should be "+r.value),!1}return b?!0:f(d,a,!0)}function n(a,d){if(a.nodeType!==d.nodeType)return e(a.nodeType+" should be "+d.nodeType),!1;if(a.nodeType===Node.TEXT_NODE)return a.data===d.data;runtime.assert(a.nodeType===Node.ELEMENT_NODE,"Only textnodes and elements supported.");if(a.namespaceURI!==d.namespaceURI||a.localName!==d.local [...]
- " should be "+d.namespaceURI),!1;if(!f(a,d,!1))return!1;for(var b=a.firstChild,c=d.firstChild;b;){if(!c||!n(b,c))return!1;b=b.nextSibling;c=c.nextSibling}return c?!1:!0}function m(a,d){return 0===d?a===d&&1/a===1/d:a===d?!0:"number"===typeof d&&isNaN(d)?"number"===typeof a&&isNaN(a):Object.prototype.toString.call(d)===Object.prototype.toString.call([])?h(a,d):"object"===typeof d&&"object"===typeof a?d.constructor===Element||d.constructor===Node?n(d,a):b(d,a):!1}function p(a,d,b){"string [...]
- "string"===typeof b||runtime.log("WARN: shouldBe() expects string arguments");var c,q;try{q=eval(d)}catch(l){c=l}a=eval(b);c?e(d+" should be "+a+". Threw exception "+c):m(q,a)?runtime.log("pass",d+" is "+b):String(typeof q)===String(typeof a)?(b=0===q&&0>1/q?"-0":String(q),e(d+" should be "+a+". Was "+b+".")):e(d+" should be "+a+" (of type "+typeof a+"). Was "+q+" (of type "+typeof q+").")}var c=0,b;b=function(a,d){var b=Object.keys(a),c=Object.keys(d);b.sort();c.sort();return h(b,c)&&O [...]
- a[b],g=d[b];return m(c,g)?!0:(e(c+" should be "+g+" for key "+b),!1)})};this.areNodesEqual=n;this.shouldBeNull=function(a,d){p(a,d,"null")};this.shouldBeNonNull=function(a,d){var b,c;try{c=eval(d)}catch(q){b=q}b?e(d+" should be non-null. Threw exception "+b):null!==c?runtime.log("pass",d+" is non-null."):e(d+" should be non-null. Was "+c)};this.shouldBe=p;this.countFailedTests=function(){return c}};
- core.UnitTester=function(){function e(f,e){return"<span style='color:blue;cursor:pointer' onclick='"+e+"'>"+f+"</span>"}var h=0,f={};this.runTests=function(n,m,p){function c(g){if(0===g.length)f[b]=k,h+=a.countFailedTests(),m();else{q=g[0];var l=Runtime.getFunctionName(q);runtime.log("Running "+l);r=a.countFailedTests();d.setUp();q(function(){d.tearDown();k[l]=r===a.countFailedTests();c(g.slice(1))})}}var b=Runtime.getFunctionName(n),a=new core.UnitTestRunner,d=new n(a),k={},g,q,l,r,t=" [...]
- runtime.type();if(f.hasOwnProperty(b))runtime.log("Test "+b+" has already run.");else{t?runtime.log("<span>Running "+e(b,'runSuite("'+b+'");')+": "+d.description()+"</span>"):runtime.log("Running "+b+": "+d.description);l=d.tests();for(g=0;g<l.length;g+=1)q=l[g],n=Runtime.getFunctionName(q)||q.testName,p.length&&-1===p.indexOf(n)||(t?runtime.log("<span>Running "+e(n,'runTest("'+b+'","'+n+'")')+"</span>"):runtime.log("Running "+n),r=a.countFailedTests(),d.setUp(),q(),d.tearDown(),k[n]=r= [...]
- c(d.asyncTests())}};this.countFailedTests=function(){return h};this.results=function(){return f}};
++core.UnitTest.provideTestAreaDiv=function(){var h=runtime.getWindow().document,m=h.getElementById("testarea");runtime.assert(!m,'Unclean test environment, found a div with id "testarea".');m=h.createElement("div");m.setAttribute("id","testarea");h.body.appendChild(m);return m};
++core.UnitTest.cleanupTestAreaDiv=function(){var h=runtime.getWindow().document,m=h.getElementById("testarea");runtime.assert(!!m&&m.parentNode===h.body,'Test environment broken, found no div with id "testarea" below body.');h.body.removeChild(m)};core.UnitTest.createOdtDocument=function(h,m){var e="<?xml version='1.0' encoding='UTF-8'?>",e=e+"<office:document";Object.keys(m).forEach(function(h){e+=" xmlns:"+h+'="'+m[h]+'"'});e+=">";e+=h;e+="</office:document>";return runtime.parseXML(e)};
++core.UnitTestRunner=function(){function h(f){a+=1;runtime.log("fail",f)}function m(a,b){var d;try{if(a.length!==b.length)return h("array of length "+a.length+" should be "+b.length+" long"),!1;for(d=0;d<a.length;d+=1)if(a[d]!==b[d])return h(a[d]+" should be "+b[d]+" at array index "+d),!1}catch(c){return!1}return!0}function e(a,b,d){var c=a.attributes,g=c.length,n,r,l;for(n=0;n<g;n+=1)if(r=c.item(n),"xmlns"!==r.prefix&&"urn:webodf:names:steps"!==r.namespaceURI){l=b.getAttributeNS(r.name [...]
++if(!b.hasAttributeNS(r.namespaceURI,r.localName))return h("Attribute "+r.localName+" with value "+r.value+" was not present"),!1;if(l!==r.value)return h("Attribute "+r.localName+" was "+l+" should be "+r.value),!1}return d?!0:e(b,a,!0)}function p(a,b){if(a.nodeType!==b.nodeType)return h("Nodetype '"+a.nodeType+"' should be '"+b.nodeType+"'"),!1;if(a.nodeType===Node.TEXT_NODE){if(a.data===b.data)return!0;h("Textnode data '"+a.data+"' should be '"+b.data+"'");return!1}runtime.assert(a.nod [...]
++"Only textnodes and elements supported.");if(a.namespaceURI!==b.namespaceURI)return h("namespace '"+a.namespaceURI+"' should be '"+b.namespaceURI+"'"),!1;if(a.localName!==b.localName)return h("localName '"+a.localName+"' should be '"+b.localName+"'"),!1;if(!e(a,b,!1))return!1;for(var d=a.firstChild,c=b.firstChild;d;){if(!c)return h("Nodetype '"+d.nodeType+"' is unexpected here."),!1;if(!p(d,c))return!1;d=d.nextSibling;c=c.nextSibling}return c?(h("Nodetype '"+c.nodeType+"' is missing her [...]
++function l(a,b){return 0===b?a===b&&1/a===1/b:a===b?!0:"number"===typeof b&&isNaN(b)?"number"===typeof a&&isNaN(a):Object.prototype.toString.call(b)===Object.prototype.toString.call([])?m(a,b):"object"===typeof b&&"object"===typeof a?b.constructor===Element||b.constructor===Node?p(b,a):d(b,a):!1}function q(a,b,d){"string"===typeof b&&"string"===typeof d||runtime.log("WARN: shouldBe() expects string arguments");var c,g;try{g=eval(b)}catch(n){c=n}a=eval(d);c?h(b+" should be "+a+". Threw e [...]
++c):l(g,a)?runtime.log("pass",b+" is "+d):String(typeof g)===String(typeof a)?(d=0===g&&0>1/g?"-0":String(g),h(b+" should be "+a+". Was "+d+".")):h(b+" should be "+a+" (of type "+typeof a+"). Was "+g+" (of type "+typeof g+").")}var a=0,d;d=function(a,b){var d=Object.keys(a),c=Object.keys(b);d.sort();c.sort();return m(d,c)&&Object.keys(a).every(function(c){var d=a[c],k=b[c];return l(d,k)?!0:(h(d+" should be "+k+" for key "+c),!1)})};this.areNodesEqual=p;this.shouldBeNull=function(a,b){q(a [...]
++this.shouldBeNonNull=function(a,b){var d,c;try{c=eval(b)}catch(g){d=g}d?h(b+" should be non-null. Threw exception "+d):null!==c?runtime.log("pass",b+" is non-null."):h(b+" should be non-null. Was "+c)};this.shouldBe=q;this.countFailedTests=function(){return a}};
++core.UnitTester=function(){function h(e,h){return"<span style='color:blue;cursor:pointer' onclick='"+h+"'>"+e+"</span>"}var m=0,e={};this.runTests=function(p,l,q){function a(c){if(0===c.length)e[d]=k,m+=f.countFailedTests(),l();else{g=c[0];var n=Runtime.getFunctionName(g);runtime.log("Running "+n);r=f.countFailedTests();b.setUp();g(function(){b.tearDown();k[n]=r===f.countFailedTests();a(c.slice(1))})}}var d=Runtime.getFunctionName(p),f=new core.UnitTestRunner,b=new p(f),k={},c,g,n,r,u=" [...]
++runtime.type();if(e.hasOwnProperty(d))runtime.log("Test "+d+" has already run.");else{u?runtime.log("<span>Running "+h(d,'runSuite("'+d+'");')+": "+b.description()+"</span>"):runtime.log("Running "+d+": "+b.description);n=b.tests();for(c=0;c<n.length;c+=1)g=n[c],p=Runtime.getFunctionName(g)||g.testName,q.length&&-1===q.indexOf(p)||(u?runtime.log("<span>Running "+h(p,'runTest("'+d+'","'+p+'")')+"</span>"):runtime.log("Running "+p),r=f.countFailedTests(),b.setUp(),g(),b.tearDown(),k[p]=r= [...]
++a(b.asyncTests())}};this.countFailedTests=function(){return m};this.results=function(){return e}};
 +// Input 13
- core.PositionIterator=function(e,h,f,n){function m(){this.acceptNode=function(a){return a.nodeType===Node.TEXT_NODE&&0===a.length?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}function p(a){this.acceptNode=function(d){return d.nodeType===Node.TEXT_NODE&&0===d.length?NodeFilter.FILTER_REJECT:a.acceptNode(d)}}function c(){var b=a.currentNode.nodeType;d=b===Node.TEXT_NODE?a.currentNode.length-1:b===Node.ELEMENT_NODE?1:0}var b=this,a,d,k;this.nextPosition=function(){if(a.currentNode=== [...]
- if(0===d&&a.currentNode.nodeType===Node.ELEMENT_NODE)null===a.firstChild()&&(d=1);else if(a.currentNode.nodeType===Node.TEXT_NODE&&d+1<a.currentNode.length)d+=1;else if(null!==a.nextSibling())d=0;else if(a.parentNode())d=1;else return!1;return!0};this.previousPosition=function(){var b=!0;if(0===d)if(null===a.previousSibling()){if(!a.parentNode()||a.currentNode===e)return a.firstChild(),!1;d=0}else c();else a.currentNode.nodeType===Node.TEXT_NODE?d-=1:null!==a.lastChild()?c():a.currentNo [...]
- d=0;return b};this.container=function(){var b=a.currentNode,c=b.nodeType;return 0===d&&c!==Node.TEXT_NODE?b.parentNode:b};this.rightNode=function(){var b=a.currentNode,c=b.nodeType;if(c===Node.TEXT_NODE&&d===b.length)for(b=b.nextSibling;b&&1!==k(b);)b=b.nextSibling;else c===Node.ELEMENT_NODE&&1===d&&(b=null);return b};this.leftNode=function(){var b=a.currentNode;if(0===d)for(b=b.previousSibling;b&&1!==k(b);)b=b.previousSibling;else if(b.nodeType===Node.ELEMENT_NODE)for(b=b.lastChild;b&& [...]
- b.previousSibling;return b};this.getCurrentNode=function(){return a.currentNode};this.unfilteredDomOffset=function(){if(a.currentNode.nodeType===Node.TEXT_NODE)return d;for(var b=0,c=a.currentNode,c=1===d?c.lastChild:c.previousSibling;c;)b+=1,c=c.previousSibling;return b};this.getPreviousSibling=function(){var d=a.currentNode,b=a.previousSibling();a.currentNode=d;return b};this.getNextSibling=function(){var d=a.currentNode,b=a.nextSibling();a.currentNode=d;return b};this.setUnfilteredPo [...]
- f){var l,h;runtime.assert(null!==c&&void 0!==c,"PositionIterator.setUnfilteredPosition called without container");a.currentNode=c;if(c.nodeType===Node.TEXT_NODE)return d=f,runtime.assert(f<=c.length,"Error in setPosition: "+f+" > "+c.length),runtime.assert(0<=f,"Error in setPosition: "+f+" < 0"),f===c.length&&(d=void 0,a.nextSibling()?d=0:a.parentNode()&&(d=1),runtime.assert(void 0!==d,"Error in setPosition: position not valid.")),!0;l=k(c);for(h=c.parentNode;h&&h!==e&&l===NodeFilter.FI [...]
- k(h),l!==NodeFilter.FILTER_ACCEPT&&(a.currentNode=h),h=h.parentNode;f<c.childNodes.length&&l!==NodeFilter.FILTER_REJECT?(a.currentNode=c.childNodes[f],l=k(a.currentNode),d=0):d=1;l===NodeFilter.FILTER_REJECT&&(d=1);if(l!==NodeFilter.FILTER_ACCEPT)return b.nextPosition();runtime.assert(k(a.currentNode)===NodeFilter.FILTER_ACCEPT,"PositionIterater.setUnfilteredPosition call resulted in an non-visible node being set");return!0};this.moveToEnd=function(){a.currentNode=e;d=1};this.moveToEndO [...]
- Node.TEXT_NODE?b.setUnfilteredPosition(c,c.length):(a.currentNode=c,d=1)};this.getNodeFilter=function(){return k};k=(f?new p(f):new m).acceptNode;k.acceptNode=k;a=e.ownerDocument.createTreeWalker(e,h||4294967295,k,n);d=0;null===a.firstChild()&&(d=1)};
++core.PositionIterator=function(h,m,e,p){function l(){this.acceptNode=function(c){return c.nodeType===Node.TEXT_NODE&&0===c.length?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}function q(c){this.acceptNode=function(a){return a.nodeType===Node.TEXT_NODE&&0===a.length?NodeFilter.FILTER_REJECT:c.acceptNode(a)}}function a(){var c=b.currentNode.nodeType;k=c===Node.TEXT_NODE?b.currentNode.length-1:c===Node.ELEMENT_NODE?1:0}function d(){if(null===b.previousSibling()){if(!b.parentNode()||b [...]
++h)return b.firstChild(),!1;k=0}else a();return!0}var f=this,b,k,c;this.nextPosition=function(){if(b.currentNode===h)return!1;if(0===k&&b.currentNode.nodeType===Node.ELEMENT_NODE)null===b.firstChild()&&(k=1);else if(b.currentNode.nodeType===Node.TEXT_NODE&&k+1<b.currentNode.length)k+=1;else if(null!==b.nextSibling())k=0;else if(b.parentNode())k=1;else return!1;return!0};this.previousPosition=function(){var c=!0;0===k?c=d():b.currentNode.nodeType===Node.TEXT_NODE?k-=1:null!==b.lastChild() [...]
++h?c=!1:k=0;return c};this.previousNode=d;this.container=function(){var c=b.currentNode,a=c.nodeType;return 0===k&&a!==Node.TEXT_NODE?c.parentNode:c};this.rightNode=function(){var a=b.currentNode,d=a.nodeType;if(d===Node.TEXT_NODE&&k===a.length)for(a=a.nextSibling;a&&1!==c(a);)a=a.nextSibling;else d===Node.ELEMENT_NODE&&1===k&&(a=null);return a};this.leftNode=function(){var a=b.currentNode;if(0===k)for(a=a.previousSibling;a&&1!==c(a);)a=a.previousSibling;else if(a.nodeType===Node.ELEMENT [...]
++a.lastChild;a&&1!==c(a);)a=a.previousSibling;return a};this.getCurrentNode=function(){return b.currentNode};this.unfilteredDomOffset=function(){if(b.currentNode.nodeType===Node.TEXT_NODE)return k;for(var c=0,a=b.currentNode,a=1===k?a.lastChild:a.previousSibling;a;)c+=1,a=a.previousSibling;return c};this.getPreviousSibling=function(){var c=b.currentNode,a=b.previousSibling();b.currentNode=c;return a};this.getNextSibling=function(){var c=b.currentNode,a=b.nextSibling();b.currentNode=c;ret [...]
++function(a,d){var e,l;runtime.assert(null!==a&&void 0!==a,"PositionIterator.setUnfilteredPosition called without container");b.currentNode=a;if(a.nodeType===Node.TEXT_NODE)return k=d,runtime.assert(d<=a.length,"Error in setPosition: "+d+" > "+a.length),runtime.assert(0<=d,"Error in setPosition: "+d+" < 0"),d===a.length&&(k=void 0,b.nextSibling()?k=0:b.parentNode()&&(k=1),runtime.assert(void 0!==k,"Error in setPosition: position not valid.")),!0;e=c(a);for(l=a.parentNode;l&&l!==h&&e===No [...]
++c(l),e!==NodeFilter.FILTER_ACCEPT&&(b.currentNode=l),l=l.parentNode;d<a.childNodes.length&&e!==NodeFilter.FILTER_REJECT?(b.currentNode=a.childNodes[d],e=c(b.currentNode),k=0):k=1;e===NodeFilter.FILTER_REJECT&&(k=1);if(e!==NodeFilter.FILTER_ACCEPT)return f.nextPosition();runtime.assert(c(b.currentNode)===NodeFilter.FILTER_ACCEPT,"PositionIterater.setUnfilteredPosition call resulted in an non-visible node being set");return!0};this.moveToEnd=function(){b.currentNode=h;k=1};this.moveToEndO [...]
++Node.TEXT_NODE?f.setUnfilteredPosition(c,c.length):(b.currentNode=c,k=1)};this.getNodeFilter=function(){return c};c=(e?new q(e):new l).acceptNode;c.acceptNode=c;b=h.ownerDocument.createTreeWalker(h,m||4294967295,c,p);k=0;null===b.firstChild()&&(k=1)};
 +// Input 14
- runtime.loadClass("core.PositionIterator");core.PositionFilter=function(){};core.PositionFilter.FilterResult={FILTER_ACCEPT:1,FILTER_REJECT:2,FILTER_SKIP:3};core.PositionFilter.prototype.acceptPosition=function(e){};(function(){return core.PositionFilter})();
++runtime.loadClass("core.PositionIterator");core.PositionFilter=function(){};core.PositionFilter.FilterResult={FILTER_ACCEPT:1,FILTER_REJECT:2,FILTER_SKIP:3};core.PositionFilter.prototype.acceptPosition=function(h){};(function(){return core.PositionFilter})();
 +// Input 15
- runtime.loadClass("core.PositionFilter");core.PositionFilterChain=function(){var e={},h=core.PositionFilter.FilterResult.FILTER_ACCEPT,f=core.PositionFilter.FilterResult.FILTER_REJECT;this.acceptPosition=function(n){for(var m in e)if(e.hasOwnProperty(m)&&e[m].acceptPosition(n)===f)return f;return h};this.addFilter=function(f,h){e[f]=h};this.removeFilter=function(f){delete e[f]}};
++runtime.loadClass("core.PositionFilter");core.PositionFilterChain=function(){var h={},m=core.PositionFilter.FilterResult.FILTER_ACCEPT,e=core.PositionFilter.FilterResult.FILTER_REJECT;this.acceptPosition=function(p){for(var l in h)if(h.hasOwnProperty(l)&&h[l].acceptPosition(p)===e)return e;return m};this.addFilter=function(e,l){h[e]=l};this.removeFilter=function(e){delete h[e]}};
 +// Input 16
- core.ScheduledTask=function(e,h){function f(){e();p=!1}function n(){p&&(runtime.clearTimeout(m),p=!1)}var m,p=!1;this.trigger=function(){p||(m=runtime.setTimeout(f,h))};this.triggerImmediate=function(){n();f()};this.processRequests=function(){p&&(n(),f())};this.cancel=n;this.destroy=function(c){n();c()}};
++core.ScheduledTask=function(h,m){function e(){h();q=!1}function p(){q&&(runtime.clearTimeout(l),q=!1)}var l,q=!1;this.trigger=function(){q||(l=runtime.setTimeout(e,m))};this.triggerImmediate=function(){p();e()};this.processRequests=function(){q&&(p(),e())};this.cancel=p;this.destroy=function(a){p();a()}};
 +// Input 17
- core.Async=function(){this.forEach=function(e,h,f){function n(b){c!==p&&(b?(c=p,f(b)):(c+=1,c===p&&f(null)))}var m,p=e.length,c=0;for(m=0;m<p;m+=1)h(e[m],n)};this.destroyAll=function(e,h){function f(n,m){if(m)h(m);else if(n<e.length)e[n](function(e){f(n+1,e)});else h()}f(0,void 0)}};
++core.Async=function(){this.forEach=function(h,m,e){function p(d){a!==q&&(d?(a=q,e(d)):(a+=1,a===q&&e(null)))}var l,q=h.length,a=0;for(l=0;l<q;l+=1)m(h[l],p)};this.destroyAll=function(h,m){function e(p,l){if(l)m(l);else if(p<h.length)h[p](function(h){e(p+1,h)});else m()}e(0,void 0)}};
 +// Input 18
 +/*
 +
 + WebODF
 + Copyright (c) 2010 Jos van den Oever
 + Licensed under the ... License:
 +
 + Project home: http://www.webodf.org/
 +*/
 +runtime.loadClass("core.RawInflate");runtime.loadClass("core.ByteArray");runtime.loadClass("core.ByteArrayWriter");runtime.loadClass("core.Base64");
- core.Zip=function(e,h){function f(a){var d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,368 [...]
++core.Zip=function(h,m){function e(c){var a=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,368 [...]
 +853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,31404270 [...]
 +4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,38149189 [...]
 +225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400 [...]
 +2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,123163630 [...]
- 2932959818,3654703836,1088359270,936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],b,c,g=a.length,l=0,l=0;b=-1;for(c=0;c<g;c+=1)l=(b^a[c])&255,l=d[l],b=b>>>8^l;return b^-1}function n(a){return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&15,a>>5&63,(a&31)<<1)}function m(a){var d=a.getFullYear();return 1980 [...]
- 25|a.getMonth()+1<<21|a.getDate()<<16|a.getHours()<<11|a.getMinutes()<<5|a.getSeconds()>>1}function p(a,d){var b,c,g,l,k,f,e,q=this;this.load=function(d){if(void 0!==q.data)d(null,q.data);else{var b=k+34+c+g+256;b+e>r&&(b=r-e);runtime.read(a,e,b,function(b,c){if(b||null===c)d(b,c);else a:{var g=c,e=new core.ByteArray(g),h=e.readUInt32LE(),r;if(67324752!==h)d("File entry signature is wrong."+h.toString()+" "+g.length.toString(),null);else{e.pos+=22;h=e.readUInt16LE();r=e.readUInt16LE();e [...]
- if(l){g=g.slice(e.pos,e.pos+k);if(k!==g.length){d("The amount of compressed bytes read was "+g.length.toString()+" instead of "+k.toString()+" for "+q.filename+" in "+a+".",null);break a}g=w(g,f)}else g=g.slice(e.pos,e.pos+f);f!==g.length?d("The amount of bytes read was "+g.length.toString()+" instead of "+f.toString()+" for "+q.filename+" in "+a+".",null):(q.data=g,d(null,g))}}})}};this.set=function(a,d,b,c){q.filename=a;q.data=d;q.compressed=b;q.date=c};this.error=null;d&&(b=d.readUIn [...]
- b?this.error="Central directory entry has wrong signature at position "+(d.pos-4).toString()+' for file "'+a+'": '+d.data.length.toString():(d.pos+=6,l=d.readUInt16LE(),this.date=n(d.readUInt32LE()),d.readUInt32LE(),k=d.readUInt32LE(),f=d.readUInt32LE(),c=d.readUInt16LE(),g=d.readUInt16LE(),b=d.readUInt16LE(),d.pos+=8,e=d.readUInt32LE(),this.filename=runtime.byteArrayToString(d.data.slice(d.pos,d.pos+c),"utf8"),d.pos+=c+g+b))}function c(a,d){if(22!==a.length)d("Central directory length  [...]
- v);else{var b=new core.ByteArray(a),c;c=b.readUInt32LE();101010256!==c?d("Central directory signature is wrong: "+c.toString(),v):(c=b.readUInt16LE(),0!==c?d("Zip files with non-zero disk numbers are not supported.",v):(c=b.readUInt16LE(),0!==c?d("Zip files with non-zero disk numbers are not supported.",v):(c=b.readUInt16LE(),t=b.readUInt16LE(),c!==t?d("Number of entries is inconsistent.",v):(c=b.readUInt32LE(),b=b.readUInt16LE(),b=r-22-c,runtime.read(e,b,r-b,function(a,b){if(a||null=== [...]
- new core.ByteArray(b),g,k;l=[];for(g=0;g<t;g+=1){k=new p(e,c);if(k.error){d(k.error,v);break a}l[l.length]=k}d(null,v)}})))))}}function b(a,d){var b=null,c,g;for(g=0;g<l.length;g+=1)if(c=l[g],c.filename===a){b=c;break}b?b.data?d(null,b.data):b.load(d):d(a+" not found.",null)}function a(a){var d=new core.ByteArrayWriter("utf8"),b=0;d.appendArray([80,75,3,4,20,0,0,0,0,0]);a.data&&(b=a.data.length);d.appendUInt32LE(m(a.date));d.appendUInt32LE(f(a.data));d.appendUInt32LE(b);d.appendUInt32LE [...]
- d.appendUInt16LE(0);d.appendString(a.filename);a.data&&d.appendByteArray(a.data);return d}function d(a,d){var b=new core.ByteArrayWriter("utf8"),c=0;b.appendArray([80,75,1,2,20,0,20,0,0,0,0,0]);a.data&&(c=a.data.length);b.appendUInt32LE(m(a.date));b.appendUInt32LE(f(a.data));b.appendUInt32LE(c);b.appendUInt32LE(c);b.appendUInt16LE(a.filename.length);b.appendArray([0,0,0,0,0,0,0,0,0,0,0,0]);b.appendUInt32LE(d);b.appendString(a.filename);return b}function k(a,d){if(a===l.length)d(null);el [...]
- void 0!==b.data?k(a+1,d):b.load(function(b){b?d(b):k(a+1,d)})}}function g(b,c){k(0,function(g){if(g)c(g);else{g=new core.ByteArrayWriter("utf8");var k,f,e,q=[0];for(k=0;k<l.length;k+=1)g.appendByteArrayWriter(a(l[k])),q.push(g.getLength());e=g.getLength();for(k=0;k<l.length;k+=1)f=l[k],g.appendByteArrayWriter(d(f,q[k]));k=g.getLength()-e;g.appendArray([80,75,5,6,0,0,0,0]);g.appendUInt16LE(l.length);g.appendUInt16LE(l.length);g.appendUInt32LE(k);g.appendUInt32LE(e);g.appendArray([0,0]);b [...]
- function q(a,d){g(function(b){runtime.writeFile(a,b,d)},d)}var l,r,t,w=(new core.RawInflate).inflate,v=this,y=new core.Base64;this.load=b;this.save=function(a,d,b,c){var g,k;for(g=0;g<l.length;g+=1)if(k=l[g],k.filename===a){k.set(a,d,b,c);return}k=new p(e);k.set(a,d,b,c);l.push(k)};this.remove=function(a){var d,b;for(d=0;d<l.length;d+=1)if(b=l[d],b.filename===a)return l.splice(d,1),!0;return!1};this.write=function(a){q(e,a)};this.writeAs=q;this.createByteArray=g;this.loadContentXmlAsFra [...]
- d){v.loadAsString(a,function(a,b){if(a)return d.rootElementReady(a);d.rootElementReady(null,b,!0)})};this.loadAsString=function(a,d){b(a,function(a,b){if(a||null===b)return d(a,null);var c=runtime.byteArrayToString(b,"utf8");d(null,c)})};this.loadAsDOM=function(a,d){v.loadAsString(a,function(a,b){if(a||null===b)d(a,null);else{var c=(new DOMParser).parseFromString(b,"text/xml");d(null,c)}})};this.loadAsDataURL=function(a,d,c){b(a,function(a,b){if(a)return c(a,null);var g=0,k;d||(d=80===b [...]
- b[2]&&71===b[3]?"image/png":255===b[0]&&216===b[1]&&255===b[2]?"image/jpeg":71===b[0]&&73===b[1]&&70===b[2]?"image/gif":"");for(k="data:"+d+";base64,";g<b.length;)k+=y.convertUTF8ArrayToBase64(b.slice(g,Math.min(g+45E3,b.length))),g+=45E3;c(null,k)})};this.getEntries=function(){return l.slice()};r=-1;null===h?l=[]:runtime.getFileSize(e,function(a){r=a;0>r?h("File '"+e+"' cannot be read.",v):runtime.read(e,r-22,22,function(a,d){a||null===h||null===d?h(a,v):c(d,h)})})};
++2932959818,3654703836,1088359270,936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],b,g,d=c.length,n=0,n=0;b=-1;for(g=0;g<d;g+=1)n=(b^c[g])&255,n=a[n],b=b>>>8^n;return b^-1}function p(c){return new Date((c>>25&127)+1980,(c>>21&15)-1,c>>16&31,c>>11&15,c>>5&63,(c&31)<<1)}function l(c){var a=c.getFullYear();return 1980 [...]
++25|c.getMonth()+1<<21|c.getDate()<<16|c.getHours()<<11|c.getMinutes()<<5|c.getSeconds()>>1}function q(c,a){var b,g,d,n,f,k,e,h=this;this.load=function(a){if(void 0!==h.data)a(null,h.data);else{var b=f+34+g+d+256;b+e>r&&(b=r-e);runtime.read(c,e,b,function(b,g){if(b||null===g)a(b,g);else a:{var d=g,e=new core.ByteArray(d),r=e.readUInt32LE(),l;if(67324752!==r)a("File entry signature is wrong."+r.toString()+" "+d.length.toString(),null);else{e.pos+=22;r=e.readUInt16LE();l=e.readUInt16LE();e [...]
++if(n){d=d.slice(e.pos,e.pos+f);if(f!==d.length){a("The amount of compressed bytes read was "+d.length.toString()+" instead of "+f.toString()+" for "+h.filename+" in "+c+".",null);break a}d=y(d,k)}else d=d.slice(e.pos,e.pos+k);k!==d.length?a("The amount of bytes read was "+d.length.toString()+" instead of "+k.toString()+" for "+h.filename+" in "+c+".",null):(h.data=d,a(null,d))}}})}};this.set=function(c,a,b,g){h.filename=c;h.data=a;h.compressed=b;h.date=g};this.error=null;a&&(b=a.readUIn [...]
++b?this.error="Central directory entry has wrong signature at position "+(a.pos-4).toString()+' for file "'+c+'": '+a.data.length.toString():(a.pos+=6,n=a.readUInt16LE(),this.date=p(a.readUInt32LE()),a.readUInt32LE(),f=a.readUInt32LE(),k=a.readUInt32LE(),g=a.readUInt16LE(),d=a.readUInt16LE(),b=a.readUInt16LE(),a.pos+=8,e=a.readUInt32LE(),this.filename=runtime.byteArrayToString(a.data.slice(a.pos,a.pos+g),"utf8"),a.pos+=g+d+b))}function a(c,a){if(22!==c.length)a("Central directory length  [...]
++x);else{var b=new core.ByteArray(c),g;g=b.readUInt32LE();101010256!==g?a("Central directory signature is wrong: "+g.toString(),x):(g=b.readUInt16LE(),0!==g?a("Zip files with non-zero disk numbers are not supported.",x):(g=b.readUInt16LE(),0!==g?a("Zip files with non-zero disk numbers are not supported.",x):(g=b.readUInt16LE(),u=b.readUInt16LE(),g!==u?a("Number of entries is inconsistent.",x):(g=b.readUInt32LE(),b=b.readUInt16LE(),b=r-22-g,runtime.read(h,b,r-b,function(c,b){if(c||null=== [...]
++new core.ByteArray(b),d,f;n=[];for(d=0;d<u;d+=1){f=new q(h,g);if(f.error){a(f.error,x);break a}n[n.length]=f}a(null,x)}})))))}}function d(c,a){var b=null,g,d;for(d=0;d<n.length;d+=1)if(g=n[d],g.filename===c){b=g;break}b?b.data?a(null,b.data):b.load(a):a(c+" not found.",null)}function f(c){var a=new core.ByteArrayWriter("utf8"),b=0;a.appendArray([80,75,3,4,20,0,0,0,0,0]);c.data&&(b=c.data.length);a.appendUInt32LE(l(c.date));a.appendUInt32LE(e(c.data));a.appendUInt32LE(b);a.appendUInt32LE [...]
++a.appendUInt16LE(0);a.appendString(c.filename);c.data&&a.appendByteArray(c.data);return a}function b(c,a){var b=new core.ByteArrayWriter("utf8"),g=0;b.appendArray([80,75,1,2,20,0,20,0,0,0,0,0]);c.data&&(g=c.data.length);b.appendUInt32LE(l(c.date));b.appendUInt32LE(e(c.data));b.appendUInt32LE(g);b.appendUInt32LE(g);b.appendUInt16LE(c.filename.length);b.appendArray([0,0,0,0,0,0,0,0,0,0,0,0]);b.appendUInt32LE(a);b.appendString(c.filename);return b}function k(c,a){if(c===n.length)a(null);el [...]
++void 0!==b.data?k(c+1,a):b.load(function(b){b?a(b):k(c+1,a)})}}function c(c,a){k(0,function(g){if(g)a(g);else{g=new core.ByteArrayWriter("utf8");var d,k,e,r=[0];for(d=0;d<n.length;d+=1)g.appendByteArrayWriter(f(n[d])),r.push(g.getLength());e=g.getLength();for(d=0;d<n.length;d+=1)k=n[d],g.appendByteArrayWriter(b(k,r[d]));d=g.getLength()-e;g.appendArray([80,75,5,6,0,0,0,0]);g.appendUInt16LE(n.length);g.appendUInt16LE(n.length);g.appendUInt32LE(d);g.appendUInt32LE(e);g.appendArray([0,0]);c [...]
++function g(a,b){c(function(c){runtime.writeFile(a,c,b)},b)}var n,r,u,y=(new core.RawInflate).inflate,x=this,w=new core.Base64;this.load=d;this.save=function(c,a,b,g){var d,f;for(d=0;d<n.length;d+=1)if(f=n[d],f.filename===c){f.set(c,a,b,g);return}f=new q(h);f.set(c,a,b,g);n.push(f)};this.remove=function(c){var a,b;for(a=0;a<n.length;a+=1)if(b=n[a],b.filename===c)return n.splice(a,1),!0;return!1};this.write=function(c){g(h,c)};this.writeAs=g;this.createByteArray=c;this.loadContentXmlAsFra [...]
++a){x.loadAsString(c,function(c,b){if(c)return a.rootElementReady(c);a.rootElementReady(null,b,!0)})};this.loadAsString=function(c,a){d(c,function(c,b){if(c||null===b)return a(c,null);var g=runtime.byteArrayToString(b,"utf8");a(null,g)})};this.loadAsDOM=function(c,a){x.loadAsString(c,function(c,b){if(c||null===b)a(c,null);else{var g=(new DOMParser).parseFromString(b,"text/xml");a(null,g)}})};this.loadAsDataURL=function(c,a,b){d(c,function(c,g){if(c)return b(c,null);var d=0,n;a||(a=80===g [...]
++g[2]&&71===g[3]?"image/png":255===g[0]&&216===g[1]&&255===g[2]?"image/jpeg":71===g[0]&&73===g[1]&&70===g[2]?"image/gif":"");for(n="data:"+a+";base64,";d<g.length;)n+=w.convertUTF8ArrayToBase64(g.slice(d,Math.min(d+45E3,g.length))),d+=45E3;b(null,n)})};this.getEntries=function(){return n.slice()};r=-1;null===m?n=[]:runtime.getFileSize(h,function(c){r=c;0>r?m("File '"+h+"' cannot be read.",x):runtime.read(h,r-22,22,function(c,b){c||null===m||null===b?m(c,x):a(b,m)})})};
 +// Input 19
- core.CSSUnits=function(){var e={"in":1,cm:2.54,mm:25.4,pt:72,pc:12};this.convert=function(h,f,n){return h*e[n]/e[f]};this.convertMeasure=function(e,f){var n,m;e&&f?(n=parseFloat(e),m=e.replace(n.toString(),""),n=this.convert(n,m,f)):n="";return n.toString()};this.getUnits=function(e){return e.substr(e.length-2,e.length)}};
++core.CSSUnits=function(){var h={"in":1,cm:2.54,mm:25.4,pt:72,pc:12};this.convert=function(m,e,p){return m*h[p]/h[e]};this.convertMeasure=function(h,e){var p,l;h&&e?(p=parseFloat(h),l=h.replace(p.toString(),""),p=this.convert(p,l,e)):p="";return p.toString()};this.getUnits=function(h){return h.substr(h.length-2,h.length)}};
 +// Input 20
 +xmldom.LSSerializerFilter=function(){};
 +// Input 21
- "function"!==typeof Object.create&&(Object.create=function(e){var h=function(){};h.prototype=e;return new h});
- xmldom.LSSerializer=function(){function e(e){var f=e||{},c=function(a){var d={},b;for(b in a)a.hasOwnProperty(b)&&(d[a[b]]=b);return d}(e),b=[f],a=[c],d=0;this.push=function(){d+=1;f=b[d]=Object.create(f);c=a[d]=Object.create(c)};this.pop=function(){b[d]=void 0;a[d]=void 0;d-=1;f=b[d];c=a[d]};this.getLocalNamespaceDefinitions=function(){return c};this.getQName=function(a){var d=a.namespaceURI,b=0,l;if(!d)return a.localName;if(l=c[d])return l+":"+a.localName;do{l||!a.prefix?(l="ns"+b,b+= [...]
- if(f[l]===d)break;if(!f[l]){f[l]=d;c[d]=l;break}l=null}while(null===l);return l+":"+a.localName}}function h(f){return f.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""")}function f(e,p){var c="",b=n.filter?n.filter.acceptNode(p):NodeFilter.FILTER_ACCEPT,a;if(b===NodeFilter.FILTER_ACCEPT&&p.nodeType===Node.ELEMENT_NODE){e.push();a=e.getQName(p);var d,k=p.attributes,g,q,l,r="",t;d="<"+a;g=k.length;for(q=0;q<g;q+=1)l=k.item(q),"ht [...]
- l.namespaceURI&&(t=n.filter?n.filter.acceptNode(l):NodeFilter.FILTER_ACCEPT,t===NodeFilter.FILTER_ACCEPT&&(t=e.getQName(l),l="string"===typeof l.value?h(l.value):l.value,r+=" "+(t+'="'+l+'"')));g=e.getLocalNamespaceDefinitions();for(q in g)g.hasOwnProperty(q)&&((k=g[q])?"xmlns"!==k&&(d+=" xmlns:"+g[q]+'="'+q+'"'):d+=' xmlns="'+q+'"');c+=d+(r+">")}if(b===NodeFilter.FILTER_ACCEPT||b===NodeFilter.FILTER_SKIP){for(b=p.firstChild;b;)c+=f(e,b),b=b.nextSibling;p.nodeValue&&(c+=h(p.nodeValue))} [...]
- a+">",e.pop());return c}var n=this;this.filter=null;this.writeToString=function(h,p){if(!h)return"";var c=new e(p);return f(c,h)}};
++"function"!==typeof Object.create&&(Object.create=function(h){var m=function(){};m.prototype=h;return new m});
++xmldom.LSSerializer=function(){function h(e){var h=e||{},a=function(a){var c={},b;for(b in a)a.hasOwnProperty(b)&&(c[a[b]]=b);return c}(e),d=[h],f=[a],b=0;this.push=function(){b+=1;h=d[b]=Object.create(h);a=f[b]=Object.create(a)};this.pop=function(){d[b]=void 0;f[b]=void 0;b-=1;h=d[b];a=f[b]};this.getLocalNamespaceDefinitions=function(){return a};this.getQName=function(b){var c=b.namespaceURI,g=0,d;if(!c)return b.localName;if(d=a[c])return d+":"+b.localName;do{d||!b.prefix?(d="ns"+g,g+= [...]
++if(h[d]===c)break;if(!h[d]){h[d]=c;a[c]=d;break}d=null}while(null===d);return d+":"+b.localName}}function m(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""")}function e(h,q){var a="",d=p.filter?p.filter.acceptNode(q):NodeFilter.FILTER_ACCEPT,f;if(d===NodeFilter.FILTER_ACCEPT&&q.nodeType===Node.ELEMENT_NODE){h.push();f=h.getQName(q);var b,k=q.attributes,c,g,n,r="",u;b="<"+f;c=k.length;for(g=0;g<c;g+=1)n=k.item(g),"ht [...]
++n.namespaceURI&&(u=p.filter?p.filter.acceptNode(n):NodeFilter.FILTER_ACCEPT,u===NodeFilter.FILTER_ACCEPT&&(u=h.getQName(n),n="string"===typeof n.value?m(n.value):n.value,r+=" "+(u+'="'+n+'"')));c=h.getLocalNamespaceDefinitions();for(g in c)c.hasOwnProperty(g)&&((k=c[g])?"xmlns"!==k&&(b+=" xmlns:"+c[g]+'="'+g+'"'):b+=' xmlns="'+g+'"');a+=b+(r+">")}if(d===NodeFilter.FILTER_ACCEPT||d===NodeFilter.FILTER_SKIP){for(d=q.firstChild;d;)a+=e(h,d),d=d.nextSibling;q.nodeValue&&(a+=m(q.nodeValue))} [...]
++f+">",h.pop());return a}var p=this;this.filter=null;this.writeToString=function(l,m){if(!l)return"";var a=new h(m);return e(a,l)}};
 +// Input 22
- xmldom.RelaxNGParser=function(){function e(a,b){this.message=function(){b&&(a+=1===b.nodeType?" Element ":" Node ",a+=b.nodeName,b.nodeValue&&(a+=" with value '"+b.nodeValue+"'"),a+=".");return a}}function h(a){if(2>=a.e.length)return a;var b={name:a.name,e:a.e.slice(0,2)};return h({name:a.name,e:[b].concat(a.e.slice(2))})}function f(a){a=a.split(":",2);var c="",g;1===a.length?a=["",a[0]]:c=a[0];for(g in b)b[g]===c&&(a[0]=g);return a}function n(a,b){for(var c=0,e,l,h=a.name;a.e&&c<a.e.l [...]
- a.e[c],"ref"===e.name){l=b[e.a.name];if(!l)throw e.a.name+" was not defined.";e=a.e.slice(c+1);a.e=a.e.slice(0,c);a.e=a.e.concat(l.e);a.e=a.e.concat(e)}else c+=1,n(e,b);e=a.e;"choice"!==h||e&&e[1]&&"empty"!==e[1].name||(e&&e[0]&&"empty"!==e[0].name?(e[1]=e[0],e[0]={name:"empty"}):(delete a.e,a.name="empty"));if("group"===h||"interleave"===h)"empty"===e[0].name?"empty"===e[1].name?(delete a.e,a.name="empty"):(h=a.name=e[1].name,a.names=e[1].names,e=a.e=e[1].e):"empty"===e[1].name&&(h=a.n [...]
- a.names=e[0].names,e=a.e=e[0].e);"oneOrMore"===h&&"empty"===e[0].name&&(delete a.e,a.name="empty");if("attribute"===h){l=a.names?a.names.length:0;for(var t,m=[],p=[],c=0;c<l;c+=1)t=f(a.names[c]),p[c]=t[0],m[c]=t[1];a.localnames=m;a.namespaces=p}"interleave"===h&&("interleave"===e[0].name?a.e="interleave"===e[1].name?e[0].e.concat(e[1].e):[e[1]].concat(e[0].e):"interleave"===e[1].name&&(a.e=[e[0]].concat(e[1].e)))}function m(a,b){for(var c=0,e;a.e&&c<a.e.length;)e=a.e[c],"elementref"===e [...]
- e.id||0,a.e[c]=b[e.id]):"element"!==e.name&&m(e,b),c+=1}var p=this,c,b={"http://www.w3.org/XML/1998/namespace":"xml"},a;a=function(d,c,g){var e=[],l,r,t=d.localName,m=[];l=d.attributes;var p=t,n=m,x={},u,s;for(u=0;u<l.length;u+=1)if(s=l.item(u),s.namespaceURI)"http://www.w3.org/2000/xmlns/"===s.namespaceURI&&(b[s.value]=s.localName);else{"name"!==s.localName||"element"!==p&&"attribute"!==p||n.push(s.value);if("name"===s.localName||"combine"===s.localName||"type"===s.localName){var C=s,B [...]
- B=B.replace(/^\s\s*/,"");for(var A=/\s/,I=B.length-1;A.test(B.charAt(I));)I-=1;B=B.slice(0,I+1);C.value=B}x[s.localName]=s.value}l=x;l.combine=l.combine||void 0;d=d.firstChild;p=e;n=m;for(x="";d;){if(d.nodeType===Node.ELEMENT_NODE&&"http://relaxng.org/ns/structure/1.0"===d.namespaceURI){if(u=a(d,c,p))"name"===u.name?n.push(b[u.a.ns]+":"+u.text):"choice"===u.name&&u.names&&u.names.length&&(n=n.concat(u.names),delete u.names),p.push(u)}else d.nodeType===Node.TEXT_NODE&&(x+=d.nodeValue);d= [...]
- x;"value"!==t&&"param"!==t&&(d=/^\s*([\s\S]*\S)?\s*$/.exec(d)[1]);"value"===t&&void 0===l.type&&(l.type="token",l.datatypeLibrary="");"attribute"!==t&&"element"!==t||void 0===l.name||(r=f(l.name),e=[{name:"name",text:r[1],a:{ns:r[0]}}].concat(e),delete l.name);"name"===t||"nsName"===t||"value"===t?void 0===l.ns&&(l.ns=""):delete l.ns;"name"===t&&(r=f(d),l.ns=r[0],d=r[1]);1<e.length&&("define"===t||"oneOrMore"===t||"zeroOrMore"===t||"optional"===t||"list"===t||"mixed"===t)&&(e=[{name:"gr [...]
- e:e}).e}]);2<e.length&&"element"===t&&(e=[e[0]].concat({name:"group",e:h({name:"group",e:e.slice(1)}).e}));1===e.length&&"attribute"===t&&e.push({name:"text",text:d});1!==e.length||"choice"!==t&&"group"!==t&&"interleave"!==t?2<e.length&&("choice"===t||"group"===t||"interleave"===t)&&(e=h({name:t,e:e}).e):(t=e[0].name,m=e[0].names,l=e[0].a,d=e[0].text,e=e[0].e);"mixed"===t&&(t="interleave",e=[e[0],{name:"text"}]);"optional"===t&&(t="choice",e=[e[0],{name:"empty"}]);"zeroOrMore"===t&&(t=" [...]
- [{name:"oneOrMore",e:[e[0]]},{name:"empty"}]);if("define"===t&&l.combine){a:{p=l.combine;n=l.name;x=e;for(u=0;g&&u<g.length;u+=1)if(s=g[u],"define"===s.name&&s.a&&s.a.name===n){s.e=[{name:p,e:s.e.concat(x)}];g=s;break a}g=null}if(g)return}g={name:t};e&&0<e.length&&(g.e=e);for(r in l)if(l.hasOwnProperty(r)){g.a=l;break}void 0!==d&&(g.text=d);m&&0<m.length&&(g.names=m);"element"===t&&(g.id=c.length,c.push(g),g={name:"elementref",id:g.id});return g};this.parseRelaxNGDOM=function(d,f){var g [...]
- d.documentElement,g,void 0),l,r,t={};for(l=0;l<h.e.length;l+=1)r=h.e[l],"define"===r.name?t[r.a.name]=r:"start"===r.name&&(c=r);if(!c)return[new e("No Relax NG start element was found.")];n(c,t);for(l in t)t.hasOwnProperty(l)&&n(t[l],t);for(l=0;l<g.length;l+=1)n(g[l],t);f&&(p.rootPattern=f(c.e[0],g));m(c,g);for(l=0;l<g.length;l+=1)m(g[l],g);p.start=c;p.elements=g;p.nsmap=b;return null}};
++xmldom.RelaxNGParser=function(){function h(a,d){this.message=function(){d&&(a+=1===d.nodeType?" Element ":" Node ",a+=d.nodeName,d.nodeValue&&(a+=" with value '"+d.nodeValue+"'"),a+=".");return a}}function m(a){if(2>=a.e.length)return a;var d={name:a.name,e:a.e.slice(0,2)};return m({name:a.name,e:[d].concat(a.e.slice(2))})}function e(a){a=a.split(":",2);var f="",c;1===a.length?a=["",a[0]]:f=a[0];for(c in d)d[c]===f&&(a[0]=c);return a}function p(a,d){for(var c=0,g,f,h=a.name;a.e&&c<a.e.l [...]
++a.e[c],"ref"===g.name){f=d[g.a.name];if(!f)throw g.a.name+" was not defined.";g=a.e.slice(c+1);a.e=a.e.slice(0,c);a.e=a.e.concat(f.e);a.e=a.e.concat(g)}else c+=1,p(g,d);g=a.e;"choice"!==h||g&&g[1]&&"empty"!==g[1].name||(g&&g[0]&&"empty"!==g[0].name?(g[1]=g[0],g[0]={name:"empty"}):(delete a.e,a.name="empty"));if("group"===h||"interleave"===h)"empty"===g[0].name?"empty"===g[1].name?(delete a.e,a.name="empty"):(h=a.name=g[1].name,a.names=g[1].names,g=a.e=g[1].e):"empty"===g[1].name&&(h=a.n [...]
++a.names=g[0].names,g=a.e=g[0].e);"oneOrMore"===h&&"empty"===g[0].name&&(delete a.e,a.name="empty");if("attribute"===h){f=a.names?a.names.length:0;for(var l,m=[],q=[],c=0;c<f;c+=1)l=e(a.names[c]),q[c]=l[0],m[c]=l[1];a.localnames=m;a.namespaces=q}"interleave"===h&&("interleave"===g[0].name?a.e="interleave"===g[1].name?g[0].e.concat(g[1].e):[g[1]].concat(g[0].e):"interleave"===g[1].name&&(a.e=[g[0]].concat(g[1].e)))}function l(a,d){for(var c=0,g;a.e&&c<a.e.length;)g=a.e[c],"elementref"===g [...]
++g.id||0,a.e[c]=d[g.id]):"element"!==g.name&&l(g,d),c+=1}var q=this,a,d={"http://www.w3.org/XML/1998/namespace":"xml"},f;f=function(a,k,c){var g=[],n,h,l=a.localName,p=[];n=a.attributes;var q=l,w=p,v={},t,s;for(t=0;t<n.length;t+=1)if(s=n.item(t),s.namespaceURI)"http://www.w3.org/2000/xmlns/"===s.namespaceURI&&(d[s.value]=s.localName);else{"name"!==s.localName||"element"!==q&&"attribute"!==q||w.push(s.value);if("name"===s.localName||"combine"===s.localName||"type"===s.localName){var D=s,A [...]
++A=A.replace(/^\s\s*/,"");for(var C=/\s/,I=A.length-1;C.test(A.charAt(I));)I-=1;A=A.slice(0,I+1);D.value=A}v[s.localName]=s.value}n=v;n.combine=n.combine||void 0;a=a.firstChild;q=g;w=p;for(v="";a;){if(a.nodeType===Node.ELEMENT_NODE&&"http://relaxng.org/ns/structure/1.0"===a.namespaceURI){if(t=f(a,k,q))"name"===t.name?w.push(d[t.a.ns]+":"+t.text):"choice"===t.name&&t.names&&t.names.length&&(w=w.concat(t.names),delete t.names),q.push(t)}else a.nodeType===Node.TEXT_NODE&&(v+=a.nodeValue);a= [...]
++v;"value"!==l&&"param"!==l&&(a=/^\s*([\s\S]*\S)?\s*$/.exec(a)[1]);"value"===l&&void 0===n.type&&(n.type="token",n.datatypeLibrary="");"attribute"!==l&&"element"!==l||void 0===n.name||(h=e(n.name),g=[{name:"name",text:h[1],a:{ns:h[0]}}].concat(g),delete n.name);"name"===l||"nsName"===l||"value"===l?void 0===n.ns&&(n.ns=""):delete n.ns;"name"===l&&(h=e(a),n.ns=h[0],a=h[1]);1<g.length&&("define"===l||"oneOrMore"===l||"zeroOrMore"===l||"optional"===l||"list"===l||"mixed"===l)&&(g=[{name:"gr [...]
++e:g}).e}]);2<g.length&&"element"===l&&(g=[g[0]].concat({name:"group",e:m({name:"group",e:g.slice(1)}).e}));1===g.length&&"attribute"===l&&g.push({name:"text",text:a});1!==g.length||"choice"!==l&&"group"!==l&&"interleave"!==l?2<g.length&&("choice"===l||"group"===l||"interleave"===l)&&(g=m({name:l,e:g}).e):(l=g[0].name,p=g[0].names,n=g[0].a,a=g[0].text,g=g[0].e);"mixed"===l&&(l="interleave",g=[g[0],{name:"text"}]);"optional"===l&&(l="choice",g=[g[0],{name:"empty"}]);"zeroOrMore"===l&&(l=" [...]
++[{name:"oneOrMore",e:[g[0]]},{name:"empty"}]);if("define"===l&&n.combine){a:{q=n.combine;w=n.name;v=g;for(t=0;c&&t<c.length;t+=1)if(s=c[t],"define"===s.name&&s.a&&s.a.name===w){s.e=[{name:q,e:s.e.concat(v)}];c=s;break a}c=null}if(c)return}c={name:l};g&&0<g.length&&(c.e=g);for(h in n)if(n.hasOwnProperty(h)){c.a=n;break}void 0!==a&&(c.text=a);p&&0<p.length&&(c.names=p);"element"===l&&(c.id=k.length,k.push(c),c={name:"elementref",id:c.id});return c};this.parseRelaxNGDOM=function(b,e){var c [...]
++b.documentElement,c,void 0),n,r,m={};for(n=0;n<g.e.length;n+=1)r=g.e[n],"define"===r.name?m[r.a.name]=r:"start"===r.name&&(a=r);if(!a)return[new h("No Relax NG start element was found.")];p(a,m);for(n in m)m.hasOwnProperty(n)&&p(m[n],m);for(n=0;n<c.length;n+=1)p(c[n],m);e&&(q.rootPattern=e(a.e[0],c));l(a,c);for(n=0;n<c.length;n+=1)l(c[n],c);q.start=a;q.elements=c;q.nsmap=d;return null}};
 +// Input 23
 +runtime.loadClass("xmldom.RelaxNGParser");
- xmldom.RelaxNG=function(){function e(a){return function(){var b;return function(){void 0===b&&(b=a());return b}}()}function h(a,b){return function(){var d={},c=0;return function(g){var e=g.hash||g.toString(),l;l=d[e];if(void 0!==l)return l;d[e]=l=b(g);l.hash=a+c.toString();c+=1;return l}}()}function f(a){return function(){var b={};return function(d){var c,g;g=b[d.localName];if(void 0===g)b[d.localName]=g={};else if(c=g[d.namespaceURI],void 0!==c)return c;return g[d.namespaceURI]=c=a(d)} [...]
- b,d){return function(){var c={},g=0;return function(e,l){var f=b&&b(e,l),k,h;if(void 0!==f)return f;f=e.hash||e.toString();k=l.hash||l.toString();h=c[f];if(void 0===h)c[f]=h={};else if(f=h[k],void 0!==f)return f;h[k]=f=d(e,l);f.hash=a+g.toString();g+=1;return f}}()}function m(a,b){"choice"===b.p1.type?m(a,b.p1):a[b.p1.hash]=b.p1;"choice"===b.p2.type?m(a,b.p2):a[b.p2.hash]=b.p2}function p(a,b){return{type:"element",nc:a,nullable:!1,textDeriv:function(){return u},startTagOpenDeriv:functio [...]
- l(b,s):u},attDeriv:function(){return u},startTagCloseDeriv:function(){return this}}}function c(){return{type:"list",nullable:!1,hash:"list",textDeriv:function(){return s}}}function b(a,c,g,e){if(c===u)return u;if(e>=g.length)return c;0===e&&(e=0);for(var l=g.item(e);l.namespaceURI===d;){e+=1;if(e>=g.length)return c;l=g.item(e)}return l=b(a,c.attDeriv(a,g.item(e)),g,e+1)}function a(b,d,c){c.e[0].a?(b.push(c.e[0].text),d.push(c.e[0].a.ns)):a(b,d,c.e[0]);c.e[1].a?(b.push(c.e[1].text),d.pus [...]
- a(b,d,c.e[1])}var d="http://www.w3.org/2000/xmlns/",k,g,q,l,r,t,w,v,y,x,u={type:"notAllowed",nullable:!1,hash:"notAllowed",textDeriv:function(){return u},startTagOpenDeriv:function(){return u},attDeriv:function(){return u},startTagCloseDeriv:function(){return u},endTagDeriv:function(){return u}},s={type:"empty",nullable:!0,hash:"empty",textDeriv:function(){return u},startTagOpenDeriv:function(){return u},attDeriv:function(){return u},startTagCloseDeriv:function(){return s},endTagDeriv:f [...]
- C={type:"text",nullable:!0,hash:"text",textDeriv:function(){return C},startTagOpenDeriv:function(){return u},attDeriv:function(){return u},startTagCloseDeriv:function(){return C},endTagDeriv:function(){return u}},B,A,I;k=n("choice",function(a,b){if(a===u)return b;if(b===u||a===b)return a},function(a,b){var d={},c;m(d,{p1:a,p2:b});b=a=void 0;for(c in d)d.hasOwnProperty(c)&&(void 0===a?a=d[c]:b=void 0===b?d[c]:k(b,d[c]));return function(a,b){return{type:"choice",p1:a,p2:b,nullable:a.nulla [...]
- textDeriv:function(d,c){return k(a.textDeriv(d,c),b.textDeriv(d,c))},startTagOpenDeriv:f(function(d){return k(a.startTagOpenDeriv(d),b.startTagOpenDeriv(d))}),attDeriv:function(d,c){return k(a.attDeriv(d,c),b.attDeriv(d,c))},startTagCloseDeriv:e(function(){return k(a.startTagCloseDeriv(),b.startTagCloseDeriv())}),endTagDeriv:e(function(){return k(a.endTagDeriv(),b.endTagDeriv())})}}(a,b)});g=function(a,b,d){return function(){var c={},g=0;return function(e,l){var f=b&&b(e,l),k,h;if(void  [...]
- f=e.hash||e.toString();k=l.hash||l.toString();f<k&&(h=f,f=k,k=h,h=e,e=l,l=h);h=c[f];if(void 0===h)c[f]=h={};else if(f=h[k],void 0!==f)return f;h[k]=f=d(e,l);f.hash=a+g.toString();g+=1;return f}}()}("interleave",function(a,b){if(a===u||b===u)return u;if(a===s)return b;if(b===s)return a},function(a,b){return{type:"interleave",p1:a,p2:b,nullable:a.nullable&&b.nullable,textDeriv:function(d,c){return k(g(a.textDeriv(d,c),b),g(a,b.textDeriv(d,c)))},startTagOpenDeriv:f(function(d){return k(B(f [...]
- b)},a.startTagOpenDeriv(d)),B(function(b){return g(a,b)},b.startTagOpenDeriv(d)))}),attDeriv:function(d,c){return k(g(a.attDeriv(d,c),b),g(a,b.attDeriv(d,c)))},startTagCloseDeriv:e(function(){return g(a.startTagCloseDeriv(),b.startTagCloseDeriv())})}});q=n("group",function(a,b){if(a===u||b===u)return u;if(a===s)return b;if(b===s)return a},function(a,b){return{type:"group",p1:a,p2:b,nullable:a.nullable&&b.nullable,textDeriv:function(d,c){var g=q(a.textDeriv(d,c),b);return a.nullable?k(g, [...]
- c)):g},startTagOpenDeriv:function(d){var c=B(function(a){return q(a,b)},a.startTagOpenDeriv(d));return a.nullable?k(c,b.startTagOpenDeriv(d)):c},attDeriv:function(d,c){return k(q(a.attDeriv(d,c),b),q(a,b.attDeriv(d,c)))},startTagCloseDeriv:e(function(){return q(a.startTagCloseDeriv(),b.startTagCloseDeriv())})}});l=n("after",function(a,b){if(a===u||b===u)return u},function(a,b){return{type:"after",p1:a,p2:b,nullable:!1,textDeriv:function(d,c){return l(a.textDeriv(d,c),b)},startTagOpenDer [...]
- b)},a.startTagOpenDeriv(d))}),attDeriv:function(d,c){return l(a.attDeriv(d,c),b)},startTagCloseDeriv:e(function(){return l(a.startTagCloseDeriv(),b)}),endTagDeriv:e(function(){return a.nullable?b:u})}});r=h("oneormore",function(a){return a===u?u:{type:"oneOrMore",p:a,nullable:a.nullable,textDeriv:function(b,d){return q(a.textDeriv(b,d),k(this,s))},startTagOpenDeriv:function(b){var d=this;return B(function(a){return q(a,k(d,s))},a.startTagOpenDeriv(b))},attDeriv:function(b,d){return q(a. [...]
- d),k(this,s))},startTagCloseDeriv:e(function(){return r(a.startTagCloseDeriv())})}});w=n("attribute",void 0,function(a,b){return{type:"attribute",nullable:!1,nc:a,p:b,attDeriv:function(d,c){return a.contains(c)&&(b.nullable&&/^\s+$/.test(c.nodeValue)||b.textDeriv(d,c.nodeValue).nullable)?s:u},startTagCloseDeriv:function(){return u}}});t=h("value",function(a){return{type:"value",nullable:!1,value:a,textDeriv:function(b,d){return d===a?s:u},attDeriv:function(){return u},startTagCloseDeriv [...]
- y=h("data",function(a){return{type:"data",nullable:!1,dataType:a,textDeriv:function(){return s},attDeriv:function(){return u},startTagCloseDeriv:function(){return this}}});B=function N(a,b){return"after"===b.type?l(b.p1,a(b.p2)):"choice"===b.type?k(N(a,b.p1),N(a,b.p2)):b};A=function(a,d,c){var g=c.currentNode;d=d.startTagOpenDeriv(g);d=b(a,d,g.attributes,0);var e=d=d.startTagCloseDeriv(),g=c.currentNode;d=c.firstChild();for(var f=[],l;d;)d.nodeType===Node.ELEMENT_NODE?f.push(d):d.nodeTy [...]
- /^\s*$/.test(d.nodeValue)||f.push(d.nodeValue),d=c.nextSibling();0===f.length&&(f=[""]);l=e;for(e=0;l!==u&&e<f.length;e+=1)d=f[e],"string"===typeof d?l=/^\s*$/.test(d)?k(l,l.textDeriv(a,d)):l.textDeriv(a,d):(c.currentNode=d,l=A(a,l,c));c.currentNode=g;return d=l.endTagDeriv()};v=function(b){var d,c,g;if("name"===b.name)d=b.text,c=b.a.ns,b={name:d,ns:c,hash:"{"+c+"}"+d,contains:function(a){return a.namespaceURI===c&&a.localName===d}};else if("choice"===b.name){d=[];c=[];a(d,c,b);b="";for [...]
- 1)b+="{"+c[g]+"}"+d[g]+",";b={hash:b,contains:function(a){var b;for(b=0;b<d.length;b+=1)if(d[b]===a.localName&&c[b]===a.namespaceURI)return!0;return!1}}}else b={hash:"anyName",contains:function(){return!0}};return b};x=function G(a,b){var d,e;if("elementref"===a.name){d=a.id||0;a=b[d];if(void 0!==a.name){var f=a;d=b[f.id]={hash:"element"+f.id.toString()};f=p(v(f.e[0]),x(f.e[1],b));for(e in f)f.hasOwnProperty(e)&&(d[e]=f[e]);return d}return a}switch(a.name){case "empty":return s;case "no [...]
- case "text":return C;case "choice":return k(G(a.e[0],b),G(a.e[1],b));case "interleave":d=G(a.e[0],b);for(e=1;e<a.e.length;e+=1)d=g(d,G(a.e[e],b));return d;case "group":return q(G(a.e[0],b),G(a.e[1],b));case "oneOrMore":return r(G(a.e[0],b));case "attribute":return w(v(a.e[0]),G(a.e[1],b));case "value":return t(a.text);case "data":return d=a.a&&a.a.type,void 0===d&&(d=""),y(d);case "list":return c()}throw"No support for "+a.name;};this.makePattern=function(a,b){var d={},c;for(c in b)b.ha [...]
- (d[c]=b[c]);return c=x(a,d)};this.validate=function(a,b){var d;a.currentNode=a.root;d=A(null,I,a);d.nullable?b(null):(runtime.log("Error in Relax NG validation: "+d),b(["Error in Relax NG validation: "+d]))};this.init=function(a){I=a}};
++xmldom.RelaxNG=function(){function h(a){return function(){var c;return function(){void 0===c&&(c=a());return c}}()}function m(a,c){return function(){var b={},g=0;return function(d){var f=d.hash||d.toString(),n;n=b[f];if(void 0!==n)return n;b[f]=n=c(d);n.hash=a+g.toString();g+=1;return n}}()}function e(a){return function(){var c={};return function(b){var g,d;d=c[b.localName];if(void 0===d)c[b.localName]=d={};else if(g=d[b.namespaceURI],void 0!==g)return g;return d[b.namespaceURI]=g=a(b)} [...]
++c,b){return function(){var g={},d=0;return function(f,n){var e=c&&c(f,n),k,h;if(void 0!==e)return e;e=f.hash||f.toString();k=n.hash||n.toString();h=g[e];if(void 0===h)g[e]=h={};else if(e=h[k],void 0!==e)return e;h[k]=e=b(f,n);e.hash=a+d.toString();d+=1;return e}}()}function l(a,c){"choice"===c.p1.type?l(a,c.p1):a[c.p1.hash]=c.p1;"choice"===c.p2.type?l(a,c.p2):a[c.p2.hash]=c.p2}function q(a,c){return{type:"element",nc:a,nullable:!1,textDeriv:function(){return t},startTagOpenDeriv:functio [...]
++n(c,s):t},attDeriv:function(){return t},startTagCloseDeriv:function(){return this}}}function a(){return{type:"list",nullable:!1,hash:"list",textDeriv:function(){return s}}}function d(a,c,g,f){if(c===t)return t;if(f>=g.length)return c;0===f&&(f=0);for(var n=g.item(f);n.namespaceURI===b;){f+=1;if(f>=g.length)return c;n=g.item(f)}return n=d(a,c.attDeriv(a,g.item(f)),g,f+1)}function f(a,c,g){g.e[0].a?(a.push(g.e[0].text),c.push(g.e[0].a.ns)):f(a,c,g.e[0]);g.e[1].a?(a.push(g.e[1].text),c.pus [...]
++f(a,c,g.e[1])}var b="http://www.w3.org/2000/xmlns/",k,c,g,n,r,u,y,x,w,v,t={type:"notAllowed",nullable:!1,hash:"notAllowed",textDeriv:function(){return t},startTagOpenDeriv:function(){return t},attDeriv:function(){return t},startTagCloseDeriv:function(){return t},endTagDeriv:function(){return t}},s={type:"empty",nullable:!0,hash:"empty",textDeriv:function(){return t},startTagOpenDeriv:function(){return t},attDeriv:function(){return t},startTagCloseDeriv:function(){return s},endTagDeriv:f [...]
++D={type:"text",nullable:!0,hash:"text",textDeriv:function(){return D},startTagOpenDeriv:function(){return t},attDeriv:function(){return t},startTagCloseDeriv:function(){return D},endTagDeriv:function(){return t}},A,C,I;k=p("choice",function(a,c){if(a===t)return c;if(c===t||a===c)return a},function(a,c){var g={},b;l(g,{p1:a,p2:c});c=a=void 0;for(b in g)g.hasOwnProperty(b)&&(void 0===a?a=g[b]:c=void 0===c?g[b]:k(c,g[b]));return function(a,c){return{type:"choice",p1:a,p2:c,nullable:a.nulla [...]
++textDeriv:function(g,b){return k(a.textDeriv(g,b),c.textDeriv(g,b))},startTagOpenDeriv:e(function(g){return k(a.startTagOpenDeriv(g),c.startTagOpenDeriv(g))}),attDeriv:function(g,b){return k(a.attDeriv(g,b),c.attDeriv(g,b))},startTagCloseDeriv:h(function(){return k(a.startTagCloseDeriv(),c.startTagCloseDeriv())}),endTagDeriv:h(function(){return k(a.endTagDeriv(),c.endTagDeriv())})}}(a,c)});c=function(a,c,g){return function(){var b={},d=0;return function(f,n){var e=c&&c(f,n),k,h;if(void  [...]
++e=f.hash||f.toString();k=n.hash||n.toString();e<k&&(h=e,e=k,k=h,h=f,f=n,n=h);h=b[e];if(void 0===h)b[e]=h={};else if(e=h[k],void 0!==e)return e;h[k]=e=g(f,n);e.hash=a+d.toString();d+=1;return e}}()}("interleave",function(a,c){if(a===t||c===t)return t;if(a===s)return c;if(c===s)return a},function(a,g){return{type:"interleave",p1:a,p2:g,nullable:a.nullable&&g.nullable,textDeriv:function(b,d){return k(c(a.textDeriv(b,d),g),c(a,g.textDeriv(b,d)))},startTagOpenDeriv:e(function(b){return k(A(f [...]
++g)},a.startTagOpenDeriv(b)),A(function(g){return c(a,g)},g.startTagOpenDeriv(b)))}),attDeriv:function(b,d){return k(c(a.attDeriv(b,d),g),c(a,g.attDeriv(b,d)))},startTagCloseDeriv:h(function(){return c(a.startTagCloseDeriv(),g.startTagCloseDeriv())})}});g=p("group",function(a,c){if(a===t||c===t)return t;if(a===s)return c;if(c===s)return a},function(a,c){return{type:"group",p1:a,p2:c,nullable:a.nullable&&c.nullable,textDeriv:function(b,d){var f=g(a.textDeriv(b,d),c);return a.nullable?k(f, [...]
++d)):f},startTagOpenDeriv:function(b){var d=A(function(a){return g(a,c)},a.startTagOpenDeriv(b));return a.nullable?k(d,c.startTagOpenDeriv(b)):d},attDeriv:function(b,d){return k(g(a.attDeriv(b,d),c),g(a,c.attDeriv(b,d)))},startTagCloseDeriv:h(function(){return g(a.startTagCloseDeriv(),c.startTagCloseDeriv())})}});n=p("after",function(a,c){if(a===t||c===t)return t},function(a,c){return{type:"after",p1:a,p2:c,nullable:!1,textDeriv:function(g,b){return n(a.textDeriv(g,b),c)},startTagOpenDer [...]
++c)},a.startTagOpenDeriv(g))}),attDeriv:function(g,b){return n(a.attDeriv(g,b),c)},startTagCloseDeriv:h(function(){return n(a.startTagCloseDeriv(),c)}),endTagDeriv:h(function(){return a.nullable?c:t})}});r=m("oneormore",function(a){return a===t?t:{type:"oneOrMore",p:a,nullable:a.nullable,textDeriv:function(c,b){return g(a.textDeriv(c,b),k(this,s))},startTagOpenDeriv:function(c){var b=this;return A(function(a){return g(a,k(b,s))},a.startTagOpenDeriv(c))},attDeriv:function(c,b){return g(a. [...]
++b),k(this,s))},startTagCloseDeriv:h(function(){return r(a.startTagCloseDeriv())})}});y=p("attribute",void 0,function(a,c){return{type:"attribute",nullable:!1,nc:a,p:c,attDeriv:function(g,b){return a.contains(b)&&(c.nullable&&/^\s+$/.test(b.nodeValue)||c.textDeriv(g,b.nodeValue).nullable)?s:t},startTagCloseDeriv:function(){return t}}});u=m("value",function(a){return{type:"value",nullable:!1,value:a,textDeriv:function(c,g){return g===a?s:t},attDeriv:function(){return t},startTagCloseDeriv [...]
++w=m("data",function(a){return{type:"data",nullable:!1,dataType:a,textDeriv:function(){return s},attDeriv:function(){return t},startTagCloseDeriv:function(){return this}}});A=function M(a,c){return"after"===c.type?n(c.p1,a(c.p2)):"choice"===c.type?k(M(a,c.p1),M(a,c.p2)):c};C=function(a,c,g){var b=g.currentNode;c=c.startTagOpenDeriv(b);c=d(a,c,b.attributes,0);var f=c=c.startTagCloseDeriv(),b=g.currentNode;c=g.firstChild();for(var n=[],e;c;)c.nodeType===Node.ELEMENT_NODE?n.push(c):c.nodeTy [...]
++/^\s*$/.test(c.nodeValue)||n.push(c.nodeValue),c=g.nextSibling();0===n.length&&(n=[""]);e=f;for(f=0;e!==t&&f<n.length;f+=1)c=n[f],"string"===typeof c?e=/^\s*$/.test(c)?k(e,e.textDeriv(a,c)):e.textDeriv(a,c):(g.currentNode=c,e=C(a,e,g));g.currentNode=b;return c=e.endTagDeriv()};x=function(a){var c,g,b;if("name"===a.name)c=a.text,g=a.a.ns,a={name:c,ns:g,hash:"{"+g+"}"+c,contains:function(a){return a.namespaceURI===g&&a.localName===c}};else if("choice"===a.name){c=[];g=[];f(c,g,a);a="";for [...]
++1)a+="{"+g[b]+"}"+c[b]+",";a={hash:a,contains:function(a){var b;for(b=0;b<c.length;b+=1)if(c[b]===a.localName&&g[b]===a.namespaceURI)return!0;return!1}}}else a={hash:"anyName",contains:function(){return!0}};return a};v=function H(b,d){var f,n;if("elementref"===b.name){f=b.id||0;b=d[f];if(void 0!==b.name){var e=b;f=d[e.id]={hash:"element"+e.id.toString()};e=q(x(e.e[0]),v(e.e[1],d));for(n in e)e.hasOwnProperty(n)&&(f[n]=e[n]);return f}return b}switch(b.name){case "empty":return s;case "no [...]
++case "text":return D;case "choice":return k(H(b.e[0],d),H(b.e[1],d));case "interleave":f=H(b.e[0],d);for(n=1;n<b.e.length;n+=1)f=c(f,H(b.e[n],d));return f;case "group":return g(H(b.e[0],d),H(b.e[1],d));case "oneOrMore":return r(H(b.e[0],d));case "attribute":return y(x(b.e[0]),H(b.e[1],d));case "value":return u(b.text);case "data":return f=b.a&&b.a.type,void 0===f&&(f=""),w(f);case "list":return a()}throw"No support for "+b.name;};this.makePattern=function(a,c){var b={},g;for(g in c)c.ha [...]
++(b[g]=c[g]);return g=v(a,b)};this.validate=function(a,c){var b;a.currentNode=a.root;b=C(null,I,a);b.nullable?c(null):(runtime.log("Error in Relax NG validation: "+b),c(["Error in Relax NG validation: "+b]))};this.init=function(a){I=a}};
 +// Input 24
 +runtime.loadClass("xmldom.RelaxNGParser");
- xmldom.RelaxNG2=function(){function e(c,b){this.message=function(){b&&(c+=b.nodeType===Node.ELEMENT_NODE?" Element ":" Node ",c+=b.nodeName,b.nodeValue&&(c+=" with value '"+b.nodeValue+"'"),c+=".");return c}}function h(c,b,a,d){return"empty"===c.name?null:m(c,b,a,d)}function f(c,b){if(2!==c.e.length)throw"Element with wrong # of elements: "+c.e.length;for(var a=b.currentNode,d=a?a.nodeType:0,f=null;d>Node.ELEMENT_NODE;){if(d!==Node.COMMENT_NODE&&(d!==Node.TEXT_NODE||!/^\s+$/.test(b.curr [...]
- d+".")];d=(a=b.nextSibling())?a.nodeType:0}if(!a)return[new e("Missing element "+c.names)];if(c.names&&-1===c.names.indexOf(p[a.namespaceURI]+":"+a.localName))return[new e("Found "+a.nodeName+" instead of "+c.names+".",a)];if(b.firstChild()){for(f=h(c.e[1],b,a);b.nextSibling();)if(d=b.currentNode.nodeType,!(b.currentNode&&b.currentNode.nodeType===Node.TEXT_NODE&&/^\s+$/.test(b.currentNode.nodeValue)||d===Node.COMMENT_NODE))return[new e("Spurious content.",b.currentNode)];if(b.parentNode [...]
- h(c.e[1],b,a);b.nextSibling();return f}var n,m,p;m=function(c,b,a,d){var k=c.name,g=null;if("text"===k)a:{for(var q=(c=b.currentNode)?c.nodeType:0;c!==a&&3!==q;){if(1===q){g=[new e("Element not allowed here.",c)];break a}q=(c=b.nextSibling())?c.nodeType:0}b.nextSibling();g=null}else if("data"===k)g=null;else if("value"===k)d!==c.text&&(g=[new e("Wrong value, should be '"+c.text+"', not '"+d+"'",a)]);else if("list"===k)g=null;else if("attribute"===k)a:{if(2!==c.e.length)throw"Attribute w [...]
- c.e.length;k=c.localnames.length;for(g=0;g<k;g+=1){d=a.getAttributeNS(c.namespaces[g],c.localnames[g]);""!==d||a.hasAttributeNS(c.namespaces[g],c.localnames[g])||(d=void 0);if(void 0!==q&&void 0!==d){g=[new e("Attribute defined too often.",a)];break a}q=d}g=void 0===q?[new e("Attribute not found: "+c.names,a)]:h(c.e[1],b,a,q)}else if("element"===k)g=f(c,b);else if("oneOrMore"===k){d=0;do q=b.currentNode,k=m(c.e[0],b,a),d+=1;while(!k&&q!==b.currentNode);1<d?(b.currentNode=q,g=null):g=k}e [...]
- k){if(2!==c.e.length)throw"Choice with wrong # of options: "+c.e.length;q=b.currentNode;if("empty"===c.e[0].name){if(k=m(c.e[1],b,a,d))b.currentNode=q;g=null}else{if(k=h(c.e[0],b,a,d))b.currentNode=q,k=m(c.e[1],b,a,d);g=k}}else if("group"===k){if(2!==c.e.length)throw"Group with wrong # of members: "+c.e.length;g=m(c.e[0],b,a)||m(c.e[1],b,a)}else if("interleave"===k)a:{q=c.e.length;d=[q];for(var l=q,r,t,p,n;0<l;){r=0;t=b.currentNode;for(g=0;g<q;g+=1)p=b.currentNode,!0!==d[g]&&d[g]!==p&&( [...]
- m(n,b,a))?(b.currentNode=p,void 0===d[g]&&(d[g]=!1)):p===b.currentNode||"oneOrMore"===n.name||"choice"===n.name&&("oneOrMore"===n.e[0].name||"oneOrMore"===n.e[1].name)?(r+=1,d[g]=p):(r+=1,d[g]=!0));if(t===b.currentNode&&r===l){g=null;break a}if(0===r){for(g=0;g<q;g+=1)if(!1===d[g]){g=[new e("Interleave does not match.",a)];break a}g=null;break a}for(g=l=0;g<q;g+=1)!0!==d[g]&&(l+=1)}g=null}else throw k+" not allowed in nonEmptyPattern.";return g};this.validate=function(c,b){c.currentNode [...]
- h(n.e[0],c,c.root);b(a)};this.init=function(c,b){n=c;p=b}};
++xmldom.RelaxNG2=function(){function h(a,d){this.message=function(){d&&(a+=d.nodeType===Node.ELEMENT_NODE?" Element ":" Node ",a+=d.nodeName,d.nodeValue&&(a+=" with value '"+d.nodeValue+"'"),a+=".");return a}}function m(a,d,f,b){return"empty"===a.name?null:l(a,d,f,b)}function e(a,d){if(2!==a.e.length)throw"Element with wrong # of elements: "+a.e.length;for(var f=d.currentNode,b=f?f.nodeType:0,e=null;b>Node.ELEMENT_NODE;){if(b!==Node.COMMENT_NODE&&(b!==Node.TEXT_NODE||!/^\s+$/.test(d.curr [...]
++b+".")];b=(f=d.nextSibling())?f.nodeType:0}if(!f)return[new h("Missing element "+a.names)];if(a.names&&-1===a.names.indexOf(q[f.namespaceURI]+":"+f.localName))return[new h("Found "+f.nodeName+" instead of "+a.names+".",f)];if(d.firstChild()){for(e=m(a.e[1],d,f);d.nextSibling();)if(b=d.currentNode.nodeType,!(d.currentNode&&d.currentNode.nodeType===Node.TEXT_NODE&&/^\s+$/.test(d.currentNode.nodeValue)||b===Node.COMMENT_NODE))return[new h("Spurious content.",d.currentNode)];if(d.parentNode [...]
++m(a.e[1],d,f);d.nextSibling();return e}var p,l,q;l=function(a,d,f,b){var k=a.name,c=null;if("text"===k)a:{for(var g=(a=d.currentNode)?a.nodeType:0;a!==f&&3!==g;){if(1===g){c=[new h("Element not allowed here.",a)];break a}g=(a=d.nextSibling())?a.nodeType:0}d.nextSibling();c=null}else if("data"===k)c=null;else if("value"===k)b!==a.text&&(c=[new h("Wrong value, should be '"+a.text+"', not '"+b+"'",f)]);else if("list"===k)c=null;else if("attribute"===k)a:{if(2!==a.e.length)throw"Attribute w [...]
++a.e.length;k=a.localnames.length;for(c=0;c<k;c+=1){b=f.getAttributeNS(a.namespaces[c],a.localnames[c]);""!==b||f.hasAttributeNS(a.namespaces[c],a.localnames[c])||(b=void 0);if(void 0!==g&&void 0!==b){c=[new h("Attribute defined too often.",f)];break a}g=b}c=void 0===g?[new h("Attribute not found: "+a.names,f)]:m(a.e[1],d,f,g)}else if("element"===k)c=e(a,d);else if("oneOrMore"===k){b=0;do g=d.currentNode,k=l(a.e[0],d,f),b+=1;while(!k&&g!==d.currentNode);1<b?(d.currentNode=g,c=null):c=k}e [...]
++k){if(2!==a.e.length)throw"Choice with wrong # of options: "+a.e.length;g=d.currentNode;if("empty"===a.e[0].name){if(k=l(a.e[1],d,f,b))d.currentNode=g;c=null}else{if(k=m(a.e[0],d,f,b))d.currentNode=g,k=l(a.e[1],d,f,b);c=k}}else if("group"===k){if(2!==a.e.length)throw"Group with wrong # of members: "+a.e.length;c=l(a.e[0],d,f)||l(a.e[1],d,f)}else if("interleave"===k)a:{g=a.e.length;b=[g];for(var n=g,r,p,q,x;0<n;){r=0;p=d.currentNode;for(c=0;c<g;c+=1)q=d.currentNode,!0!==b[c]&&b[c]!==q&&( [...]
++l(x,d,f))?(d.currentNode=q,void 0===b[c]&&(b[c]=!1)):q===d.currentNode||"oneOrMore"===x.name||"choice"===x.name&&("oneOrMore"===x.e[0].name||"oneOrMore"===x.e[1].name)?(r+=1,b[c]=q):(r+=1,b[c]=!0));if(p===d.currentNode&&r===n){c=null;break a}if(0===r){for(c=0;c<g;c+=1)if(!1===b[c]){c=[new h("Interleave does not match.",f)];break a}c=null;break a}for(c=n=0;c<g;c+=1)!0!==b[c]&&(n+=1)}c=null}else throw k+" not allowed in nonEmptyPattern.";return c};this.validate=function(a,d){a.currentNode [...]
++m(p.e[0],a,a.root);d(f)};this.init=function(a,d){p=a;q=d}};
 +// Input 25
 +xmldom.XPathIterator=function(){};
- xmldom.XPath=function(){function e(a,b,d){return-1!==a&&(a<b||-1===b)&&(a<d||-1===d)}function h(a){for(var b=[],d=0,c=a.length,f;d<c;){var h=a,m=c,p=b,n="",u=[],s=h.indexOf("[",d),C=h.indexOf("/",d),B=h.indexOf("=",d);e(C,s,B)?(n=h.substring(d,C),d=C+1):e(s,C,B)?(n=h.substring(d,s),d=k(h,s,u)):e(B,C,s)?(n=h.substring(d,B),d=B):(n=h.substring(d,m),d=m);p.push({location:n,predicates:u});if(d<c&&"="===a[d]){f=a.substring(d+1,c);if(2<f.length&&("'"===f[0]||'"'===f[0]))f=f.slice(1,f.length-1 [...]
- parseInt(f,10)}catch(A){}d=c}}return{steps:b,value:f}}function f(){var a,b=!1;this.setNode=function(b){a=b};this.reset=function(){b=!1};this.next=function(){var d=b?null:a;b=!0;return d}}function n(a,b,d){this.reset=function(){a.reset()};this.next=function(){for(var c=a.next();c&&!(c=c.getAttributeNodeNS(b,d));)c=a.next();return c}}function m(a,b){var d=a.next(),c=null;this.reset=function(){a.reset();d=a.next();c=null};this.next=function(){for(;d;){if(c)if(b&&c.firstChild)c=c.firstChild [...]
- c!==d;)c=c.parentNode;c===d?d=a.next():c=c.nextSibling}else{do(c=d.firstChild)||(d=a.next());while(d&&!c)}if(c&&c.nodeType===Node.ELEMENT_NODE)return c}return null}}function p(a,b){this.reset=function(){a.reset()};this.next=function(){for(var d=a.next();d&&!b(d);)d=a.next();return d}}function c(a,b,d){b=b.split(":",2);var c=d(b[0]),e=b[1];return new p(a,function(a){return a.localName===e&&a.namespaceURI===c})}function b(a,b,c){var e=new f,k=d(e,b,c),h=b.value;return void 0===h?new p(a,f [...]
- k.reset();return k.next()}):new p(a,function(a){e.setNode(a);k.reset();return(a=k.next())&&a.nodeValue===h})}function a(a,b,c){var e=a.ownerDocument,k=[],m=null;if(e&&e.evaluate)for(c=e.evaluate(b,a,c,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null),m=c.iterateNext();null!==m;)m.nodeType===Node.ELEMENT_NODE&&k.push(m),m=c.iterateNext();else{k=new f;k.setNode(a);a=h(b);k=d(k,a,c);a=[];for(c=k.next();c;)a.push(c),c=k.next();k=a}return k}var d,k;k=function(a,b,d){for(var c=b,e=a.length,f=0;c [...]
- a[c]?(f-=1,0>=f&&d.push(h(a.substring(b,c)))):"["===a[c]&&(0>=f&&(b=c+1),f+=1),c+=1;return c};xmldom.XPathIterator.prototype.next=function(){};xmldom.XPathIterator.prototype.reset=function(){};d=function(a,d,e){var f,k,h,p;for(f=0;f<d.steps.length;f+=1)for(h=d.steps[f],k=h.location,""===k?a=new m(a,!1):"@"===k[0]?(p=k.slice(1).split(":",2),a=new n(a,e(p[0]),p[1])):"."!==k&&(a=new m(a,!1),-1!==k.indexOf(":")&&(a=c(a,k,e))),k=0;k<h.predicates.length;k+=1)p=h.predicates[k],a=b(a,p,e);retur [...]
- function(){this.getODFElementsWithXPath=a};return xmldom.XPath}();
++xmldom.XPath=function(){function h(a,b,d){return-1!==a&&(a<b||-1===b)&&(a<d||-1===d)}function m(a){for(var b=[],d=0,f=a.length,e;d<f;){var l=a,m=f,q=b,p="",t=[],s=l.indexOf("[",d),D=l.indexOf("/",d),A=l.indexOf("=",d);h(D,s,A)?(p=l.substring(d,D),d=D+1):h(s,D,A)?(p=l.substring(d,s),d=k(l,s,t)):h(A,D,s)?(p=l.substring(d,A),d=A):(p=l.substring(d,m),d=m);q.push({location:p,predicates:t});if(d<f&&"="===a[d]){e=a.substring(d+1,f);if(2<e.length&&("'"===e[0]||'"'===e[0]))e=e.slice(1,e.length-1 [...]
++parseInt(e,10)}catch(C){}d=f}}return{steps:b,value:e}}function e(){var a,b=!1;this.setNode=function(b){a=b};this.reset=function(){b=!1};this.next=function(){var d=b?null:a;b=!0;return d}}function p(a,b,d){this.reset=function(){a.reset()};this.next=function(){for(var f=a.next();f&&!(f=f.getAttributeNodeNS(b,d));)f=a.next();return f}}function l(a,b){var d=a.next(),f=null;this.reset=function(){a.reset();d=a.next();f=null};this.next=function(){for(;d;){if(f)if(b&&f.firstChild)f=f.firstChild [...]
++f!==d;)f=f.parentNode;f===d?d=a.next():f=f.nextSibling}else{do(f=d.firstChild)||(d=a.next());while(d&&!f)}if(f&&f.nodeType===Node.ELEMENT_NODE)return f}return null}}function q(a,b){this.reset=function(){a.reset()};this.next=function(){for(var d=a.next();d&&!b(d);)d=a.next();return d}}function a(a,b,d){b=b.split(":",2);var f=d(b[0]),e=b[1];return new q(a,function(a){return a.localName===e&&a.namespaceURI===f})}function d(a,g,d){var f=new e,k=b(f,g,d),h=g.value;return void 0===h?new q(a,f [...]
++k.reset();return k.next()}):new q(a,function(a){f.setNode(a);k.reset();return(a=k.next())&&a.nodeValue===h})}function f(a,g,d){var f=a.ownerDocument,k=[],h=null;if(f&&f.evaluate)for(d=f.evaluate(g,a,d,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null),h=d.iterateNext();null!==h;)h.nodeType===Node.ELEMENT_NODE&&k.push(h),h=d.iterateNext();else{k=new e;k.setNode(a);a=m(g);k=b(k,a,d);a=[];for(d=k.next();d;)a.push(d),d=k.next();k=a}return k}var b,k;k=function(a,b,d){for(var f=b,e=a.length,k=0;f [...]
++a[f]?(k-=1,0>=k&&d.push(m(a.substring(b,f)))):"["===a[f]&&(0>=k&&(b=f+1),k+=1),f+=1;return f};xmldom.XPathIterator.prototype.next=function(){};xmldom.XPathIterator.prototype.reset=function(){};b=function(c,b,f){var e,k,h,m;for(e=0;e<b.steps.length;e+=1)for(h=b.steps[e],k=h.location,""===k?c=new l(c,!1):"@"===k[0]?(m=k.slice(1).split(":",2),c=new p(c,f(m[0]),m[1])):"."!==k&&(c=new l(c,!1),-1!==k.indexOf(":")&&(c=a(c,k,f))),k=0;k<h.predicates.length;k+=1)m=h.predicates[k],c=d(c,m,f);retur [...]
++function(){this.getODFElementsWithXPath=f};return xmldom.XPath}();
 +// Input 26
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- gui.AnnotationViewManager=function(e,h,f){function n(b){var c=b.node,e=b.end;b=a.createRange();e&&(b.setStart(c,c.childNodes.length),b.setEnd(e,0),e=d.getTextNodes(b,!1),e.forEach(function(b){var d=a.createElement("span");d.className="annotationHighlight";d.setAttribute("annotation",c.getAttributeNS(odf.Namespaces.officens,"name"));b.parentNode.insertBefore(d,b);d.appendChild(b)}));b.detach()}function m(a){var b=e.getSizer();a?(f.style.display="inline-block",b.style.paddingRight=k.getCo [...]
- (f.style.display="none",b.style.paddingRight=0);e.refreshSize()}function p(){b.sort(function(a,b){return a.node.compareDocumentPosition(b.node)===Node.DOCUMENT_POSITION_FOLLOWING?-1:1})}function c(){var d;for(d=0;d<b.length;d+=1){var c=b[d],l=c.node.parentNode,h=l.nextSibling,m=h.nextSibling,p=l.parentNode,n=0,y=b[b.indexOf(c)-1],x=void 0,c=c.node.getElementsByTagNameNS(odf.Namespaces.dcns,"creator")[0],n=void 0,n=e.getZoomLevel();l.style.left=(f.getBoundingClientRect().left-p.getBoundi [...]
- n+"px";l.style.width=f.getBoundingClientRect().width/n+"px";h.style.width=parseFloat(l.style.left)-30+"px";y&&(x=y.node.parentNode.getBoundingClientRect(),20>=(p.getBoundingClientRect().top-x.bottom)/n?l.style.top=Math.abs(p.getBoundingClientRect().top-x.bottom)/n+20+"px":l.style.top="0px");m.style.left=h.getBoundingClientRect().width/n+"px";var h=m.style,p=m.getBoundingClientRect().left/n,y=m.getBoundingClientRect().top/n,x=l.getBoundingClientRect().left/n,u=l.getBoundingClientRect().t [...]
- 0,s=x-p,s=s*s,C=u-y,C=C*C,p=Math.sqrt(s+C);h.width=p+"px";n=Math.asin((l.getBoundingClientRect().top-m.getBoundingClientRect().top)/(n*parseFloat(m.style.width)));m.style.transform="rotate("+n+"rad)";m.style.MozTransform="rotate("+n+"rad)";m.style.WebkitTransform="rotate("+n+"rad)";m.style.msTransform="rotate("+n+"rad)";c&&(n=k.getComputedStyle(c,":before").content)&&"none"!==n&&(/^["'].*["']$/.test(n)&&(n=n.substring(1,n.length-1)),c.firstChild?c.firstChild.nodeValue=n:c.appendChild(a. [...]
- var b=[],a=h.ownerDocument,d=new odf.OdfUtils,k=runtime.getWindow();runtime.assert(Boolean(k),"Expected to be run in an environment which has a global window, like a browser.");this.rerenderAnnotations=c;this.addAnnotation=function(d){m(!0);b.push({node:d.node,end:d.end});p();var e=a.createElement("div"),f=a.createElement("div"),k=a.createElement("div"),h=a.createElement("div"),w=a.createElement("div"),v=d.node;e.className="annotationWrapper";v.parentNode.insertBefore(e,v);f.className=" [...]
- f.appendChild(v);w.className="annotationRemoveButton";f.appendChild(w);k.className="annotationConnector horizontal";h.className="annotationConnector angular";e.appendChild(f);e.appendChild(k);e.appendChild(h);d.end&&n(d);c()};this.forgetAnnotations=function(){for(;b.length;){var d=b[0],c=b.indexOf(d),e=d.node,f=e.parentNode.parentNode;"div"===f.localName&&(f.parentNode.insertBefore(e,f),f.parentNode.removeChild(f));d=d.node.getAttributeNS(odf.Namespaces.officens,"name");d=a.querySelecto [...]
- d+'"]');f=e=void 0;for(e=0;e<d.length;e+=1){for(f=d[e];f.firstChild;)f.parentNode.insertBefore(f.firstChild,f);f.parentNode.removeChild(f)}-1!==c&&b.splice(c,1);0===b.length&&m(!1)}}};
++gui.AnnotationViewManager=function(h,m,e){function p(a){var g=a.node,d=a.end;a=f.createRange();d&&(a.setStart(g,g.childNodes.length),a.setEnd(d,0),d=b.getTextNodes(a,!1),d.forEach(function(a){var c=f.createElement("span");c.className="annotationHighlight";c.setAttribute("annotation",g.getAttributeNS(odf.Namespaces.officens,"name"));a.parentNode.insertBefore(c,a);c.appendChild(a)}));a.detach()}function l(a){var b=h.getSizer();a?(e.style.display="inline-block",b.style.paddingRight=k.getCo [...]
++(e.style.display="none",b.style.paddingRight=0);h.refreshSize()}function q(){d.sort(function(a,b){return a.node.compareDocumentPosition(b.node)===Node.DOCUMENT_POSITION_FOLLOWING?-1:1})}function a(){var a;for(a=0;a<d.length;a+=1){var b=d[a],n=b.node.parentNode,l=n.nextSibling,m=l.nextSibling,p=n.parentNode,q=0,w=d[d.indexOf(b)-1],v=void 0,b=b.node.getElementsByTagNameNS(odf.Namespaces.dcns,"creator")[0],q=void 0,q=h.getZoomLevel();n.style.left=(e.getBoundingClientRect().left-p.getBoundi [...]
++q+"px";n.style.width=e.getBoundingClientRect().width/q+"px";l.style.width=parseFloat(n.style.left)-30+"px";w&&(v=w.node.parentNode.getBoundingClientRect(),20>=(p.getBoundingClientRect().top-v.bottom)/q?n.style.top=Math.abs(p.getBoundingClientRect().top-v.bottom)/q+20+"px":n.style.top="0px");m.style.left=l.getBoundingClientRect().width/q+"px";var l=m.style,p=m.getBoundingClientRect().left/q,w=m.getBoundingClientRect().top/q,v=n.getBoundingClientRect().left/q,t=n.getBoundingClientRect().t [...]
++0,s=v-p,s=s*s,D=t-w,D=D*D,p=Math.sqrt(s+D);l.width=p+"px";q=Math.asin((n.getBoundingClientRect().top-m.getBoundingClientRect().top)/(q*parseFloat(m.style.width)));m.style.transform="rotate("+q+"rad)";m.style.MozTransform="rotate("+q+"rad)";m.style.WebkitTransform="rotate("+q+"rad)";m.style.msTransform="rotate("+q+"rad)";b&&(q=k.getComputedStyle(b,":before").content)&&"none"!==q&&(/^["'].*["']$/.test(q)&&(q=q.substring(1,q.length-1)),b.firstChild?b.firstChild.nodeValue=q:b.appendChild(f. [...]
++var d=[],f=m.ownerDocument,b=new odf.OdfUtils,k=runtime.getWindow();runtime.assert(Boolean(k),"Expected to be run in an environment which has a global window, like a browser.");this.rerenderAnnotations=a;this.addAnnotation=function(c){l(!0);d.push({node:c.node,end:c.end});q();var b=f.createElement("div"),e=f.createElement("div"),k=f.createElement("div"),h=f.createElement("div"),m=f.createElement("div"),x=c.node;b.className="annotationWrapper";x.parentNode.insertBefore(b,x);e.className=" [...]
++e.appendChild(x);m.className="annotationRemoveButton";e.appendChild(m);k.className="annotationConnector horizontal";h.className="annotationConnector angular";b.appendChild(e);b.appendChild(k);b.appendChild(h);c.end&&p(c);a()};this.forgetAnnotations=function(){for(;d.length;){var a=d[0],b=d.indexOf(a),e=a.node,k=e.parentNode.parentNode;"div"===k.localName&&(k.parentNode.insertBefore(e,k),k.parentNode.removeChild(k));a=a.node.getAttributeNS(odf.Namespaces.officens,"name");a=f.querySelecto [...]
++a+'"]');k=e=void 0;for(e=0;e<a.length;e+=1){for(k=a[e];k.firstChild;)k.parentNode.insertBefore(k.firstChild,k);k.parentNode.removeChild(k)}-1!==b&&d.splice(b,1);0===d.length&&l(!1)}}};
 +// Input 27
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- odf.OdfNodeFilter=function(){this.acceptNode=function(e){return"http://www.w3.org/1999/xhtml"===e.namespaceURI?NodeFilter.FILTER_SKIP:e.namespaceURI&&e.namespaceURI.match(/^urn:webodf:/)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}};
++odf.OdfNodeFilter=function(){this.acceptNode=function(h){return"http://www.w3.org/1999/xhtml"===h.namespaceURI?NodeFilter.FILTER_SKIP:h.namespaceURI&&h.namespaceURI.match(/^urn:webodf:/)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}};
 +// Input 28
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- odf.Namespaces=function(){function e(e){return h[e]||null}var h={db:"urn:oasis:names:tc:opendocument:xmlns:database:1.0",dc:"http://purl.org/dc/elements/1.1/",dr3d:"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",draw:"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",chart:"urn:oasis:names:tc:opendocument:xmlns:chart:1.0",fo:"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",form:"urn:oasis:names:tc:opendocument:xmlns:form:1.0",numberns:"urn:oasis:names:tc:opendocument:xmln [...]
- office:"urn:oasis:names:tc:opendocument:xmlns:office:1.0",presentation:"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",style:"urn:oasis:names:tc:opendocument:xmlns:style:1.0",svg:"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",table:"urn:oasis:names:tc:opendocument:xmlns:table:1.0",text:"urn:oasis:names:tc:opendocument:xmlns:text:1.0",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},f;e.lookupNamespaceURI=e;f=function(){};f.forEachPref [...]
- e(f,h[f])};f.resolvePrefix=e;f.namespaceMap=h;f.dbns="urn:oasis:names:tc:opendocument:xmlns:database:1.0";f.dcns="http://purl.org/dc/elements/1.1/";f.dr3dns="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0";f.drawns="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0";f.chartns="urn:oasis:names:tc:opendocument:xmlns:chart:1.0";f.fons="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0";f.formns="urn:oasis:names:tc:opendocument:xmlns:form:1.0";f.numberns="urn:oasis:names:tc:opendo [...]
- f.officens="urn:oasis:names:tc:opendocument:xmlns:office:1.0";f.presentationns="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0";f.stylens="urn:oasis:names:tc:opendocument:xmlns:style:1.0";f.svgns="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0";f.tablens="urn:oasis:names:tc:opendocument:xmlns:table:1.0";f.textns="urn:oasis:names:tc:opendocument:xmlns:text:1.0";f.xlinkns="http://www.w3.org/1999/xlink";f.xmlns="http://www.w3.org/XML/1998/namespace";return f}();
++odf.Namespaces=function(){function h(e){return m[e]||null}var m={db:"urn:oasis:names:tc:opendocument:xmlns:database:1.0",dc:"http://purl.org/dc/elements/1.1/",dr3d:"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",draw:"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",chart:"urn:oasis:names:tc:opendocument:xmlns:chart:1.0",fo:"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",form:"urn:oasis:names:tc:opendocument:xmlns:form:1.0",numberns:"urn:oasis:names:tc:opendocument:xmln [...]
++office:"urn:oasis:names:tc:opendocument:xmlns:office:1.0",presentation:"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",style:"urn:oasis:names:tc:opendocument:xmlns:style:1.0",svg:"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",table:"urn:oasis:names:tc:opendocument:xmlns:table:1.0",text:"urn:oasis:names:tc:opendocument:xmlns:text:1.0",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},e;h.lookupNamespaceURI=h;e=function(){};e.forEachPref [...]
++e(h,m[h])};e.resolvePrefix=h;e.namespaceMap=m;e.dbns="urn:oasis:names:tc:opendocument:xmlns:database:1.0";e.dcns="http://purl.org/dc/elements/1.1/";e.dr3dns="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0";e.drawns="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0";e.chartns="urn:oasis:names:tc:opendocument:xmlns:chart:1.0";e.fons="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0";e.formns="urn:oasis:names:tc:opendocument:xmlns:form:1.0";e.numberns="urn:oasis:names:tc:opendo [...]
++e.officens="urn:oasis:names:tc:opendocument:xmlns:office:1.0";e.presentationns="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0";e.stylens="urn:oasis:names:tc:opendocument:xmlns:style:1.0";e.svgns="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0";e.tablens="urn:oasis:names:tc:opendocument:xmlns:table:1.0";e.textns="urn:oasis:names:tc:opendocument:xmlns:text:1.0";e.xlinkns="http://www.w3.org/1999/xlink";e.xmlns="http://www.w3.org/XML/1998/namespace";return e}();
 +// Input 29
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("xmldom.XPath");runtime.loadClass("odf.Namespaces");
- odf.StyleInfo=function(){function e(a,b){for(var d=B[a.localName],c=d&&d[a.namespaceURI],f=c?c.length:0,g,d=0;d<f;d+=1)(g=a.getAttributeNS(c[d].ns,c[d].localname))&&a.setAttributeNS(c[d].ns,C[c[d].ns]+c[d].localname,b+g);for(d=a.firstChild;d;)d.nodeType===Node.ELEMENT_NODE&&(c=d,e(c,b)),d=d.nextSibling}function h(a,b){for(var d=B[a.localName],c=d&&d[a.namespaceURI],e=c?c.length:0,f,d=0;d<e;d+=1)if(f=a.getAttributeNS(c[d].ns,c[d].localname))f=f.replace(b,""),a.setAttributeNS(c[d].ns,C[c[ [...]
- f);for(d=a.firstChild;d;)d.nodeType===Node.ELEMENT_NODE&&(c=d,h(c,b)),d=d.nextSibling}function f(a,b){var d=B[a.localName],c=(d=d&&d[a.namespaceURI])?d.length:0,e,f,g;for(g=0;g<c;g+=1)if(e=a.getAttributeNS(d[g].ns,d[g].localname))b=b||{},f=d[g].keyname,f=b[f]=b[f]||{},f[e]=1;return b}function n(a,b){var d,c;f(a,b);for(d=a.firstChild;d;)d.nodeType===Node.ELEMENT_NODE&&(c=d,n(c,b)),d=d.nextSibling}function m(a,b,d){this.key=a;this.name=b;this.family=d;this.requires={}}function p(a,b,d){va [...]
- b,e=d[c];e||(e=d[c]=new m(c,a,b));return e}function c(a,b,d){var e=B[a.localName],f=(e=e&&e[a.namespaceURI])?e.length:0,g=a.getAttributeNS(x,"name"),k=a.getAttributeNS(x,"family"),l;g&&k&&(b=p(g,k,d));if(b)for(g=0;g<f;g+=1)if(k=a.getAttributeNS(e[g].ns,e[g].localname))l=e[g].keyname,k=p(k,l,d),b.requires[k.key]=k;for(g=a.firstChild;g;)g.nodeType===Node.ELEMENT_NODE&&(a=g,c(a,b,d)),g=g.nextSibling;return d}function b(a,d){var c=d[a.family];c||(c=d[a.family]={});c[a.name]=1;Object.keys(a. [...]
- d)})}function a(a,d){var e=c(a,null,{});Object.keys(e).forEach(function(a){a=e[a];var c=d[a.family];c&&c.hasOwnProperty(a.name)&&b(a,d)})}function d(a,b){function c(b){(b=f.getAttributeNS(x,b))&&(a[b]=!0)}var e=["font-name","font-name-asian","font-name-complex"],f;if(b)for(f=b.firstChild;f;)f.nodeType===Node.ELEMENT_NODE&&(e.forEach(c),d(a,f)),f=f.nextSibling}function k(a,b){function d(a){var c=e.getAttributeNS(x,a);c&&b.hasOwnProperty(c)&&e.setAttributeNS(x,"style:"+a,b[c])}var c=["fon [...]
- "font-name-complex"],e;if(a)for(e=a.firstChild;e;)e.nodeType===Node.ELEMENT_NODE&&(c.forEach(d),k(e,b)),e=e.nextSibling}var g=odf.Namespaces.chartns,q=odf.Namespaces.dbns,l=odf.Namespaces.dr3dns,r=odf.Namespaces.drawns,t=odf.Namespaces.formns,w=odf.Namespaces.numberns,v=odf.Namespaces.officens,y=odf.Namespaces.presentationns,x=odf.Namespaces.stylens,u=odf.Namespaces.tablens,s=odf.Namespaces.textns,C={"urn:oasis:names:tc:opendocument:xmlns:chart:1.0":"chart:","urn:oasis:names:tc:opendocu [...]
++odf.StyleInfo=function(){function h(a,c){for(var b=A[a.localName],g=b&&b[a.namespaceURI],d=g?g.length:0,f,b=0;b<d;b+=1)(f=a.getAttributeNS(g[b].ns,g[b].localname))&&a.setAttributeNS(g[b].ns,D[g[b].ns]+g[b].localname,c+f);for(b=a.firstChild;b;)b.nodeType===Node.ELEMENT_NODE&&(g=b,h(g,c)),b=b.nextSibling}function m(a,c){for(var b=A[a.localName],g=b&&b[a.namespaceURI],d=g?g.length:0,f,b=0;b<d;b+=1)if(f=a.getAttributeNS(g[b].ns,g[b].localname))f=f.replace(c,""),a.setAttributeNS(g[b].ns,D[g[ [...]
++f);for(b=a.firstChild;b;)b.nodeType===Node.ELEMENT_NODE&&(g=b,m(g,c)),b=b.nextSibling}function e(a,c){var b=A[a.localName],g=(b=b&&b[a.namespaceURI])?b.length:0,d,f,e;for(e=0;e<g;e+=1)if(d=a.getAttributeNS(b[e].ns,b[e].localname))c=c||{},f=b[e].keyname,f=c[f]=c[f]||{},f[d]=1;return c}function p(a,c){var b,g;e(a,c);for(b=a.firstChild;b;)b.nodeType===Node.ELEMENT_NODE&&(g=b,p(g,c)),b=b.nextSibling}function l(a,c,b){this.key=a;this.name=c;this.family=b;this.requires={}}function q(a,c,b){va [...]
++c,d=b[g];d||(d=b[g]=new l(g,a,c));return d}function a(c,b,g){var d=A[c.localName],f=(d=d&&d[c.namespaceURI])?d.length:0,e=c.getAttributeNS(v,"name"),k=c.getAttributeNS(v,"family"),h;e&&k&&(b=q(e,k,g));if(b)for(e=0;e<f;e+=1)if(k=c.getAttributeNS(d[e].ns,d[e].localname))h=d[e].keyname,k=q(k,h,g),b.requires[k.key]=k;for(e=c.firstChild;e;)e.nodeType===Node.ELEMENT_NODE&&(c=e,a(c,b,g)),e=e.nextSibling;return g}function d(a,c){var b=c[a.family];b||(b=c[a.family]={});b[a.name]=1;Object.keys(a. [...]
++c)})}function f(c,b){var g=a(c,null,{});Object.keys(g).forEach(function(a){a=g[a];var c=b[a.family];c&&c.hasOwnProperty(a.name)&&d(a,b)})}function b(a,c){function g(c){(c=f.getAttributeNS(v,c))&&(a[c]=!0)}var d=["font-name","font-name-asian","font-name-complex"],f;if(c)for(f=c.firstChild;f;)f.nodeType===Node.ELEMENT_NODE&&(d.forEach(g),b(a,f)),f=f.nextSibling}function k(a,c){function b(a){var g=d.getAttributeNS(v,a);g&&c.hasOwnProperty(g)&&d.setAttributeNS(v,"style:"+a,c[g])}var g=["fon [...]
++"font-name-complex"],d;if(a)for(d=a.firstChild;d;)d.nodeType===Node.ELEMENT_NODE&&(g.forEach(b),k(d,c)),d=d.nextSibling}var c=odf.Namespaces.chartns,g=odf.Namespaces.dbns,n=odf.Namespaces.dr3dns,r=odf.Namespaces.drawns,u=odf.Namespaces.formns,y=odf.Namespaces.numberns,x=odf.Namespaces.officens,w=odf.Namespaces.presentationns,v=odf.Namespaces.stylens,t=odf.Namespaces.tablens,s=odf.Namespaces.textns,D={"urn:oasis:names:tc:opendocument:xmlns:chart:1.0":"chart:","urn:oasis:names:tc:opendocu [...]
 +"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0":"dr3d:","urn:oasis:names:tc:opendocument:xmlns:drawing:1.0":"draw:","urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0":"fo:","urn:oasis:names:tc:opendocument:xmlns:form:1.0":"form:","urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0":"number:","urn:oasis:names:tc:opendocument:xmlns:office:1.0":"office:","urn:oasis:names:tc:opendocument:xmlns:presentation:1.0":"presentation:","urn:oasis:names:tc:opendocument:xmlns:style:1.0":" [...]
- "urn:oasis:names:tc:opendocument:xmlns:table:1.0":"table:","urn:oasis:names:tc:opendocument:xmlns:text:1.0":"chart:","http://www.w3.org/XML/1998/namespace":"xml:"},g={text:[{ens:x,en:"tab-stop",ans:x,a:"leader-text-style"},{ens:x,en:"drop-cap",ans:x,a:"style-name"},{ens:s,en:"notes-configuration",ans:s,a:"citation-body-style-name"},{ens:s,en:"notes-configuration",ans:s,a:"citation-style-name"},{ens:s,en:"a",ans:s,a:"style-name"},{ens:s,en:"alphabetical-index",ans:s,a:"style-name"},{ens: [...]
- ans:s,a:"style-name"},{ens:s,en:"list-level-style-number",ans:s,a:"style-name"},{ens:s,en:"ruby-text",ans:s,a:"style-name"},{ens:s,en:"span",ans:s,a:"style-name"},{ens:s,en:"a",ans:s,a:"visited-style-name"},{ens:x,en:"text-properties",ans:x,a:"text-line-through-text-style"},{ens:s,en:"alphabetical-index-source",ans:s,a:"main-entry-style-name"},{ens:s,en:"index-entry-bibliography",ans:s,a:"style-name"},{ens:s,en:"index-entry-chapter",ans:s,a:"style-name"},{ens:s,en:"index-entry-link-end" [...]
++"urn:oasis:names:tc:opendocument:xmlns:table:1.0":"table:","urn:oasis:names:tc:opendocument:xmlns:text:1.0":"chart:","http://www.w3.org/XML/1998/namespace":"xml:"},c={text:[{ens:v,en:"tab-stop",ans:v,a:"leader-text-style"},{ens:v,en:"drop-cap",ans:v,a:"style-name"},{ens:s,en:"notes-configuration",ans:s,a:"citation-body-style-name"},{ens:s,en:"notes-configuration",ans:s,a:"citation-style-name"},{ens:s,en:"a",ans:s,a:"style-name"},{ens:s,en:"alphabetical-index",ans:s,a:"style-name"},{ens: [...]
++ans:s,a:"style-name"},{ens:s,en:"list-level-style-number",ans:s,a:"style-name"},{ens:s,en:"ruby-text",ans:s,a:"style-name"},{ens:s,en:"span",ans:s,a:"style-name"},{ens:s,en:"a",ans:s,a:"visited-style-name"},{ens:v,en:"text-properties",ans:v,a:"text-line-through-text-style"},{ens:s,en:"alphabetical-index-source",ans:s,a:"main-entry-style-name"},{ens:s,en:"index-entry-bibliography",ans:s,a:"style-name"},{ens:s,en:"index-entry-chapter",ans:s,a:"style-name"},{ens:s,en:"index-entry-link-end" [...]
 +{ens:s,en:"index-entry-link-start",ans:s,a:"style-name"},{ens:s,en:"index-entry-page-number",ans:s,a:"style-name"},{ens:s,en:"index-entry-span",ans:s,a:"style-name"},{ens:s,en:"index-entry-tab-stop",ans:s,a:"style-name"},{ens:s,en:"index-entry-text",ans:s,a:"style-name"},{ens:s,en:"index-title-template",ans:s,a:"style-name"},{ens:s,en:"list-level-style-bullet",ans:s,a:"style-name"},{ens:s,en:"outline-level-style",ans:s,a:"style-name"}],paragraph:[{ens:r,en:"caption",ans:r,a:"text-style- [...]
 +en:"circle",ans:r,a:"text-style-name"},{ens:r,en:"connector",ans:r,a:"text-style-name"},{ens:r,en:"control",ans:r,a:"text-style-name"},{ens:r,en:"custom-shape",ans:r,a:"text-style-name"},{ens:r,en:"ellipse",ans:r,a:"text-style-name"},{ens:r,en:"frame",ans:r,a:"text-style-name"},{ens:r,en:"line",ans:r,a:"text-style-name"},{ens:r,en:"measure",ans:r,a:"text-style-name"},{ens:r,en:"path",ans:r,a:"text-style-name"},{ens:r,en:"polygon",ans:r,a:"text-style-name"},{ens:r,en:"polyline",ans:r,a:" [...]
- {ens:r,en:"rect",ans:r,a:"text-style-name"},{ens:r,en:"regular-polygon",ans:r,a:"text-style-name"},{ens:v,en:"annotation",ans:r,a:"text-style-name"},{ens:t,en:"column",ans:t,a:"text-style-name"},{ens:x,en:"style",ans:x,a:"next-style-name"},{ens:u,en:"body",ans:u,a:"paragraph-style-name"},{ens:u,en:"even-columns",ans:u,a:"paragraph-style-name"},{ens:u,en:"even-rows",ans:u,a:"paragraph-style-name"},{ens:u,en:"first-column",ans:u,a:"paragraph-style-name"},{ens:u,en:"first-row",ans:u,a:"par [...]
- {ens:u,en:"last-column",ans:u,a:"paragraph-style-name"},{ens:u,en:"last-row",ans:u,a:"paragraph-style-name"},{ens:u,en:"odd-columns",ans:u,a:"paragraph-style-name"},{ens:u,en:"odd-rows",ans:u,a:"paragraph-style-name"},{ens:s,en:"notes-configuration",ans:s,a:"default-style-name"},{ens:s,en:"alphabetical-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"bibliography-entry-template",ans:s,a:"style-name"},{ens:s,en:"h",ans:s,a:"style-name"},{ens:s,en:"illustration-index-entry-template" [...]
- {ens:s,en:"index-source-style",ans:s,a:"style-name"},{ens:s,en:"object-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"p",ans:s,a:"style-name"},{ens:s,en:"table-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"table-of-content-entry-template",ans:s,a:"style-name"},{ens:s,en:"table-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"user-index-entry-template",ans:s,a:"style-name"},{ens:x,en:"page-layout-properties",ans:x,a:"register-truth-ref-style-name"}],chart:[{ens:g,e [...]
- a:"style-name"},{ens:g,en:"chart",ans:g,a:"style-name"},{ens:g,en:"data-label",ans:g,a:"style-name"},{ens:g,en:"data-point",ans:g,a:"style-name"},{ens:g,en:"equation",ans:g,a:"style-name"},{ens:g,en:"error-indicator",ans:g,a:"style-name"},{ens:g,en:"floor",ans:g,a:"style-name"},{ens:g,en:"footer",ans:g,a:"style-name"},{ens:g,en:"grid",ans:g,a:"style-name"},{ens:g,en:"legend",ans:g,a:"style-name"},{ens:g,en:"mean-value",ans:g,a:"style-name"},{ens:g,en:"plot-area",ans:g,a:"style-name"},{e [...]
- ans:g,a:"style-name"},{ens:g,en:"series",ans:g,a:"style-name"},{ens:g,en:"stock-gain-marker",ans:g,a:"style-name"},{ens:g,en:"stock-loss-marker",ans:g,a:"style-name"},{ens:g,en:"stock-range-line",ans:g,a:"style-name"},{ens:g,en:"subtitle",ans:g,a:"style-name"},{ens:g,en:"title",ans:g,a:"style-name"},{ens:g,en:"wall",ans:g,a:"style-name"}],section:[{ens:s,en:"alphabetical-index",ans:s,a:"style-name"},{ens:s,en:"bibliography",ans:s,a:"style-name"},{ens:s,en:"illustration-index",ans:s,a:"s [...]
- {ens:s,en:"index-title",ans:s,a:"style-name"},{ens:s,en:"object-index",ans:s,a:"style-name"},{ens:s,en:"section",ans:s,a:"style-name"},{ens:s,en:"table-of-content",ans:s,a:"style-name"},{ens:s,en:"table-index",ans:s,a:"style-name"},{ens:s,en:"user-index",ans:s,a:"style-name"}],ruby:[{ens:s,en:"ruby",ans:s,a:"style-name"}],table:[{ens:q,en:"query",ans:q,a:"style-name"},{ens:q,en:"table-representation",ans:q,a:"style-name"},{ens:u,en:"background",ans:u,a:"style-name"},{ens:u,en:"table",an [...]
- "table-column":[{ens:q,en:"column",ans:q,a:"style-name"},{ens:u,en:"table-column",ans:u,a:"style-name"}],"table-row":[{ens:q,en:"query",ans:q,a:"default-row-style-name"},{ens:q,en:"table-representation",ans:q,a:"default-row-style-name"},{ens:u,en:"table-row",ans:u,a:"style-name"}],"table-cell":[{ens:q,en:"column",ans:q,a:"default-cell-style-name"},{ens:u,en:"table-column",ans:u,a:"default-cell-style-name"},{ens:u,en:"table-row",ans:u,a:"default-cell-style-name"},{ens:u,en:"body",ans:u,a [...]
- {ens:u,en:"covered-table-cell",ans:u,a:"style-name"},{ens:u,en:"even-columns",ans:u,a:"style-name"},{ens:u,en:"covered-table-cell",ans:u,a:"style-name"},{ens:u,en:"even-columns",ans:u,a:"style-name"},{ens:u,en:"even-rows",ans:u,a:"style-name"},{ens:u,en:"first-column",ans:u,a:"style-name"},{ens:u,en:"first-row",ans:u,a:"style-name"},{ens:u,en:"last-column",ans:u,a:"style-name"},{ens:u,en:"last-row",ans:u,a:"style-name"},{ens:u,en:"odd-columns",ans:u,a:"style-name"},{ens:u,en:"odd-rows", [...]
- {ens:u,en:"table-cell",ans:u,a:"style-name"}],graphic:[{ens:l,en:"cube",ans:r,a:"style-name"},{ens:l,en:"extrude",ans:r,a:"style-name"},{ens:l,en:"rotate",ans:r,a:"style-name"},{ens:l,en:"scene",ans:r,a:"style-name"},{ens:l,en:"sphere",ans:r,a:"style-name"},{ens:r,en:"caption",ans:r,a:"style-name"},{ens:r,en:"circle",ans:r,a:"style-name"},{ens:r,en:"connector",ans:r,a:"style-name"},{ens:r,en:"control",ans:r,a:"style-name"},{ens:r,en:"custom-shape",ans:r,a:"style-name"},{ens:r,en:"ellips [...]
- {ens:r,en:"frame",ans:r,a:"style-name"},{ens:r,en:"g",ans:r,a:"style-name"},{ens:r,en:"line",ans:r,a:"style-name"},{ens:r,en:"measure",ans:r,a:"style-name"},{ens:r,en:"page-thumbnail",ans:r,a:"style-name"},{ens:r,en:"path",ans:r,a:"style-name"},{ens:r,en:"polygon",ans:r,a:"style-name"},{ens:r,en:"polyline",ans:r,a:"style-name"},{ens:r,en:"rect",ans:r,a:"style-name"},{ens:r,en:"regular-polygon",ans:r,a:"style-name"},{ens:v,en:"annotation",ans:r,a:"style-name"}],presentation:[{ens:l,en:"c [...]
- a:"style-name"},{ens:l,en:"extrude",ans:y,a:"style-name"},{ens:l,en:"rotate",ans:y,a:"style-name"},{ens:l,en:"scene",ans:y,a:"style-name"},{ens:l,en:"sphere",ans:y,a:"style-name"},{ens:r,en:"caption",ans:y,a:"style-name"},{ens:r,en:"circle",ans:y,a:"style-name"},{ens:r,en:"connector",ans:y,a:"style-name"},{ens:r,en:"control",ans:y,a:"style-name"},{ens:r,en:"custom-shape",ans:y,a:"style-name"},{ens:r,en:"ellipse",ans:y,a:"style-name"},{ens:r,en:"frame",ans:y,a:"style-name"},{ens:r,en:"g" [...]
- {ens:r,en:"line",ans:y,a:"style-name"},{ens:r,en:"measure",ans:y,a:"style-name"},{ens:r,en:"page-thumbnail",ans:y,a:"style-name"},{ens:r,en:"path",ans:y,a:"style-name"},{ens:r,en:"polygon",ans:y,a:"style-name"},{ens:r,en:"polyline",ans:y,a:"style-name"},{ens:r,en:"rect",ans:y,a:"style-name"},{ens:r,en:"regular-polygon",ans:y,a:"style-name"},{ens:v,en:"annotation",ans:y,a:"style-name"}],"drawing-page":[{ens:r,en:"page",ans:r,a:"style-name"},{ens:y,en:"notes",ans:r,a:"style-name"},{ens:x, [...]
- ans:r,a:"style-name"},{ens:x,en:"master-page",ans:r,a:"style-name"}],"list-style":[{ens:s,en:"list",ans:s,a:"style-name"},{ens:s,en:"numbered-paragraph",ans:s,a:"style-name"},{ens:s,en:"list-item",ans:s,a:"style-override"},{ens:x,en:"style",ans:x,a:"list-style-name"}],data:[{ens:x,en:"style",ans:x,a:"data-style-name"},{ens:x,en:"style",ans:x,a:"percentage-data-style-name"},{ens:y,en:"date-time-decl",ans:x,a:"data-style-name"},{ens:s,en:"creation-date",ans:x,a:"data-style-name"},{ens:s,e [...]
- ans:x,a:"data-style-name"},{ens:s,en:"database-display",ans:x,a:"data-style-name"},{ens:s,en:"date",ans:x,a:"data-style-name"},{ens:s,en:"editing-duration",ans:x,a:"data-style-name"},{ens:s,en:"expression",ans:x,a:"data-style-name"},{ens:s,en:"meta-field",ans:x,a:"data-style-name"},{ens:s,en:"modification-date",ans:x,a:"data-style-name"},{ens:s,en:"modification-time",ans:x,a:"data-style-name"},{ens:s,en:"print-date",ans:x,a:"data-style-name"},{ens:s,en:"print-time",ans:x,a:"data-style-n [...]
- en:"table-formula",ans:x,a:"data-style-name"},{ens:s,en:"time",ans:x,a:"data-style-name"},{ens:s,en:"user-defined",ans:x,a:"data-style-name"},{ens:s,en:"user-field-get",ans:x,a:"data-style-name"},{ens:s,en:"user-field-input",ans:x,a:"data-style-name"},{ens:s,en:"variable-get",ans:x,a:"data-style-name"},{ens:s,en:"variable-input",ans:x,a:"data-style-name"},{ens:s,en:"variable-set",ans:x,a:"data-style-name"}],"page-layout":[{ens:y,en:"notes",ans:x,a:"page-layout-name"},{ens:x,en:"handout- [...]
- a:"page-layout-name"},{ens:x,en:"master-page",ans:x,a:"page-layout-name"}]},B,A=new xmldom.XPath;this.collectUsedFontFaces=d;this.changeFontFaceNames=k;this.UsedStyleList=function(b,d){var c={};this.uses=function(a){var b=a.localName,d=a.getAttributeNS(r,"name")||a.getAttributeNS(x,"name");a="style"===b?a.getAttributeNS(x,"family"):a.namespaceURI===w?"data":b;return(a=c[a])?0<a[d]:!1};n(b,c);d&&a(d,c)};this.hasDerivedStyles=function(a,b,d){var c=b("style"),e=d.getAttributeNS(c,"name");d [...]
- "family");return A.getODFElementsWithXPath(a,"//style:*[@style:parent-style-name='"+e+"'][@style:family='"+d+"']",b).length?!0:!1};this.prefixStyleNames=function(a,b,d){var c;if(a){for(c=a.firstChild;c;){if(c.nodeType===Node.ELEMENT_NODE){var f=c,g=b,k=f.getAttributeNS(r,"name"),l=void 0;k?l=r:(k=f.getAttributeNS(x,"name"))&&(l=x);l&&f.setAttributeNS(l,C[l]+"name",g+k)}c=c.nextSibling}e(a,b);d&&e(d,b)}};this.removePrefixFromStyleNames=function(a,b,d){var c=RegExp("^"+b);if(a){for(b=a.fi [...]
- Node.ELEMENT_NODE){var e=b,f=c,g=e.getAttributeNS(r,"name"),k=void 0;g?k=r:(g=e.getAttributeNS(x,"name"))&&(k=x);k&&(g=g.replace(f,""),e.setAttributeNS(k,C[k]+"name",g))}b=b.nextSibling}h(a,c);d&&h(d,c)}};this.determineStylesForNode=f;B=function(a){var b,d,c,e,f,g={},k;for(b in a)if(a.hasOwnProperty(b))for(e=a[b],c=e.length,d=0;d<c;d+=1)f=e[d],k=g[f.en]=g[f.en]||{},k=k[f.ens]=k[f.ens]||[],k.push({ns:f.ans,localname:f.a,keyname:b});return g}(g)};
++{ens:r,en:"rect",ans:r,a:"text-style-name"},{ens:r,en:"regular-polygon",ans:r,a:"text-style-name"},{ens:x,en:"annotation",ans:r,a:"text-style-name"},{ens:u,en:"column",ans:u,a:"text-style-name"},{ens:v,en:"style",ans:v,a:"next-style-name"},{ens:t,en:"body",ans:t,a:"paragraph-style-name"},{ens:t,en:"even-columns",ans:t,a:"paragraph-style-name"},{ens:t,en:"even-rows",ans:t,a:"paragraph-style-name"},{ens:t,en:"first-column",ans:t,a:"paragraph-style-name"},{ens:t,en:"first-row",ans:t,a:"par [...]
++{ens:t,en:"last-column",ans:t,a:"paragraph-style-name"},{ens:t,en:"last-row",ans:t,a:"paragraph-style-name"},{ens:t,en:"odd-columns",ans:t,a:"paragraph-style-name"},{ens:t,en:"odd-rows",ans:t,a:"paragraph-style-name"},{ens:s,en:"notes-configuration",ans:s,a:"default-style-name"},{ens:s,en:"alphabetical-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"bibliography-entry-template",ans:s,a:"style-name"},{ens:s,en:"h",ans:s,a:"style-name"},{ens:s,en:"illustration-index-entry-template" [...]
++{ens:s,en:"index-source-style",ans:s,a:"style-name"},{ens:s,en:"object-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"p",ans:s,a:"style-name"},{ens:s,en:"table-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"table-of-content-entry-template",ans:s,a:"style-name"},{ens:s,en:"table-index-entry-template",ans:s,a:"style-name"},{ens:s,en:"user-index-entry-template",ans:s,a:"style-name"},{ens:v,en:"page-layout-properties",ans:v,a:"register-truth-ref-style-name"}],chart:[{ens:c,e [...]
++a:"style-name"},{ens:c,en:"chart",ans:c,a:"style-name"},{ens:c,en:"data-label",ans:c,a:"style-name"},{ens:c,en:"data-point",ans:c,a:"style-name"},{ens:c,en:"equation",ans:c,a:"style-name"},{ens:c,en:"error-indicator",ans:c,a:"style-name"},{ens:c,en:"floor",ans:c,a:"style-name"},{ens:c,en:"footer",ans:c,a:"style-name"},{ens:c,en:"grid",ans:c,a:"style-name"},{ens:c,en:"legend",ans:c,a:"style-name"},{ens:c,en:"mean-value",ans:c,a:"style-name"},{ens:c,en:"plot-area",ans:c,a:"style-name"},{e [...]
++ans:c,a:"style-name"},{ens:c,en:"series",ans:c,a:"style-name"},{ens:c,en:"stock-gain-marker",ans:c,a:"style-name"},{ens:c,en:"stock-loss-marker",ans:c,a:"style-name"},{ens:c,en:"stock-range-line",ans:c,a:"style-name"},{ens:c,en:"subtitle",ans:c,a:"style-name"},{ens:c,en:"title",ans:c,a:"style-name"},{ens:c,en:"wall",ans:c,a:"style-name"}],section:[{ens:s,en:"alphabetical-index",ans:s,a:"style-name"},{ens:s,en:"bibliography",ans:s,a:"style-name"},{ens:s,en:"illustration-index",ans:s,a:"s [...]
++{ens:s,en:"index-title",ans:s,a:"style-name"},{ens:s,en:"object-index",ans:s,a:"style-name"},{ens:s,en:"section",ans:s,a:"style-name"},{ens:s,en:"table-of-content",ans:s,a:"style-name"},{ens:s,en:"table-index",ans:s,a:"style-name"},{ens:s,en:"user-index",ans:s,a:"style-name"}],ruby:[{ens:s,en:"ruby",ans:s,a:"style-name"}],table:[{ens:g,en:"query",ans:g,a:"style-name"},{ens:g,en:"table-representation",ans:g,a:"style-name"},{ens:t,en:"background",ans:t,a:"style-name"},{ens:t,en:"table",an [...]
++"table-column":[{ens:g,en:"column",ans:g,a:"style-name"},{ens:t,en:"table-column",ans:t,a:"style-name"}],"table-row":[{ens:g,en:"query",ans:g,a:"default-row-style-name"},{ens:g,en:"table-representation",ans:g,a:"default-row-style-name"},{ens:t,en:"table-row",ans:t,a:"style-name"}],"table-cell":[{ens:g,en:"column",ans:g,a:"default-cell-style-name"},{ens:t,en:"table-column",ans:t,a:"default-cell-style-name"},{ens:t,en:"table-row",ans:t,a:"default-cell-style-name"},{ens:t,en:"body",ans:t,a [...]
++{ens:t,en:"covered-table-cell",ans:t,a:"style-name"},{ens:t,en:"even-columns",ans:t,a:"style-name"},{ens:t,en:"covered-table-cell",ans:t,a:"style-name"},{ens:t,en:"even-columns",ans:t,a:"style-name"},{ens:t,en:"even-rows",ans:t,a:"style-name"},{ens:t,en:"first-column",ans:t,a:"style-name"},{ens:t,en:"first-row",ans:t,a:"style-name"},{ens:t,en:"last-column",ans:t,a:"style-name"},{ens:t,en:"last-row",ans:t,a:"style-name"},{ens:t,en:"odd-columns",ans:t,a:"style-name"},{ens:t,en:"odd-rows", [...]
++{ens:t,en:"table-cell",ans:t,a:"style-name"}],graphic:[{ens:n,en:"cube",ans:r,a:"style-name"},{ens:n,en:"extrude",ans:r,a:"style-name"},{ens:n,en:"rotate",ans:r,a:"style-name"},{ens:n,en:"scene",ans:r,a:"style-name"},{ens:n,en:"sphere",ans:r,a:"style-name"},{ens:r,en:"caption",ans:r,a:"style-name"},{ens:r,en:"circle",ans:r,a:"style-name"},{ens:r,en:"connector",ans:r,a:"style-name"},{ens:r,en:"control",ans:r,a:"style-name"},{ens:r,en:"custom-shape",ans:r,a:"style-name"},{ens:r,en:"ellips [...]
++{ens:r,en:"frame",ans:r,a:"style-name"},{ens:r,en:"g",ans:r,a:"style-name"},{ens:r,en:"line",ans:r,a:"style-name"},{ens:r,en:"measure",ans:r,a:"style-name"},{ens:r,en:"page-thumbnail",ans:r,a:"style-name"},{ens:r,en:"path",ans:r,a:"style-name"},{ens:r,en:"polygon",ans:r,a:"style-name"},{ens:r,en:"polyline",ans:r,a:"style-name"},{ens:r,en:"rect",ans:r,a:"style-name"},{ens:r,en:"regular-polygon",ans:r,a:"style-name"},{ens:x,en:"annotation",ans:r,a:"style-name"}],presentation:[{ens:n,en:"c [...]
++a:"style-name"},{ens:n,en:"extrude",ans:w,a:"style-name"},{ens:n,en:"rotate",ans:w,a:"style-name"},{ens:n,en:"scene",ans:w,a:"style-name"},{ens:n,en:"sphere",ans:w,a:"style-name"},{ens:r,en:"caption",ans:w,a:"style-name"},{ens:r,en:"circle",ans:w,a:"style-name"},{ens:r,en:"connector",ans:w,a:"style-name"},{ens:r,en:"control",ans:w,a:"style-name"},{ens:r,en:"custom-shape",ans:w,a:"style-name"},{ens:r,en:"ellipse",ans:w,a:"style-name"},{ens:r,en:"frame",ans:w,a:"style-name"},{ens:r,en:"g" [...]
++{ens:r,en:"line",ans:w,a:"style-name"},{ens:r,en:"measure",ans:w,a:"style-name"},{ens:r,en:"page-thumbnail",ans:w,a:"style-name"},{ens:r,en:"path",ans:w,a:"style-name"},{ens:r,en:"polygon",ans:w,a:"style-name"},{ens:r,en:"polyline",ans:w,a:"style-name"},{ens:r,en:"rect",ans:w,a:"style-name"},{ens:r,en:"regular-polygon",ans:w,a:"style-name"},{ens:x,en:"annotation",ans:w,a:"style-name"}],"drawing-page":[{ens:r,en:"page",ans:r,a:"style-name"},{ens:w,en:"notes",ans:r,a:"style-name"},{ens:v, [...]
++ans:r,a:"style-name"},{ens:v,en:"master-page",ans:r,a:"style-name"}],"list-style":[{ens:s,en:"list",ans:s,a:"style-name"},{ens:s,en:"numbered-paragraph",ans:s,a:"style-name"},{ens:s,en:"list-item",ans:s,a:"style-override"},{ens:v,en:"style",ans:v,a:"list-style-name"}],data:[{ens:v,en:"style",ans:v,a:"data-style-name"},{ens:v,en:"style",ans:v,a:"percentage-data-style-name"},{ens:w,en:"date-time-decl",ans:v,a:"data-style-name"},{ens:s,en:"creation-date",ans:v,a:"data-style-name"},{ens:s,e [...]
++ans:v,a:"data-style-name"},{ens:s,en:"database-display",ans:v,a:"data-style-name"},{ens:s,en:"date",ans:v,a:"data-style-name"},{ens:s,en:"editing-duration",ans:v,a:"data-style-name"},{ens:s,en:"expression",ans:v,a:"data-style-name"},{ens:s,en:"meta-field",ans:v,a:"data-style-name"},{ens:s,en:"modification-date",ans:v,a:"data-style-name"},{ens:s,en:"modification-time",ans:v,a:"data-style-name"},{ens:s,en:"print-date",ans:v,a:"data-style-name"},{ens:s,en:"print-time",ans:v,a:"data-style-n [...]
++en:"table-formula",ans:v,a:"data-style-name"},{ens:s,en:"time",ans:v,a:"data-style-name"},{ens:s,en:"user-defined",ans:v,a:"data-style-name"},{ens:s,en:"user-field-get",ans:v,a:"data-style-name"},{ens:s,en:"user-field-input",ans:v,a:"data-style-name"},{ens:s,en:"variable-get",ans:v,a:"data-style-name"},{ens:s,en:"variable-input",ans:v,a:"data-style-name"},{ens:s,en:"variable-set",ans:v,a:"data-style-name"}],"page-layout":[{ens:w,en:"notes",ans:v,a:"page-layout-name"},{ens:v,en:"handout- [...]
++a:"page-layout-name"},{ens:v,en:"master-page",ans:v,a:"page-layout-name"}]},A,C=new xmldom.XPath;this.collectUsedFontFaces=b;this.changeFontFaceNames=k;this.UsedStyleList=function(a,c){var b={};this.uses=function(a){var c=a.localName,g=a.getAttributeNS(r,"name")||a.getAttributeNS(v,"name");a="style"===c?a.getAttributeNS(v,"family"):a.namespaceURI===y?"data":c;return(a=b[a])?0<a[g]:!1};p(a,b);c&&f(c,b)};this.hasDerivedStyles=function(a,c,b){var g=c("style"),d=b.getAttributeNS(g,"name");b [...]
++"family");return C.getODFElementsWithXPath(a,"//style:*[@style:parent-style-name='"+d+"'][@style:family='"+b+"']",c).length?!0:!1};this.prefixStyleNames=function(a,c,b){var g;if(a){for(g=a.firstChild;g;){if(g.nodeType===Node.ELEMENT_NODE){var d=g,f=c,e=d.getAttributeNS(r,"name"),k=void 0;e?k=r:(e=d.getAttributeNS(v,"name"))&&(k=v);k&&d.setAttributeNS(k,D[k]+"name",f+e)}g=g.nextSibling}h(a,c);b&&h(b,c)}};this.removePrefixFromStyleNames=function(a,c,b){var g=RegExp("^"+c);if(a){for(c=a.fi [...]
++Node.ELEMENT_NODE){var d=c,f=g,e=d.getAttributeNS(r,"name"),k=void 0;e?k=r:(e=d.getAttributeNS(v,"name"))&&(k=v);k&&(e=e.replace(f,""),d.setAttributeNS(k,D[k]+"name",e))}c=c.nextSibling}m(a,g);b&&m(b,g)}};this.determineStylesForNode=e;A=function(a){var c,b,g,d,f,e={},k;for(c in a)if(a.hasOwnProperty(c))for(d=a[c],g=d.length,b=0;b<g;b+=1)f=d[b],k=e[f.en]=e[f.en]||{},k=k[f.ens]=k[f.ens]||[],k.push({ns:f.ans,localname:f.a,keyname:c});return e}(c)};
 +// Input 30
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");runtime.loadClass("odf.Namespaces");
- odf.OdfUtils=function(){function e(a){return"image"===(a&&a.localName)&&a.namespaceURI===s}function h(a){return"frame"===(a&&a.localName)&&a.namespaceURI===s&&"as-char"===a.getAttributeNS(u,"anchor-type")}function f(a){var b=a&&a.localName;return("p"===b||"h"===b)&&a.namespaceURI===u}function n(a){for(;a&&!f(a);)a=a.parentNode;return a}function m(a){return/^[ \t\r\n]+$/.test(a)}function p(a){var b=a&&a.localName;return/^(span|p|h|a|meta)$/.test(b)&&a.namespaceURI===u||"span"===b&&"annot [...]
- a.className?!0:!1}function c(a){var b=a&&a.localName,d;d=!1;b&&(d=a.namespaceURI,d=d===u?"s"===b||"tab"===b||"line-break"===b:h(a));return d}function b(a){var b=a&&a.localName,d=!1;b&&(a=a.namespaceURI,a===u&&(d="s"===b||"tab"===b));return d}function a(a){for(;null!==a.firstChild&&p(a);)a=a.firstChild;return a}function d(a){for(;null!==a.lastChild&&p(a);)a=a.lastChild;return a}function k(a){for(;!f(a)&&null===a.previousSibling;)a=a.parentNode;return f(a)?null:d(a.previousSibling)}functi [...]
- null===b.nextSibling;)b=b.parentNode;return f(b)?null:a(b.nextSibling)}function q(a){for(var d=!1;a;)if(a.nodeType===Node.TEXT_NODE)if(0===a.length)a=k(a);else return!m(a.data.substr(a.length-1,1));else c(a)?(d=!1===b(a),a=null):a=k(a);return d}function l(b){var d=!1;for(b=b&&a(b);b;){if(b.nodeType===Node.TEXT_NODE&&0<b.length&&!m(b.data)){d=!0;break}if(c(b)){d=!0;break}b=g(b)}return d}function r(a,b){return m(a.data.substr(b))?!l(g(a)):!1}function t(a,b){var d=a.data,e;if(!m(d[b])||c(a [...]
- 0<b?m(d[b-1])||(e=!0):q(k(a))&&(e=!0);return!0===e?r(a,b)?!1:!0:!1}function w(a){return(a=/(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/.exec(a))?{value:parseFloat(a[1]),unit:a[3]}:null}function v(a){return(a=w(a))&&(0>a.value||"%"===a.unit)?null:a}function y(a){return(a=w(a))&&"%"!==a.unit?null:a}function x(a){switch(a.namespaceURI){case odf.Namespaces.drawns:case odf.Namespaces.svgns:case odf.Namespaces.dr3dns:return!1;c [...]
- case odf.Namespaces.officens:switch(a.localName){case "annotation":case "binary-data":case "event-listeners":return!1}break;default:switch(a.localName){case "editinfo":return!1}}return!0}var u=odf.Namespaces.textns,s=odf.Namespaces.drawns,C=/^\s*$/,B=new core.DomUtils;this.isImage=e;this.isCharacterFrame=h;this.isTextSpan=function(a){return"span"===(a&&a.localName)&&a.namespaceURI===u};this.isParagraph=f;this.getParagraphElement=n;this.isWithinTrackedChanges=function(a,b){for(;a&&a!==b; [...]
- u&&"tracked-changes"===a.localName)return!0;a=a.parentNode}return!1};this.isListItem=function(a){return"list-item"===(a&&a.localName)&&a.namespaceURI===u};this.isLineBreak=function(a){return"line-break"===(a&&a.localName)&&a.namespaceURI===u};this.isODFWhitespace=m;this.isGroupingElement=p;this.isCharacterElement=c;this.isWhitespaceElement=b;this.firstChild=a;this.lastChild=d;this.previousNode=k;this.nextNode=g;this.scanLeftForNonWhitespace=q;this.lookLeftForCharacter=function(a){var b; [...]
- Node.TEXT_NODE&&0<a.length?(b=a.data,b=m(b.substr(b.length-1,1))?1===b.length?q(k(a))?2:0:m(b.substr(b.length-2,1))?0:2:1):c(a)&&(b=1);return b};this.lookRightForCharacter=function(a){var b=!1;a&&a.nodeType===Node.TEXT_NODE&&0<a.length?b=!m(a.data.substr(0,1)):c(a)&&(b=!0);return b};this.scanLeftForAnyCharacter=function(a){var b=!1;for(a=a&&d(a);a;){if(a.nodeType===Node.TEXT_NODE&&0<a.length&&!m(a.data)){b=!0;break}if(c(a)){b=!0;break}a=k(a)}return b};this.scanRightForAnyCharacter=l;thi [...]
- r;this.isSignificantWhitespace=t;this.isDowngradableSpaceElement=function(a){return a.namespaceURI===u&&"s"===a.localName?q(k(a))&&l(g(a)):!1};this.getFirstNonWhitespaceChild=function(a){for(a=a&&a.firstChild;a&&a.nodeType===Node.TEXT_NODE&&C.test(a.nodeValue);)a=a.nextSibling;return a};this.parseLength=w;this.parseNonNegativeLength=v;this.parseFoFontSize=function(a){var b;b=(b=w(a))&&(0>=b.value||"%"===b.unit)?null:b;return b||y(a)};this.parseFoLineHeight=function(a){return v(a)||y(a)} [...]
- function(a){var b=a.commonAncestorContainer,d=[];for(b.nodeType===Node.ELEMENT_NODE&&(d=B.getElementsByTagNameNS(b,u,"p").concat(B.getElementsByTagNameNS(b,u,"h")));b&&!f(b);)b=b.parentNode;b&&d.push(b);return d.filter(function(b){return B.rangeIntersectsNode(a,b)})};this.getTextNodes=function(a,b){var d=a.startContainer.ownerDocument.createRange(),c;c=B.getNodesInRange(a,function(c){d.selectNodeContents(c);if(c.nodeType===Node.TEXT_NODE){if(b&&B.rangesIntersect(a,d)||B.containsRange(a, [...]
- (!m(c.textContent)||t(c,0)))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}else if(B.rangesIntersect(a,d)&&x(c))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});d.detach();return c};this.getTextElements=function(a,b,d){var e=a.startContainer.ownerDocument.createRange(),f;f=B.getNodesInRange(a,function(f){e.selectNodeContents(f);if(c(f.parentNode))return NodeFilter.FILTER_REJECT;if(f.nodeType===Node.TEXT_NODE){if(b&&B.rangesIntersect(a,e)||B.containsRange(a,e))if(d||Bo [...]
- (!m(f.textContent)||t(f,0))))return NodeFilter.FILTER_ACCEPT}else if(c(f)){if(b&&B.rangesIntersect(a,e)||B.containsRange(a,e))return NodeFilter.FILTER_ACCEPT}else if(x(f)||p(f))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});e.detach();return f};this.getParagraphElements=function(a){var b=a.startContainer.ownerDocument.createRange(),d;d=B.getNodesInRange(a,function(d){b.selectNodeContents(d);if(f(d)){if(B.rangesIntersect(a,b))return NodeFilter.FILTER_ACCEPT}else if(x(d)| [...]
- return NodeFilter.FILTER_REJECT});b.detach();return d};this.getImageElements=function(a){var b=a.startContainer.ownerDocument.createRange(),d;d=B.getNodesInRange(a,function(d){b.selectNodeContents(d);return e(d)&&B.containsRange(a,b)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});b.detach();return d}};
++odf.OdfUtils=function(){function h(a){return"image"===(a&&a.localName)&&a.namespaceURI===s}function m(a){return"frame"===(a&&a.localName)&&a.namespaceURI===s&&"as-char"===a.getAttributeNS(t,"anchor-type")}function e(a){var c=a&&a.localName;return("p"===c||"h"===c)&&a.namespaceURI===t}function p(a){for(;a&&!e(a);)a=a.parentNode;return a}function l(a){return/^[ \t\r\n]+$/.test(a)}function q(a){var c=a&&a.localName;return/^(span|p|h|a|meta)$/.test(c)&&a.namespaceURI===t||"span"===c&&"annot [...]
++a.className?!0:!1}function a(a){var c=a&&a.localName,b;b=!1;c&&(b=a.namespaceURI,b=b===t?"s"===c||"tab"===c||"line-break"===c:m(a));return b}function d(a){var c=a&&a.localName,b=!1;c&&(a=a.namespaceURI,a===t&&(b="s"===c||"tab"===c));return b}function f(a){for(;null!==a.firstChild&&q(a);)a=a.firstChild;return a}function b(a){for(;null!==a.lastChild&&q(a);)a=a.lastChild;return a}function k(a){for(;!e(a)&&null===a.previousSibling;)a=a.parentNode;return e(a)?null:b(a.previousSibling)}functi [...]
++null===a.nextSibling;)a=a.parentNode;return e(a)?null:f(a.nextSibling)}function g(c){for(var b=!1;c;)if(c.nodeType===Node.TEXT_NODE)if(0===c.length)c=k(c);else return!l(c.data.substr(c.length-1,1));else a(c)?(b=!1===d(c),c=null):c=k(c);return b}function n(b){var g=!1;for(b=b&&f(b);b;){if(b.nodeType===Node.TEXT_NODE&&0<b.length&&!l(b.data)){g=!0;break}if(a(b)){g=!0;break}b=c(b)}return g}function r(a,b){return l(a.data.substr(b))?!n(c(a)):!1}function u(c,b){var d=c.data,f;if(!l(d[b])||a(c [...]
++0<b?l(d[b-1])||(f=!0):g(k(c))&&(f=!0);return!0===f?r(c,b)?!1:!0:!1}function y(a){return(a=/(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/.exec(a))?{value:parseFloat(a[1]),unit:a[3]}:null}function x(a){return(a=y(a))&&(0>a.value||"%"===a.unit)?null:a}function w(a){return(a=y(a))&&"%"!==a.unit?null:a}function v(a){switch(a.namespaceURI){case odf.Namespaces.drawns:case odf.Namespaces.svgns:case odf.Namespaces.dr3dns:return!1;c [...]
++case odf.Namespaces.officens:switch(a.localName){case "annotation":case "binary-data":case "event-listeners":return!1}break;default:switch(a.localName){case "editinfo":return!1}}return!0}var t=odf.Namespaces.textns,s=odf.Namespaces.drawns,D=/^\s*$/,A=new core.DomUtils;this.isImage=h;this.isCharacterFrame=m;this.isTextSpan=function(a){return"span"===(a&&a.localName)&&a.namespaceURI===t};this.isParagraph=e;this.getParagraphElement=p;this.isWithinTrackedChanges=function(a,c){for(;a&&a!==c; [...]
++t&&"tracked-changes"===a.localName)return!0;a=a.parentNode}return!1};this.isListItem=function(a){return"list-item"===(a&&a.localName)&&a.namespaceURI===t};this.isLineBreak=function(a){return"line-break"===(a&&a.localName)&&a.namespaceURI===t};this.isODFWhitespace=l;this.isGroupingElement=q;this.isCharacterElement=a;this.isWhitespaceElement=d;this.firstChild=f;this.lastChild=b;this.previousNode=k;this.nextNode=c;this.scanLeftForNonWhitespace=g;this.lookLeftForCharacter=function(c){var b; [...]
++Node.TEXT_NODE&&0<c.length?(b=c.data,b=l(b.substr(b.length-1,1))?1===b.length?g(k(c))?2:0:l(b.substr(b.length-2,1))?0:2:1):a(c)&&(b=1);return b};this.lookRightForCharacter=function(c){var b=!1;c&&c.nodeType===Node.TEXT_NODE&&0<c.length?b=!l(c.data.substr(0,1)):a(c)&&(b=!0);return b};this.scanLeftForAnyCharacter=function(c){var g=!1;for(c=c&&b(c);c;){if(c.nodeType===Node.TEXT_NODE&&0<c.length&&!l(c.data)){g=!0;break}if(a(c)){g=!0;break}c=k(c)}return g};this.scanRightForAnyCharacter=n;thi [...]
++r;this.isSignificantWhitespace=u;this.isDowngradableSpaceElement=function(a){return a.namespaceURI===t&&"s"===a.localName?g(k(a))&&n(c(a)):!1};this.getFirstNonWhitespaceChild=function(a){for(a=a&&a.firstChild;a&&a.nodeType===Node.TEXT_NODE&&D.test(a.nodeValue);)a=a.nextSibling;return a};this.parseLength=y;this.parseNonNegativeLength=x;this.parseFoFontSize=function(a){var c;c=(c=y(a))&&(0>=c.value||"%"===c.unit)?null:c;return c||w(a)};this.parseFoLineHeight=function(a){return x(a)||w(a)} [...]
++function(a){var c=a.commonAncestorContainer,b=[];for(c.nodeType===Node.ELEMENT_NODE&&(b=A.getElementsByTagNameNS(c,t,"p").concat(A.getElementsByTagNameNS(c,t,"h")));c&&!e(c);)c=c.parentNode;c&&b.push(c);return b.filter(function(c){return A.rangeIntersectsNode(a,c)})};this.getTextNodes=function(a,c){var b=a.startContainer.ownerDocument.createRange(),g;g=A.getNodesInRange(a,function(g){b.selectNodeContents(g);if(g.nodeType===Node.TEXT_NODE){if(c&&A.rangesIntersect(a,b)||A.containsRange(a, [...]
++(!l(g.textContent)||u(g,0)))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}else if(A.rangesIntersect(a,b)&&v(g))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});b.detach();return g};this.getTextElements=function(c,b,g){var d=c.startContainer.ownerDocument.createRange(),f;f=A.getNodesInRange(c,function(f){d.selectNodeContents(f);if(a(f.parentNode))return NodeFilter.FILTER_REJECT;if(f.nodeType===Node.TEXT_NODE){if(b&&A.rangesIntersect(c,d)||A.containsRange(c,d))if(g||Bo [...]
++(!l(f.textContent)||u(f,0))))return NodeFilter.FILTER_ACCEPT}else if(a(f)){if(b&&A.rangesIntersect(c,d)||A.containsRange(c,d))return NodeFilter.FILTER_ACCEPT}else if(v(f)||q(f))return NodeFilter.FILTER_SKIP;return NodeFilter.FILTER_REJECT});d.detach();return f};this.getParagraphElements=function(a){var c=a.startContainer.ownerDocument.createRange(),b;b=A.getNodesInRange(a,function(b){c.selectNodeContents(b);if(e(b)){if(A.rangesIntersect(a,c))return NodeFilter.FILTER_ACCEPT}else if(v(b)| [...]
++return NodeFilter.FILTER_REJECT});c.detach();return b};this.getImageElements=function(a){var c=a.startContainer.ownerDocument.createRange(),b;b=A.getNodesInRange(a,function(b){c.selectNodeContents(b);return h(b)&&A.containsRange(a,c)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});c.detach();return b}};
 +// Input 31
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.OdfUtils");
- odf.TextSerializer=function(){function e(n){var m="",p=h.filter?h.filter.acceptNode(n):NodeFilter.FILTER_ACCEPT,c=n.nodeType,b;if(p===NodeFilter.FILTER_ACCEPT||p===NodeFilter.FILTER_SKIP)for(b=n.firstChild;b;)m+=e(b),b=b.nextSibling;p===NodeFilter.FILTER_ACCEPT&&(c===Node.ELEMENT_NODE&&f.isParagraph(n)?m+="\n":c===Node.TEXT_NODE&&n.textContent&&(m+=n.textContent));return m}var h=this,f=new odf.OdfUtils;this.filter=null;this.writeToString=function(f){return f?e(f):""}};
++odf.TextSerializer=function(){function h(p){var l="",q=m.filter?m.filter.acceptNode(p):NodeFilter.FILTER_ACCEPT,a=p.nodeType,d;if(q===NodeFilter.FILTER_ACCEPT||q===NodeFilter.FILTER_SKIP)for(d=p.firstChild;d;)l+=h(d),d=d.nextSibling;q===NodeFilter.FILTER_ACCEPT&&(a===Node.ELEMENT_NODE&&e.isParagraph(p)?l+="\n":a===Node.TEXT_NODE&&p.textContent&&(l+=p.textContent));return l}var m=this,e=new odf.OdfUtils;this.filter=null;this.writeToString=function(e){if(!e)return"";e=h(e);"\n"===e[e.leng [...]
++e.substr(0,e.length-1));return e}};
 +// Input 32
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");runtime.loadClass("core.LoopWatchDog");runtime.loadClass("odf.Namespaces");
- odf.TextStyleApplicator=function(e,h,f){function n(a){function b(a,d){return"object"===typeof a&&"object"===typeof d?Object.keys(a).every(function(c){return b(a[c],d[c])}):a===d}this.isStyleApplied=function(c){c=h.getAppliedStylesForElement(c);return b(a,c)}}function m(d){var c={};this.applyStyleToContainer=function(g){var q;q=g.getAttributeNS(b,"style-name");var l=g.ownerDocument;q=q||"";if(!c.hasOwnProperty(q)){var m=q,p;p=q?h.createDerivedStyleObject(q,"text",d):d;l=l.createElementNS [...]
- h.updateStyle(l,p);l.setAttributeNS(a,"style:name",e.generateStyleName());l.setAttributeNS(a,"style:family","text");l.setAttributeNS("urn:webodf:names:scope","scope","document-content");f.appendChild(l);c[m]=l}q=c[q].getAttributeNS(a,"name");g.setAttributeNS(b,"text:style-name",q)}}function p(a,e){var f=a.ownerDocument,h=a.parentNode,l,m,p=new core.LoopWatchDog(1E3);m=[];"span"!==h.localName||h.namespaceURI!==b?(l=f.createElementNS(b,"text:span"),h.insertBefore(l,a),h=!1):(a.previousSib [...]
- h.firstChild)?(l=h.cloneNode(!1),h.parentNode.insertBefore(l,h.nextSibling)):l=h,h=!0);m.push(a);for(f=a.nextSibling;f&&c.rangeContainsNode(e,f);)p.check(),m.push(f),f=f.nextSibling;m.forEach(function(a){a.parentNode!==l&&l.appendChild(a)});if(f&&h)for(m=l.cloneNode(!1),l.parentNode.insertBefore(m,l.nextSibling);f;)p.check(),h=f.nextSibling,m.appendChild(f),f=h;return l}var c=new core.DomUtils,b=odf.Namespaces.textns,a=odf.Namespaces.stylens;this.applyStyle=function(a,b,c){var e={},f,h, [...]
- c["style:text-properties"],"applyStyle without any text properties");e["style:text-properties"]=c["style:text-properties"];t=new m(e);w=new n(e);a.forEach(function(a){f=w.isStyleApplied(a);!1===f&&(h=p(a,b),t.applyStyleToContainer(h))})}};
++odf.TextStyleApplicator=function(h,m,e){function p(a){function d(a,b){return"object"===typeof a&&"object"===typeof b?Object.keys(a).every(function(f){return d(a[f],b[f])}):a===b}this.isStyleApplied=function(c){c=m.getAppliedStylesForElement(c);return d(a,c)}}function l(a){var k={};this.applyStyleToContainer=function(c){var g;g=c.getAttributeNS(d,"style-name");var n=c.ownerDocument;g=g||"";if(!k.hasOwnProperty(g)){var l=g,q;q=g?m.createDerivedStyleObject(g,"text",a):a;n=n.createElementNS [...]
++m.updateStyle(n,q);n.setAttributeNS(f,"style:name",h.generateStyleName());n.setAttributeNS(f,"style:family","text");n.setAttributeNS("urn:webodf:names:scope","scope","document-content");e.appendChild(n);k[l]=n}g=k[g].getAttributeNS(f,"name");c.setAttributeNS(d,"text:style-name",g)}}function q(b,f){var c=b.ownerDocument,g=b.parentNode,e,h,l=new core.LoopWatchDog(1E4);h=[];"span"!==g.localName||g.namespaceURI!==d?(e=c.createElementNS(d,"text:span"),g.insertBefore(e,b),g=!1):(b.previousSib [...]
++g.firstChild)?(e=g.cloneNode(!1),g.parentNode.insertBefore(e,g.nextSibling)):e=g,g=!0);h.push(b);for(c=b.nextSibling;c&&a.rangeContainsNode(f,c);)l.check(),h.push(c),c=c.nextSibling;h.forEach(function(a){a.parentNode!==e&&e.appendChild(a)});if(c&&g)for(h=e.cloneNode(!1),e.parentNode.insertBefore(h,e.nextSibling);c;)l.check(),g=c.nextSibling,h.appendChild(c),c=g;return e}var a=new core.DomUtils,d=odf.Namespaces.textns,f=odf.Namespaces.stylens;this.applyStyle=function(a,d,c){var g={},f,e, [...]
++c["style:text-properties"],"applyStyle without any text properties");g["style:text-properties"]=c["style:text-properties"];h=new l(g);m=new p(g);a.forEach(function(a){f=m.isStyleApplied(a);!1===f&&(e=q(a,d),h.applyStyleToContainer(e))})}};
 +// Input 33
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfUtils");runtime.loadClass("xmldom.XPath");runtime.loadClass("core.CSSUnits");
- odf.Style2CSS=function(){function e(a){var b={},d,c;if(!a)return b;for(a=a.firstChild;a;){if(c=a.namespaceURI!==r||"style"!==a.localName&&"default-style"!==a.localName?a.namespaceURI===v&&"list-style"===a.localName?"list":a.namespaceURI!==r||"page-layout"!==a.localName&&"default-page-layout"!==a.localName?void 0:"page":a.getAttributeNS(r,"family"))(d=a.getAttributeNS&&a.getAttributeNS(r,"name"))||(d=""),c=b[c]=b[c]||{},c[d]=a;a=a.nextSibling}return b}function h(a,b){if(!b||!a)return nul [...]
- var d,c;for(d in a)if(a.hasOwnProperty(d)&&(c=h(a[d].derivedStyles,b)))return c;return null}function f(a,b,d){var c=b[a],e,g;c&&(e=c.getAttributeNS(r,"parent-style-name"),g=null,e&&(g=h(d,e),!g&&b[e]&&(f(e,b,d),g=b[e],b[e]=null)),g?(g.derivedStyles||(g.derivedStyles={}),g.derivedStyles[a]=c):d[a]=c)}function n(a,b){for(var d in a)a.hasOwnProperty(d)&&(f(d,a,b),a[d]=null)}function m(a,b){var d=u[a],c;if(null===d)return null;c=b?"["+d+'|style-name="'+b+'"]':"";"presentation"===d&&(d="draw [...]
- b+'"]':"");return d+"|"+s[a].join(c+","+d+"|")+c}function p(a,b,d){var c=[],e,f;c.push(m(a,b));for(e in d.derivedStyles)if(d.derivedStyles.hasOwnProperty(e))for(f in b=p(a,e,d.derivedStyles[e]),b)b.hasOwnProperty(f)&&c.push(b[f]);return c}function c(a,b,d){if(!a)return null;for(a=a.firstChild;a;){if(a.namespaceURI===b&&a.localName===d)return b=a;a=a.nextSibling}return null}function b(a,b){var d="",c,e;for(c in b)if(b.hasOwnProperty(c)&&(c=b[c],e=a.getAttributeNS(c[0],c[1]))){e=e.trim(); [...]
- e.indexOf(" "),g=void 0,k=void 0;-1!==f?(g=e.substring(0,f),k=e.substring(f)):(g=e,k="");(g=$.parseLength(g))&&"pt"===g.unit&&0.75>g.value&&(e="0.75pt"+k)}c[2]&&(d+=c[2]+":"+e+";")}return d}function a(a){return(a=c(a,r,"text-properties"))?$.parseFoFontSize(a.getAttributeNS(l,"font-size")):null}function d(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,b,d,c){return b+b+d+d+c+c});return(a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a))?{r:parseInt(a[1],16),g:parseInt(a[ [...]
- 16)}:null}function k(a,b,d,c){b='text|list[text|style-name="'+b+'"]';var e=d.getAttributeNS(v,"level"),f;d=$.getFirstNonWhitespaceChild(d);d=$.getFirstNonWhitespaceChild(d);var g;d&&(f=d.attributes,g=f["fo:text-indent"]?f["fo:text-indent"].value:void 0,f=f["fo:margin-left"]?f["fo:margin-left"].value:void 0);g||(g="-0.6cm");d="-"===g.charAt(0)?g.substring(1):"-"+g;for(e=e&&parseInt(e,10);1<e;)b+=" > text|list-item > text|list",e-=1;e=b+" > text|list-item > *:not(text|list):first-child";v [...]
- (f=e+"{margin-left:"+f+";}",a.insertRule(f,a.cssRules.length));c=b+" > text|list-item > *:not(text|list):first-child:before{"+c+";";c+="counter-increment:list;";c+="margin-left:"+g+";";c+="width:"+d+";";c+="display:inline-block}";try{a.insertRule(c,a.cssRules.length)}catch(k){throw k;}}function g(e,f,h,m){if("list"===f)for(var s=m.firstChild,n,t;s;){if(s.namespaceURI===v)if(n=s,"list-level-style-number"===s.localName){var u=n;t=u.getAttributeNS(r,"num-format");var Q=u.getAttributeNS(r," [...]
- J={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},u=u.getAttributeNS(r,"num-prefix")||"",u=J.hasOwnProperty(t)?u+(" counter(list, "+J[t]+")"):t?u+("'"+t+"';"):u+" ''";Q&&(u+=" '"+Q+"'");t="content: "+u+";";k(e,h,n,t)}else"list-level-style-image"===s.localName?(t="content: none;",k(e,h,n,t)):"list-level-style-bullet"===s.localName&&(t="content: '"+n.getAttributeNS(v,"bullet-char")+"';",k(e,h,n,t));s=s.nextSibling}else if("page"===f)if(Q=n=h="",s=m.getElement [...]
- "page-layout-properties")[0],n=s.parentNode.parentNode.parentNode.masterStyles,Q="",h+=b(s,Z),t=s.getElementsByTagNameNS(r,"background-image"),0<t.length&&(Q=t.item(0).getAttributeNS(y,"href"))&&(h+="background-image: url('odfkit:"+Q+"');",t=t.item(0),h+=b(t,B)),"presentation"===ha){if(n)for(t=n.getElementsByTagNameNS(r,"master-page"),J=0;J<t.length;J+=1)if(t[J].getAttributeNS(r,"page-layout-name")===s.parentNode.getAttributeNS(r,"name")){Q=t[J].getAttributeNS(r,"name");n="draw|page[dra [...]
- Q+"] {"+h+"}";Q="office|body, draw|page[draw|master-page-name="+Q+"] {"+b(s,ka)+" }";try{e.insertRule(n,e.cssRules.length),e.insertRule(Q,e.cssRules.length)}catch(T){throw T;}}}else{if("text"===ha){n="office|text {"+h+"}";Q="office|body {width: "+s.getAttributeNS(l,"page-width")+";}";try{e.insertRule(n,e.cssRules.length),e.insertRule(Q,e.cssRules.length)}catch(oa){throw oa;}}}else{h=p(f,h,m).join(",");s="";if(n=c(m,r,"text-properties")){var J=n,D;t=D="";Q=1;n=""+b(J,C);u=J.getAttributeN [...]
- "solid"===u&&(D+=" underline");u=J.getAttributeNS(r,"text-line-through-style");"solid"===u&&(D+=" line-through");D.length&&(n+="text-decoration:"+D+";");if(D=J.getAttributeNS(r,"font-name")||J.getAttributeNS(l,"font-family"))u=ra[D],n+="font-family: "+(u||D)+";";u=J.parentNode;if(J=a(u)){for(;u;){if(J=a(u)){if("%"!==J.unit){t="font-size: "+J.value*Q+J.unit+";";break}Q*=J.value/100}J=u;D=u="";u=null;"default-style"===J.localName?u=null:(u=J.getAttributeNS(r,"parent-style-name"),D=J.getAt [...]
- "family"),u=W.getODFElementsWithXPath(U,u?"//style:*[@style:name='"+u+"'][@style:family='"+D+"']":"//style:default-style[@style:family='"+D+"']",odf.Namespaces.resolvePrefix)[0])}t||(t="font-size: "+parseFloat(O)*Q+E.getUnits(O)+";");n+=t}s+=n}if(n=c(m,r,"paragraph-properties"))t=n,n=""+b(t,A),Q=t.getElementsByTagNameNS(r,"background-image"),0<Q.length&&(J=Q.item(0).getAttributeNS(y,"href"))&&(n+="background-image: url('odfkit:"+J+"');",Q=Q.item(0),n+=b(Q,B)),(t=t.getAttributeNS(l,"line [...]
- "normal"!==t&&(t=$.parseFoLineHeight(t),n="%"!==t.unit?n+("line-height: "+t.value+t.unit+";"):n+("line-height: "+t.value/100+";")),s+=n;if(n=c(m,r,"graphic-properties"))J=n,n=""+b(J,I),t=J.getAttributeNS(q,"opacity"),Q=J.getAttributeNS(q,"fill"),J=J.getAttributeNS(q,"fill-color"),"solid"===Q||"hatch"===Q?J&&"none"!==J?(t=isNaN(parseFloat(t))?1:parseFloat(t)/100,(J=d(J))&&(n+="background-color: rgba("+J.r+","+J.g+","+J.b+","+t+");")):n+="background: none;":"none"===Q&&(n+="background: no [...]
- if(n=c(m,r,"drawing-page-properties"))t=""+b(n,I),"true"===n.getAttributeNS(x,"background-visible")&&(t+="background: none;"),s+=t;if(n=c(m,r,"table-cell-properties"))n=""+b(n,z),s+=n;if(n=c(m,r,"table-row-properties"))n=""+b(n,G),s+=n;if(n=c(m,r,"table-column-properties"))n=""+b(n,N),s+=n;if(n=c(m,r,"table-properties"))t=n,n=""+b(t,R),t=t.getAttributeNS(w,"border-model"),"collapsing"===t?n+="border-collapse:collapse;":"separating"===t&&(n+="border-collapse:separate;"),s+=n;if(0!==s.len [...]
- "{"+s+"}",e.cssRules.length)}catch(fa){throw fa;}}for(var F in m.derivedStyles)m.derivedStyles.hasOwnProperty(F)&&g(e,f,F,m.derivedStyles[F])}var q=odf.Namespaces.drawns,l=odf.Namespaces.fons,r=odf.Namespaces.stylens,t=odf.Namespaces.svgns,w=odf.Namespaces.tablens,v=odf.Namespaces.textns,y=odf.Namespaces.xlinkns,x=odf.Namespaces.presentationns,u={graphic:"draw","drawing-page":"draw",paragraph:"text",presentation:"presentation",ruby:"text",section:"text",table:"table","table-cell":"table [...]
++odf.Style2CSS=function(){function h(a){var c={},b,g;if(!a)return c;for(a=a.firstChild;a;){if(g=a.namespaceURI!==r||"style"!==a.localName&&"default-style"!==a.localName?a.namespaceURI===x&&"list-style"===a.localName?"list":a.namespaceURI!==r||"page-layout"!==a.localName&&"default-page-layout"!==a.localName?void 0:"page":a.getAttributeNS(r,"family"))(b=a.getAttributeNS&&a.getAttributeNS(r,"name"))||(b=""),g=c[g]=c[g]||{},g[b]=a;a=a.nextSibling}return c}function m(a,c){if(!c||!a)return nul [...]
++var b,g;for(b in a)if(a.hasOwnProperty(b)&&(g=m(a[b].derivedStyles,c)))return g;return null}function e(a,c,b){var g=c[a],d,f;g&&(d=g.getAttributeNS(r,"parent-style-name"),f=null,d&&(f=m(b,d),!f&&c[d]&&(e(d,c,b),f=c[d],c[d]=null)),f?(f.derivedStyles||(f.derivedStyles={}),f.derivedStyles[a]=g):b[a]=g)}function p(a,c){for(var b in a)a.hasOwnProperty(b)&&(e(b,a,c),a[b]=null)}function l(a,c){var b=t[a],g;if(null===b)return null;g=c?"["+b+'|style-name="'+c+'"]':"";"presentation"===b&&(b="draw [...]
++c+'"]':"");return b+"|"+s[a].join(g+","+b+"|")+g}function q(a,c,b){var g=[],d,f;g.push(l(a,c));for(d in b.derivedStyles)if(b.derivedStyles.hasOwnProperty(d))for(f in c=q(a,d,b.derivedStyles[d]),c)c.hasOwnProperty(f)&&g.push(c[f]);return g}function a(a,c,b){if(!a)return null;for(a=a.firstChild;a;){if(a.namespaceURI===c&&a.localName===b)return c=a;a=a.nextSibling}return null}function d(a,c){var b="",g,d;for(g in c)if(c.hasOwnProperty(g)&&(g=c[g],d=a.getAttributeNS(g[0],g[1]))){d=d.trim(); [...]
++d.indexOf(" "),e=void 0,k=void 0;-1!==f?(e=d.substring(0,f),k=d.substring(f)):(e=d,k="");(e=ba.parseLength(e))&&"pt"===e.unit&&0.75>e.value&&(d="0.75pt"+k)}g[2]&&(b+=g[2]+":"+d+";")}return b}function f(c){return(c=a(c,r,"text-properties"))?ba.parseFoFontSize(c.getAttributeNS(n,"font-size")):null}function b(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,c,b,g){return c+c+b+b+g+g});return(a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a))?{r:parseInt(a[1],16),g:parseInt( [...]
++16)}:null}function k(a,c,b,g){c='text|list[text|style-name="'+c+'"]';var d=b.getAttributeNS(x,"level"),f;b=ba.getFirstNonWhitespaceChild(b);b=ba.getFirstNonWhitespaceChild(b);var e;b&&(f=b.attributes,e=f["fo:text-indent"]?f["fo:text-indent"].value:void 0,f=f["fo:margin-left"]?f["fo:margin-left"].value:void 0);e||(e="-0.6cm");b="-"===e.charAt(0)?e.substring(1):"-"+e;for(d=d&&parseInt(d,10);1<d;)c+=" > text|list-item > text|list",d-=1;d=c+" > text|list-item > *:not(text|list):first-child" [...]
++f&&(f=d+"{margin-left:"+f+";}",a.insertRule(f,a.cssRules.length));g=c+" > text|list-item > *:not(text|list):first-child:before{"+g+";";g+="counter-increment:list;";g+="margin-left:"+e+";";g+="width:"+b+";";g+="display:inline-block}";try{a.insertRule(g,a.cssRules.length)}catch(k){throw k;}}function c(e,h,l,m){if("list"===h)for(var s=m.firstChild,p,u;s;){if(s.namespaceURI===x)if(p=s,"list-level-style-number"===s.localName){var t=p;u=t.getAttributeNS(r,"num-format");var P=t.getAttributeNS( [...]
++E={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},t=t.getAttributeNS(r,"num-prefix")||"",t=E.hasOwnProperty(u)?t+(" counter(list, "+E[u]+")"):u?t+("'"+u+"';"):t+" ''";P&&(t+=" '"+P+"'");u="content: "+t+";";k(e,l,p,u)}else"list-level-style-image"===s.localName?(u="content: none;",k(e,l,p,u)):"list-level-style-bullet"===s.localName&&(u="content: '"+p.getAttributeNS(x,"bullet-char")+"';",k(e,l,p,u));s=s.nextSibling}else if("page"===h)if(P=p=l="",s=m.getElement [...]
++"page-layout-properties")[0],p=s.parentNode.parentNode.parentNode.masterStyles,P="",l+=d(s,Z),u=s.getElementsByTagNameNS(r,"background-image"),0<u.length&&(P=u.item(0).getAttributeNS(w,"href"))&&(l+="background-image: url('odfkit:"+P+"');",u=u.item(0),l+=d(u,A)),"presentation"===ga){if(p)for(u=p.getElementsByTagNameNS(r,"master-page"),E=0;E<u.length;E+=1)if(u[E].getAttributeNS(r,"page-layout-name")===s.parentNode.getAttributeNS(r,"name")){P=u[E].getAttributeNS(r,"name");p="draw|page[dra [...]
++P+"] {"+l+"}";P="office|body, draw|page[draw|master-page-name="+P+"] {"+d(s,ja)+" }";try{e.insertRule(p,e.cssRules.length),e.insertRule(P,e.cssRules.length)}catch($){throw $;}}}else{if("text"===ga){p="office|text {"+l+"}";P="office|body {width: "+s.getAttributeNS(n,"page-width")+";}";try{e.insertRule(p,e.cssRules.length),e.insertRule(P,e.cssRules.length)}catch(F){throw F;}}}else{l=q(h,l,m).join(",");s="";if(p=a(m,r,"text-properties")){var E=p,U;u=U="";P=1;p=""+d(E,D);t=E.getAttributeNS( [...]
++"solid"===t&&(U+=" underline");t=E.getAttributeNS(r,"text-line-through-style");"solid"===t&&(U+=" line-through");U.length&&(p+="text-decoration:"+U+";");if(U=E.getAttributeNS(r,"font-name")||E.getAttributeNS(n,"font-family"))t=ka[U],p+="font-family: "+(t||U)+";";t=E.parentNode;if(E=f(t)){for(;t;){if(E=f(t)){if("%"!==E.unit){u="font-size: "+E.value*P+E.unit+";";break}P*=E.value/100}E=t;U=t="";t=null;"default-style"===E.localName?t=null:(t=E.getAttributeNS(r,"parent-style-name"),U=E.getAt [...]
++"family"),t=V.getODFElementsWithXPath(S,t?"//style:*[@style:name='"+t+"'][@style:family='"+U+"']":"//style:default-style[@style:family='"+U+"']",odf.Namespaces.resolvePrefix)[0])}u||(u="font-size: "+parseFloat(Y)*P+N.getUnits(Y)+";");p+=u}s+=p}if(p=a(m,r,"paragraph-properties"))u=p,p=""+d(u,C),P=u.getElementsByTagNameNS(r,"background-image"),0<P.length&&(E=P.item(0).getAttributeNS(w,"href"))&&(p+="background-image: url('odfkit:"+E+"');",P=P.item(0),p+=d(P,A)),(u=u.getAttributeNS(n,"line [...]
++"normal"!==u&&(u=ba.parseFoLineHeight(u),p="%"!==u.unit?p+("line-height: "+u.value+u.unit+";"):p+("line-height: "+u.value/100+";")),s+=p;if(p=a(m,r,"graphic-properties"))E=p,p=""+d(E,I),u=E.getAttributeNS(g,"opacity"),P=E.getAttributeNS(g,"fill"),E=E.getAttributeNS(g,"fill-color"),"solid"===P||"hatch"===P?E&&"none"!==E?(u=isNaN(parseFloat(u))?1:parseFloat(u)/100,(E=b(E))&&(p+="background-color: rgba("+E.r+","+E.g+","+E.b+","+u+");")):p+="background: none;":"none"===P&&(p+="background: n [...]
++p;if(p=a(m,r,"drawing-page-properties"))u=""+d(p,I),"true"===p.getAttributeNS(v,"background-visible")&&(u+="background: none;"),s+=u;if(p=a(m,r,"table-cell-properties"))p=""+d(p,z),s+=p;if(p=a(m,r,"table-row-properties"))p=""+d(p,H),s+=p;if(p=a(m,r,"table-column-properties"))p=""+d(p,M),s+=p;if(p=a(m,r,"table-properties"))u=p,p=""+d(u,R),u=u.getAttributeNS(y,"border-model"),"collapsing"===u?p+="border-collapse:collapse;":"separating"===u&&(p+="border-collapse:separate;"),s+=p;if(0!==s.l [...]
++"{"+s+"}",e.cssRules.length)}catch(J){throw J;}}for(var ia in m.derivedStyles)m.derivedStyles.hasOwnProperty(ia)&&c(e,h,ia,m.derivedStyles[ia])}var g=odf.Namespaces.drawns,n=odf.Namespaces.fons,r=odf.Namespaces.stylens,u=odf.Namespaces.svgns,y=odf.Namespaces.tablens,x=odf.Namespaces.textns,w=odf.Namespaces.xlinkns,v=odf.Namespaces.presentationns,t={graphic:"draw","drawing-page":"draw",paragraph:"text",presentation:"presentation",ruby:"text",section:"text",table:"table","table-cell":"tab [...]
 +"table-row":"table",text:"text",list:"text",page:"office"},s={graphic:"circle connected control custom-shape ellipse frame g line measure page page-thumbnail path polygon polyline rect regular-polygon".split(" "),paragraph:"alphabetical-index-entry-template h illustration-index-entry-template index-source-style object-index-entry-template p table-index-entry-template table-of-content-entry-template user-index-entry-template".split(" "),presentation:"caption circle connector control cust [...]
 +"drawing-page":"caption circle connector control page custom-shape ellipse frame g line measure page-thumbnail path polygon polyline rect regular-polygon".split(" "),ruby:["ruby","ruby-text"],section:"alphabetical-index bibliography illustration-index index-title object-index section table-of-content table-index user-index".split(" "),table:["background","table"],"table-cell":"body covered-table-cell even-columns even-rows first-column first-row last-column last-row odd-columns odd-rows [...]
- "table-column":["table-column"],"table-row":["table-row"],text:"a index-entry-chapter index-entry-link-end index-entry-link-start index-entry-page-number index-entry-span index-entry-tab-stop index-entry-text index-title-template linenumbering-configuration list-level-style-number list-level-style-bullet outline-level-style span".split(" "),list:["list-item"]},C=[[l,"color","color"],[l,"background-color","background-color"],[l,"font-weight","font-weight"],[l,"font-style","font-style"]], [...]
- "background-repeat"]],A=[[l,"background-color","background-color"],[l,"text-align","text-align"],[l,"text-indent","text-indent"],[l,"padding","padding"],[l,"padding-left","padding-left"],[l,"padding-right","padding-right"],[l,"padding-top","padding-top"],[l,"padding-bottom","padding-bottom"],[l,"border-left","border-left"],[l,"border-right","border-right"],[l,"border-top","border-top"],[l,"border-bottom","border-bottom"],[l,"margin","margin"],[l,"margin-left","margin-left"],[l,"margin-r [...]
- [l,"margin-top","margin-top"],[l,"margin-bottom","margin-bottom"],[l,"border","border"]],I=[[l,"background-color","background-color"],[l,"min-height","min-height"],[q,"stroke","border"],[t,"stroke-color","border-color"],[t,"stroke-width","border-width"],[l,"border","border"],[l,"border-left","border-left"],[l,"border-right","border-right"],[l,"border-top","border-top"],[l,"border-bottom","border-bottom"]],z=[[l,"background-color","background-color"],[l,"border-left","border-left"],[l,"b [...]
- "border-right"],[l,"border-top","border-top"],[l,"border-bottom","border-bottom"],[l,"border","border"]],N=[[r,"column-width","width"]],G=[[r,"row-height","height"],[l,"keep-together",null]],R=[[r,"width","width"],[l,"margin-left","margin-left"],[l,"margin-right","margin-right"],[l,"margin-top","margin-top"],[l,"margin-bottom","margin-bottom"]],Z=[[l,"background-color","background-color"],[l,"padding","padding"],[l,"padding-left","padding-left"],[l,"padding-right","padding-right"],[l,"p [...]
- "padding-top"],[l,"padding-bottom","padding-bottom"],[l,"border","border"],[l,"border-left","border-left"],[l,"border-right","border-right"],[l,"border-top","border-top"],[l,"border-bottom","border-bottom"],[l,"margin","margin"],[l,"margin-left","margin-left"],[l,"margin-right","margin-right"],[l,"margin-top","margin-top"],[l,"margin-bottom","margin-bottom"]],ka=[[l,"page-width","width"],[l,"page-height","height"]],T={border:!0,"border-left":!0,"border-right":!0,"border-top":!0,"border- [...]
- "stroke-width":!0},ra={},$=new odf.OdfUtils,ha,U,O,W=new xmldom.XPath,E=new core.CSSUnits;this.style2css=function(a,b,d,c,f){for(var k,h,l,m;b.cssRules.length;)b.deleteRule(b.cssRules.length-1);k=null;c&&(k=c.ownerDocument,U=c.parentNode);f&&(k=f.ownerDocument,U=f.parentNode);if(k)for(m in odf.Namespaces.forEachPrefix(function(a,d){l="@namespace "+a+" url("+d+");";try{b.insertRule(l,b.cssRules.length)}catch(c){}}),ra=d,ha=a,O=runtime.getWindow().getComputedStyle(document.body,null).getP [...]
- "12pt",a=e(c),c=e(f),f={},u)if(u.hasOwnProperty(m))for(h in d=f[m]={},n(a[m],d),n(c[m],d),d)d.hasOwnProperty(h)&&g(b,m,h,d[h])}};
++"table-column":["table-column"],"table-row":["table-row"],text:"a index-entry-chapter index-entry-link-end index-entry-link-start index-entry-page-number index-entry-span index-entry-tab-stop index-entry-text index-title-template linenumbering-configuration list-level-style-number list-level-style-bullet outline-level-style span".split(" "),list:["list-item"]},D=[[n,"color","color"],[n,"background-color","background-color"],[n,"font-weight","font-weight"],[n,"font-style","font-style"]], [...]
++"background-repeat"]],C=[[n,"background-color","background-color"],[n,"text-align","text-align"],[n,"text-indent","text-indent"],[n,"padding","padding"],[n,"padding-left","padding-left"],[n,"padding-right","padding-right"],[n,"padding-top","padding-top"],[n,"padding-bottom","padding-bottom"],[n,"border-left","border-left"],[n,"border-right","border-right"],[n,"border-top","border-top"],[n,"border-bottom","border-bottom"],[n,"margin","margin"],[n,"margin-left","margin-left"],[n,"margin-r [...]
++[n,"margin-top","margin-top"],[n,"margin-bottom","margin-bottom"],[n,"border","border"]],I=[[n,"background-color","background-color"],[n,"min-height","min-height"],[g,"stroke","border"],[u,"stroke-color","border-color"],[u,"stroke-width","border-width"],[n,"border","border"],[n,"border-left","border-left"],[n,"border-right","border-right"],[n,"border-top","border-top"],[n,"border-bottom","border-bottom"]],z=[[n,"background-color","background-color"],[n,"border-left","border-left"],[n,"b [...]
++"border-right"],[n,"border-top","border-top"],[n,"border-bottom","border-bottom"],[n,"border","border"]],M=[[r,"column-width","width"]],H=[[r,"row-height","height"],[n,"keep-together",null]],R=[[r,"width","width"],[n,"margin-left","margin-left"],[n,"margin-right","margin-right"],[n,"margin-top","margin-top"],[n,"margin-bottom","margin-bottom"]],Z=[[n,"background-color","background-color"],[n,"padding","padding"],[n,"padding-left","padding-left"],[n,"padding-right","padding-right"],[n,"p [...]
++"padding-top"],[n,"padding-bottom","padding-bottom"],[n,"border","border"],[n,"border-left","border-left"],[n,"border-right","border-right"],[n,"border-top","border-top"],[n,"border-bottom","border-bottom"],[n,"margin","margin"],[n,"margin-left","margin-left"],[n,"margin-right","margin-right"],[n,"margin-top","margin-top"],[n,"margin-bottom","margin-bottom"]],ja=[[n,"page-width","width"],[n,"page-height","height"]],E={border:!0,"border-left":!0,"border-right":!0,"border-top":!0,"border- [...]
++"stroke-width":!0},ka={},ba=new odf.OdfUtils,ga,S,Y,V=new xmldom.XPath,N=new core.CSSUnits;this.style2css=function(a,b,g,d,f){for(var e,k,l,n;b.cssRules.length;)b.deleteRule(b.cssRules.length-1);e=null;d&&(e=d.ownerDocument,S=d.parentNode);f&&(e=f.ownerDocument,S=f.parentNode);if(e)for(n in odf.Namespaces.forEachPrefix(function(a,c){l="@namespace "+a+" url("+c+");";try{b.insertRule(l,b.cssRules.length)}catch(g){}}),ka=g,ga=a,Y=runtime.getWindow().getComputedStyle(document.body,null).get [...]
++"12pt",a=h(d),d=h(f),f={},t)if(t.hasOwnProperty(n))for(k in g=f[n]={},p(a[n],g),p(d[n],g),g)g.hasOwnProperty(k)&&c(b,n,k,g[k])}};
 +// Input 34
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Base64");runtime.loadClass("core.Zip");runtime.loadClass("xmldom.LSSerializer");runtime.loadClass("odf.StyleInfo");runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfNodeFilter");
- odf.OdfContainer=function(){function e(a,b,d){for(a=a?a.firstChild:null;a;){if(a.localName===d&&a.namespaceURI===b)return a;a=a.nextSibling}return null}function h(a){var b,c=d.length;for(b=0;b<c;b+=1)if("urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&a.localName===d[b])return b;return-1}function f(a,d){var c=new b.UsedStyleList(a,d),e=new odf.OdfNodeFilter;this.acceptNode=function(a){var b=e.acceptNode(a);b===NodeFilter.FILTER_ACCEPT&&a.parentNode===d&&a.nodeType=== [...]
- (b=c.uses(a)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT);return b}}function n(a,b){var d=new f(a,b);this.acceptNode=function(a){var b=d.acceptNode(a);b!==NodeFilter.FILTER_ACCEPT||!a.parentNode||a.parentNode.namespaceURI!==odf.Namespaces.textns||"s"!==a.parentNode.localName&&"tab"!==a.parentNode.localName||(b=NodeFilter.FILTER_REJECT);return b}}function m(a,b){if(b){var d=h(b),c,e=a.firstChild;if(-1!==d){for(;e;){c=h(e);if(-1!==c&&c>d)break;e=e.nextSibling}a.insertBefore(b,e)}}}f [...]
- a}function c(a,b,d,c){var e=this;this.size=0;this.type=null;this.name=a;this.container=d;this.onchange=this.onreadystatechange=this.document=this.mimetype=this.url=null;this.EMPTY=0;this.LOADING=1;this.DONE=2;this.state=this.EMPTY;this.load=function(){null!==c&&(this.mimetype=b,c.loadAsDataURL(a,b,function(a,b){a&&runtime.log(a);e.url=b;if(e.onchange)e.onchange(e);if(e.onstatereadychange)e.onstatereadychange(e)}))}}var b=new odf.StyleInfo,a=odf.Namespaces.stylens,d="meta settings script [...]
- k=(new Date).getTime()+"_webodf_",g=new core.Base64;p.prototype=new function(){};p.prototype.constructor=p;p.namespaceURI="urn:oasis:names:tc:opendocument:xmlns:office:1.0";p.localName="document";c.prototype.load=function(){};c.prototype.getUrl=function(){return this.data?"data:;base64,"+g.toBase64(this.data):null};odf.OdfContainer=function l(d,h){function w(a){for(var b=a.firstChild,d;b;)d=b.nextSibling,b.nodeType===Node.ELEMENT_NODE?w(b):b.nodeType===Node.PROCESSING_INSTRUCTION_NODE&& [...]
- b=d}function v(a,b){for(var d=a&&a.firstChild;d;)d.nodeType===Node.ELEMENT_NODE&&d.setAttributeNS("urn:webodf:names:scope","scope",b),d=d.nextSibling}function y(b,d){function c(a,b,d){var e=0,f;for(f=a=a.replace(/\d+$/,"");b.hasOwnProperty(f)||d.hasOwnProperty(f);)e+=1,f=a+e;return f}function e(b){var d={};for(b=b.firstChild;b;)b.nodeType===Node.ELEMENT_NODE&&b.namespaceURI===a&&"font-face"===b.localName&&(k=b.getAttributeNS(a,"name"),d[k]=b),b=b.nextSibling;return d}var f,g,k,h,l,m,n={ [...]
- e(d);for(f=d.firstChild;f;)g=f.nextSibling,f.nodeType===Node.ELEMENT_NODE&&f.namespaceURI===a&&"font-face"===f.localName&&(k=f.getAttributeNS(a,"name"),l.hasOwnProperty(k)?f.isEqualNode(l[k])||(h=c(k,l,m),f.setAttributeNS(a,"style:name",h),b.appendChild(f),l[h]=f,delete m[k],n[k]=h):(b.appendChild(f),l[k]=f,delete m[k])),f=g;return n}function x(a,b){var d=null,c,e,f;if(a)for(d=a.cloneNode(!0),c=d.firstChild;c;)e=c.nextSibling,c.nodeType===Node.ELEMENT_NODE&&(f=c.getAttributeNS("urn:webo [...]
- "scope"))&&f!==b&&d.removeChild(c),c=e;return d}function u(d,c){var e=null,f,g,k,h={};if(d)for(c.forEach(function(a){b.collectUsedFontFaces(h,a)}),e=d.cloneNode(!0),f=e.firstChild;f;)g=f.nextSibling,f.nodeType===Node.ELEMENT_NODE&&(k=f.getAttributeNS(a,"name"),h[k]||e.removeChild(f)),f=g;return e}function s(a){var b=M.rootElement.ownerDocument,d;if(a){w(a.documentElement);try{d=b.importNode(a.documentElement,!0)}catch(c){}}return d}function C(a){M.state=a;if(M.onchange)M.onchange(M);if( [...]
- function B(a){aa=null;M.rootElement=a;a.fontFaceDecls=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls");a.styles=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","styles");a.automaticStyles=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles");a.masterStyles=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles");a.body=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","body");a.meta=e(a,"urn:oasis:names:tc:opendocu [...]
- "meta")}function A(a){a=s(a);var d=M.rootElement;a&&"document-styles"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI?(d.fontFaceDecls=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls"),m(d,d.fontFaceDecls),d.styles=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","styles"),m(d,d.styles),d.automaticStyles=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles"),v(d.automaticStyles,"document-styles"),m(d,d. [...]
- d.masterStyles=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles"),m(d,d.masterStyles),b.prefixStyleNames(d.automaticStyles,k,d.masterStyles)):C(l.INVALID)}function I(a){a=s(a);var d,c,f;if(a&&"document-content"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI){d=M.rootElement;c=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls");d.fontFaceDecls&&c?f=y(d.fontFaceDecls,c):c&&(d.fontFaceDecls=c,m(d,c));c=e(a,"urn: [...]
- "automatic-styles");v(c,"document-content");f&&b.changeFontFaceNames(c,f);if(d.automaticStyles&&c)for(f=c.firstChild;f;)d.automaticStyles.appendChild(f),f=c.firstChild;else c&&(d.automaticStyles=c,m(d,c));d.body=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","body");m(d,d.body)}else C(l.INVALID)}function z(a){a=s(a);var b;a&&"document-meta"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&(b=M.rootElement,b.meta=e(a,"urn:oasis:names:tc:opendocu [...]
- "meta"),m(b,b.meta))}function N(a){a=s(a);var b;a&&"document-settings"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&(b=M.rootElement,b.settings=e(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","settings"),m(b,b.settings))}function G(a){a=s(a);var b;if(a&&"manifest"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"===a.namespaceURI)for(b=M.rootElement,b.manifest=a,a=b.manifest.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&"fi [...]
- a.localName&&"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"===a.namespaceURI&&(P[a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","full-path")]=a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","media-type")),a=a.nextSibling}function R(a){var b=a.shift(),d,c;b?(d=b[0],c=b[1],S.loadAsDOM(d,function(b,d){c(d);b||M.state===l.INVALID||R(a)})):C(l.DONE)}function Z(a){var b="";odf.Namespaces.forEachPrefix(function(a,d){b+=" xmlns:"+a+'="'+d+'"'}) [...]
- a+" "+b+' office:version="1.2">'}function ka(){var a=new xmldom.LSSerializer,b=Z("document-meta");a.filter=new odf.OdfNodeFilter;b+=a.writeToString(M.rootElement.meta,odf.Namespaces.namespaceMap);return b+"</office:document-meta>"}function T(a,b){var d=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest:file-entry");d.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest:full-path",a);d.setAttributeNS("urn:oasis:names:tc:opendo [...]
- "manifest:media-type",b);return d}function ra(){var a=runtime.parseXML('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2"></manifest:manifest>'),b=e(a,"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest"),d=new xmldom.LSSerializer,c;for(c in P)P.hasOwnProperty(c)&&b.appendChild(T(c,P[c]));d.filter=new odf.OdfNodeFilter;return'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n'+d.writeToString(a,odf.Namespaces. [...]
- function $(){var a=new xmldom.LSSerializer,b=Z("document-settings");a.filter=new odf.OdfNodeFilter;b+=a.writeToString(M.rootElement.settings,odf.Namespaces.namespaceMap);return b+"</office:document-settings>"}function ha(){var a=odf.Namespaces.namespaceMap,d=new xmldom.LSSerializer,c,e,g,h=Z("document-styles");e=x(M.rootElement.automaticStyles,"document-styles");g=M.rootElement.masterStyles&&M.rootElement.masterStyles.cloneNode(!0);c=u(M.rootElement.fontFaceDecls,[g,M.rootElement.styles [...]
- k,g);d.filter=new f(g,e);h+=d.writeToString(c,a);h+=d.writeToString(M.rootElement.styles,a);h+=d.writeToString(e,a);h+=d.writeToString(g,a);return h+"</office:document-styles>"}function U(){var a=odf.Namespaces.namespaceMap,b=new xmldom.LSSerializer,d,c,e=Z("document-content");c=x(M.rootElement.automaticStyles,"document-content");d=u(M.rootElement.fontFaceDecls,[c]);b.filter=new n(M.rootElement.body,c);e+=b.writeToString(d,a);e+=b.writeToString(c,a);e+=b.writeToString(M.rootElement.body [...]
- "</office:document-content>"}function O(a,b){runtime.loadXML(a,function(a,d){if(a)b(a);else{var c=s(d);c&&"document"===c.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===c.namespaceURI?(B(c),C(l.DONE)):C(l.INVALID)}})}function W(){function a(b,d){var e;d||(d=b);e=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0",d);c[b]=e;c.appendChild(e)}var b=new core.Zip("",null),d=runtime.byteArrayFromString("application/vnd.oasis.opendocument.text","utf8"),c [...]
- e=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","text");b.save("mimetype",d,!1,new Date);a("meta");a("settings");a("scripts");a("fontFaceDecls","font-face-decls");a("styles");a("automaticStyles","automatic-styles");a("masterStyles","master-styles");a("body");c.body.appendChild(e);C(l.DONE);return b}function E(){var a,b=new Date;a=runtime.byteArrayFromString($(),"utf8");S.save("settings.xml",a,!0,b);a=runtime.byteArrayFromString(ka(),"utf8");S.save("meta.xml [...]
- a=runtime.byteArrayFromString(ha(),"utf8");S.save("styles.xml",a,!0,b);a=runtime.byteArrayFromString(U(),"utf8");S.save("content.xml",a,!0,b);a=runtime.byteArrayFromString(ra(),"utf8");S.save("META-INF/manifest.xml",a,!0,b)}function H(a,b){E();S.writeAs(a,function(a){b(a)})}var M=this,S,P={},aa;this.onstatereadychange=h;this.rootElement=this.state=this.onchange=null;this.setRootElement=B;this.getContentElement=function(){var a;aa||(a=M.rootElement.body,aa=a.getElementsByTagNameNS("urn:o [...]
- "text")[0]||a.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","presentation")[0]||a.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","spreadsheet")[0]);return aa};this.getDocumentType=function(){var a=M.getContentElement();return a&&a.localName};this.getPart=function(a){return new c(a,P[a],M,S)};this.getPartData=function(a,b){S.load(a,b)};this.createByteArray=function(a,b){E();S.createByteArray(a,b)};this.saveAs=H;this.save=function(a){ [...]
- function(){return d};this.setBlob=function(a,b,d){d=g.convertBase64ToByteArray(d);S.save(a,d,!1,new Date);P.hasOwnProperty(a)&&runtime.log(a+" has been overwritten.");P[a]=b};this.removeBlob=function(a){var b=S.remove(a);runtime.assert(b,"file is not found: "+a);delete P[a]};this.state=l.LOADING;this.rootElement=function(a){var b=document.createElementNS(a.namespaceURI,a.localName),d;a=new a;for(d in a)a.hasOwnProperty(d)&&(b[d]=a[d]);return b}(p);S=d?new core.Zip(d,function(a,b){S=b;a? [...]
- (S.error=a+"\n"+b,C(l.INVALID))}):R([["styles.xml",A],["content.xml",I],["meta.xml",z],["settings.xml",N],["META-INF/manifest.xml",G]])}):W()};odf.OdfContainer.EMPTY=0;odf.OdfContainer.LOADING=1;odf.OdfContainer.DONE=2;odf.OdfContainer.INVALID=3;odf.OdfContainer.SAVING=4;odf.OdfContainer.MODIFIED=5;odf.OdfContainer.getContainer=function(a){return new odf.OdfContainer(a,null)};return odf.OdfContainer}();
++odf.OdfContainer=function(){function h(a,c,b){for(a=a?a.firstChild:null;a;){if(a.localName===b&&a.namespaceURI===c)return a;a=a.nextSibling}return null}function m(a){var c,d=b.length;for(c=0;c<d;c+=1)if("urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&a.localName===b[c])return c;return-1}function e(a,c){var b=new d.UsedStyleList(a,c),f=new odf.OdfNodeFilter;this.acceptNode=function(a){var g=f.acceptNode(a);g===NodeFilter.FILTER_ACCEPT&&a.parentNode===c&&a.nodeType=== [...]
++(g=b.uses(a)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT);return g}}function p(a,c){var b=new e(a,c);this.acceptNode=function(a){var c=b.acceptNode(a);c!==NodeFilter.FILTER_ACCEPT||!a.parentNode||a.parentNode.namespaceURI!==odf.Namespaces.textns||"s"!==a.parentNode.localName&&"tab"!==a.parentNode.localName||(c=NodeFilter.FILTER_REJECT);return c}}function l(a,c){if(c){var b=m(c),d,f=a.firstChild;if(-1!==b){for(;f;){d=m(f);if(-1!==d&&d>b)break;f=f.nextSibling}a.insertBefore(c,f)}}}f [...]
++a}function a(a,c,b,d){var f=this;this.size=0;this.type=null;this.name=a;this.container=b;this.onchange=this.onreadystatechange=this.document=this.mimetype=this.url=null;this.EMPTY=0;this.LOADING=1;this.DONE=2;this.state=this.EMPTY;this.load=function(){null!==d&&(this.mimetype=c,d.loadAsDataURL(a,c,function(a,c){a&&runtime.log(a);f.url=c;if(f.onchange)f.onchange(f);if(f.onstatereadychange)f.onstatereadychange(f)}))}}var d=new odf.StyleInfo,f=odf.Namespaces.stylens,b="meta settings script [...]
++k=(new Date).getTime()+"_webodf_",c=new core.Base64;q.prototype=new function(){};q.prototype.constructor=q;q.namespaceURI="urn:oasis:names:tc:opendocument:xmlns:office:1.0";q.localName="document";a.prototype.load=function(){};a.prototype.getUrl=function(){return this.data?"data:;base64,"+c.toBase64(this.data):null};odf.OdfContainer=function n(b,m){function y(a){for(var c=a.firstChild,b;c;)b=c.nextSibling,c.nodeType===Node.ELEMENT_NODE?y(c):c.nodeType===Node.PROCESSING_INSTRUCTION_NODE&& [...]
++c=b}function x(a,c){for(var b=a&&a.firstChild;b;)b.nodeType===Node.ELEMENT_NODE&&b.setAttributeNS("urn:webodf:names:scope","scope",c),b=b.nextSibling}function w(a,c){function b(a,c,d){var f=0,e;for(e=a=a.replace(/\d+$/,"");c.hasOwnProperty(e)||d.hasOwnProperty(e);)f+=1,e=a+f;return e}function d(a){var c={};for(a=a.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&a.namespaceURI===f&&"font-face"===a.localName&&(h=a.getAttributeNS(f,"name"),c[h]=a),a=a.nextSibling;return c}var e,k,h,l,n,m,s={ [...]
++d(c);for(e=c.firstChild;e;)k=e.nextSibling,e.nodeType===Node.ELEMENT_NODE&&e.namespaceURI===f&&"font-face"===e.localName&&(h=e.getAttributeNS(f,"name"),n.hasOwnProperty(h)?e.isEqualNode(n[h])||(l=b(h,n,m),e.setAttributeNS(f,"style:name",l),a.appendChild(e),n[l]=e,delete m[h],s[h]=l):(a.appendChild(e),n[h]=e,delete m[h])),e=k;return s}function v(a,c){var b=null,d,f,e;if(a)for(b=a.cloneNode(!0),d=b.firstChild;d;)f=d.nextSibling,d.nodeType===Node.ELEMENT_NODE&&(e=d.getAttributeNS("urn:webo [...]
++"scope"))&&e!==c&&b.removeChild(d),d=f;return b}function t(a,c){var b=null,e,k,h,l={};if(a)for(c.forEach(function(a){d.collectUsedFontFaces(l,a)}),b=a.cloneNode(!0),e=b.firstChild;e;)k=e.nextSibling,e.nodeType===Node.ELEMENT_NODE&&(h=e.getAttributeNS(f,"name"),l[h]||b.removeChild(e)),e=k;return b}function s(a){var c=G.rootElement.ownerDocument,b;if(a){y(a.documentElement);try{b=c.importNode(a.documentElement,!0)}catch(d){}}return b}function D(a){G.state=a;if(G.onchange)G.onchange(G);if( [...]
++function A(a){ca=null;G.rootElement=a;a.fontFaceDecls=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls");a.styles=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","styles");a.automaticStyles=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles");a.masterStyles=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles");a.body=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","body");a.meta=h(a,"urn:oasis:names:tc:opendocu [...]
++"meta")}function C(a){a=s(a);var c=G.rootElement;a&&"document-styles"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI?(c.fontFaceDecls=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls"),l(c,c.fontFaceDecls),c.styles=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","styles"),l(c,c.styles),c.automaticStyles=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","automatic-styles"),x(c.automaticStyles,"document-styles"),l(c,c. [...]
++c.masterStyles=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","master-styles"),l(c,c.masterStyles),d.prefixStyleNames(c.automaticStyles,k,c.masterStyles)):D(n.INVALID)}function I(a){a=s(a);var c,b,f;if(a&&"document-content"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI){c=G.rootElement;b=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","font-face-decls");c.fontFaceDecls&&b?f=w(c.fontFaceDecls,b):b&&(c.fontFaceDecls=b,l(c,b));b=h(a,"urn: [...]
++"automatic-styles");x(b,"document-content");f&&d.changeFontFaceNames(b,f);if(c.automaticStyles&&b)for(f=b.firstChild;f;)c.automaticStyles.appendChild(f),f=b.firstChild;else b&&(c.automaticStyles=b,l(c,b));c.body=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","body");l(c,c.body)}else D(n.INVALID)}function z(a){a=s(a);var c;a&&"document-meta"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&(c=G.rootElement,c.meta=h(a,"urn:oasis:names:tc:opendocu [...]
++"meta"),l(c,c.meta))}function M(a){a=s(a);var c;a&&"document-settings"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===a.namespaceURI&&(c=G.rootElement,c.settings=h(a,"urn:oasis:names:tc:opendocument:xmlns:office:1.0","settings"),l(c,c.settings))}function H(a){a=s(a);var c;if(a&&"manifest"===a.localName&&"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"===a.namespaceURI)for(c=G.rootElement,c.manifest=a,a=c.manifest.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&"fi [...]
++a.localName&&"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"===a.namespaceURI&&(O[a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","full-path")]=a.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","media-type")),a=a.nextSibling}function R(a){var c=a.shift(),b,d;c?(b=c[0],d=c[1],Q.loadAsDOM(b,function(c,b){d(b);c||G.state===n.INVALID||R(a)})):D(n.DONE)}function Z(a){var c="";odf.Namespaces.forEachPrefix(function(a,b){c+=" xmlns:"+a+'="'+b+'"'}) [...]
++a+" "+c+' office:version="1.2">'}function ja(){var a=new xmldom.LSSerializer,c=Z("document-meta");a.filter=new odf.OdfNodeFilter;c+=a.writeToString(G.rootElement.meta,odf.Namespaces.namespaceMap);return c+"</office:document-meta>"}function E(a,c){var b=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest:file-entry");b.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest:full-path",a);b.setAttributeNS("urn:oasis:names:tc:opendo [...]
++"manifest:media-type",c);return b}function ka(){var a=runtime.parseXML('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2"></manifest:manifest>'),c=h(a,"urn:oasis:names:tc:opendocument:xmlns:manifest:1.0","manifest"),b=new xmldom.LSSerializer,d;for(d in O)O.hasOwnProperty(d)&&c.appendChild(E(d,O[d]));b.filter=new odf.OdfNodeFilter;return'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n'+b.writeToString(a,odf.Namespaces. [...]
++function ba(){var a=new xmldom.LSSerializer,c=Z("document-settings");a.filter=new odf.OdfNodeFilter;c+=a.writeToString(G.rootElement.settings,odf.Namespaces.namespaceMap);return c+"</office:document-settings>"}function ga(){var a=odf.Namespaces.namespaceMap,c=new xmldom.LSSerializer,b,f,h,l=Z("document-styles");f=v(G.rootElement.automaticStyles,"document-styles");h=G.rootElement.masterStyles&&G.rootElement.masterStyles.cloneNode(!0);b=t(G.rootElement.fontFaceDecls,[h,G.rootElement.style [...]
++k,h);c.filter=new e(h,f);l+=c.writeToString(b,a);l+=c.writeToString(G.rootElement.styles,a);l+=c.writeToString(f,a);l+=c.writeToString(h,a);return l+"</office:document-styles>"}function S(){var a=odf.Namespaces.namespaceMap,c=new xmldom.LSSerializer,b,d,f=Z("document-content");d=v(G.rootElement.automaticStyles,"document-content");b=t(G.rootElement.fontFaceDecls,[d]);c.filter=new p(G.rootElement.body,d);f+=c.writeToString(b,a);f+=c.writeToString(d,a);f+=c.writeToString(G.rootElement.body [...]
++"</office:document-content>"}function Y(a,c){runtime.loadXML(a,function(a,b){if(a)c(a);else{var d=s(b);d&&"document"===d.localName&&"urn:oasis:names:tc:opendocument:xmlns:office:1.0"===d.namespaceURI?(A(d),D(n.DONE)):D(n.INVALID)}})}function V(){function a(c,b){var f;b||(b=c);f=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0",b);d[c]=f;d.appendChild(f)}var c=new core.Zip("",null),b=runtime.byteArrayFromString("application/vnd.oasis.opendocument.text","utf8"),d [...]
++f=document.createElementNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","text");c.save("mimetype",b,!1,new Date);a("meta");a("settings");a("scripts");a("fontFaceDecls","font-face-decls");a("styles");a("automaticStyles","automatic-styles");a("masterStyles","master-styles");a("body");d.body.appendChild(f);D(n.DONE);return c}function N(){var a,c=new Date;a=runtime.byteArrayFromString(ba(),"utf8");Q.save("settings.xml",a,!0,c);a=runtime.byteArrayFromString(ja(),"utf8");Q.save("meta.xm [...]
++a=runtime.byteArrayFromString(ga(),"utf8");Q.save("styles.xml",a,!0,c);a=runtime.byteArrayFromString(S(),"utf8");Q.save("content.xml",a,!0,c);a=runtime.byteArrayFromString(ka(),"utf8");Q.save("META-INF/manifest.xml",a,!0,c)}function L(a,c){N();Q.writeAs(a,function(a){c(a)})}var G=this,Q,O={},ca;this.onstatereadychange=m;this.rootElement=this.state=this.onchange=null;this.setRootElement=A;this.getContentElement=function(){var a;ca||(a=G.rootElement.body,ca=a.getElementsByTagNameNS("urn:o [...]
++"text")[0]||a.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","presentation")[0]||a.getElementsByTagNameNS("urn:oasis:names:tc:opendocument:xmlns:office:1.0","spreadsheet")[0]);return ca};this.getDocumentType=function(){var a=G.getContentElement();return a&&a.localName};this.getPart=function(c){return new a(c,O[c],G,Q)};this.getPartData=function(a,c){Q.load(a,c)};this.createByteArray=function(a,c){N();Q.createByteArray(a,c)};this.saveAs=L;this.save=function(a){ [...]
++function(){return b};this.setBlob=function(a,b,d){d=c.convertBase64ToByteArray(d);Q.save(a,d,!1,new Date);O.hasOwnProperty(a)&&runtime.log(a+" has been overwritten.");O[a]=b};this.removeBlob=function(a){var c=Q.remove(a);runtime.assert(c,"file is not found: "+a);delete O[a]};this.state=n.LOADING;this.rootElement=function(a){var c=document.createElementNS(a.namespaceURI,a.localName),b;a=new a;for(b in a)a.hasOwnProperty(b)&&(c[b]=a[b]);return c}(q);Q=b?new core.Zip(b,function(a,c){Q=c;a? [...]
++(Q.error=a+"\n"+c,D(n.INVALID))}):R([["styles.xml",C],["content.xml",I],["meta.xml",z],["settings.xml",M],["META-INF/manifest.xml",H]])}):V()};odf.OdfContainer.EMPTY=0;odf.OdfContainer.LOADING=1;odf.OdfContainer.DONE=2;odf.OdfContainer.INVALID=3;odf.OdfContainer.SAVING=4;odf.OdfContainer.MODIFIED=5;odf.OdfContainer.getContainer=function(a){return new odf.OdfContainer(a,null)};return odf.OdfContainer}();
 +// Input 35
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Base64");runtime.loadClass("xmldom.XPath");runtime.loadClass("odf.OdfContainer");
- odf.FontLoader=function(){function e(h,m,p,c,b){var a,d=0,k;for(k in h)if(h.hasOwnProperty(k)){if(d===p){a=k;break}d+=1}a?m.getPartData(h[a].href,function(d,k){if(d)runtime.log(d);else{var l="@font-face { font-family: '"+(h[a].family||a)+"'; src: url(data:application/x-font-ttf;charset=binary;base64,"+f.convertUTF8ArrayToBase64(k)+') format("truetype"); }';try{c.insertRule(l,c.cssRules.length)}catch(r){runtime.log("Problem inserting rule in CSS: "+runtime.toJson(r)+"\nRule: "+l)}}e(h,m, [...]
- b&&b()}var h=new xmldom.XPath,f=new core.Base64;odf.FontLoader=function(){this.loadFonts=function(f,m){for(var p=f.rootElement.fontFaceDecls;m.cssRules.length;)m.deleteRule(m.cssRules.length-1);if(p){var c={},b,a,d,k;if(p)for(p=h.getODFElementsWithXPath(p,"style:font-face[svg:font-face-src]",odf.Namespaces.resolvePrefix),b=0;b<p.length;b+=1)a=p[b],d=a.getAttributeNS(odf.Namespaces.stylens,"name"),k=a.getAttributeNS(odf.Namespaces.svgns,"font-family"),a=h.getODFElementsWithXPath(a,"svg:f [...]
- odf.Namespaces.resolvePrefix),0<a.length&&(a=a[0].getAttributeNS(odf.Namespaces.xlinkns,"href"),c[d]={href:a,family:k});e(c,f,0,m)}}};return odf.FontLoader}();
++odf.FontLoader=function(){function h(m,l,q,a,d){var f,b=0,k;for(k in m)if(m.hasOwnProperty(k)){if(b===q){f=k;break}b+=1}f?l.getPartData(m[f].href,function(c,b){if(c)runtime.log(c);else{var k="@font-face { font-family: '"+(m[f].family||f)+"'; src: url(data:application/x-font-ttf;charset=binary;base64,"+e.convertUTF8ArrayToBase64(b)+') format("truetype"); }';try{a.insertRule(k,a.cssRules.length)}catch(r){runtime.log("Problem inserting rule in CSS: "+runtime.toJson(r)+"\nRule: "+k)}}h(m,l, [...]
++d&&d()}var m=new xmldom.XPath,e=new core.Base64;odf.FontLoader=function(){this.loadFonts=function(e,l){for(var q=e.rootElement.fontFaceDecls;l.cssRules.length;)l.deleteRule(l.cssRules.length-1);if(q){var a={},d,f,b,k;if(q)for(q=m.getODFElementsWithXPath(q,"style:font-face[svg:font-face-src]",odf.Namespaces.resolvePrefix),d=0;d<q.length;d+=1)f=q[d],b=f.getAttributeNS(odf.Namespaces.stylens,"name"),k=f.getAttributeNS(odf.Namespaces.svgns,"font-family"),f=m.getODFElementsWithXPath(f,"svg:f [...]
++odf.Namespaces.resolvePrefix),0<f.length&&(f=f[0].getAttributeNS(odf.Namespaces.xlinkns,"href"),a[b]={href:f,family:k});h(a,e,0,l)}}};return odf.FontLoader}();
 +// Input 36
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");runtime.loadClass("core.Utils");
- odf.ObjectNameGenerator=function(e,h){function f(a,b){var d={};this.generateName=function(){var c=b(),e=0,f;do f=a+e,e+=1;while(d[f]||c[f]);d[f]=!0;return f}}function n(){var a,b={};[e.rootElement.automaticStyles,e.rootElement.styles].forEach(function(d){for(a=d.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&a.namespaceURI===m&&"style"===a.localName&&(b[a.getAttributeNS(m,"name")]=!0),a=a.nextSibling});return b}var m=odf.Namespaces.stylens,p=odf.Namespaces.drawns,c=odf.Namespaces.xlinkns [...]
- a=(new core.Utils).hashString(h),d=null,k=null,g=null,q={},l={};this.generateStyleName=function(){null===d&&(d=new f("auto"+a+"_",function(){return n()}));return d.generateName()};this.generateFrameName=function(){null===k&&(b.getElementsByTagNameNS(e.rootElement.body,p,"frame").forEach(function(a){q[a.getAttributeNS(p,"name")]=!0}),k=new f("fr"+a+"_",function(){return q}));return k.generateName()};this.generateImageName=function(){null===g&&(b.getElementsByTagNameNS(e.rootElement.body, [...]
- a.getAttributeNS(c,"href");a=a.substring(9,a.lastIndexOf("."));l[a]=!0}),g=new f("img"+a+"_",function(){return l}));return g.generateName()}};
++odf.ObjectNameGenerator=function(h,m){function e(a,c){var b={};this.generateName=function(){var d=c(),g=0,f;do f=a+g,g+=1;while(b[f]||d[f]);b[f]=!0;return f}}function p(){var a,c={};[h.rootElement.automaticStyles,h.rootElement.styles].forEach(function(b){for(a=b.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&a.namespaceURI===l&&"style"===a.localName&&(c[a.getAttributeNS(l,"name")]=!0),a=a.nextSibling});return c}var l=odf.Namespaces.stylens,q=odf.Namespaces.drawns,a=odf.Namespaces.xlinkns [...]
++f=(new core.Utils).hashString(m),b=null,k=null,c=null,g={},n={};this.generateStyleName=function(){null===b&&(b=new e("auto"+f+"_",function(){return p()}));return b.generateName()};this.generateFrameName=function(){null===k&&(d.getElementsByTagNameNS(h.rootElement.body,q,"frame").forEach(function(a){g[a.getAttributeNS(q,"name")]=!0}),k=new e("fr"+f+"_",function(){return g}));return k.generateName()};this.generateImageName=function(){null===c&&(d.getElementsByTagNameNS(h.rootElement.body, [...]
++c.getAttributeNS(a,"href");c=c.substring(9,c.lastIndexOf("."));n[c]=!0}),c=new e("img"+f+"_",function(){return n}));return c.generateName()}};
 +// Input 37
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Utils");runtime.loadClass("odf.ObjectNameGenerator");runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfContainer");runtime.loadClass("odf.StyleInfo");runtime.loadClass("odf.OdfUtils");runtime.loadClass("odf.TextStyleApplicator");
- odf.Formatting=function(){function e(){for(var a=k.rootElement.fontFaceDecls,b={},d,c,a=a&&a.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&(d=a.getAttributeNS(l,"name"))&&((c=a.getAttributeNS(q,"font-family"))||a.getElementsByTagNameNS(q,"font-face-uri")[0])&&(b[d]=c),a=a.nextSibling;return b}function h(a){for(var b=k.rootElement.styles.firstChild;b;){if(b.nodeType===Node.ELEMENT_NODE&&b.namespaceURI===l&&"default-style"===b.localName&&b.getAttributeNS(l,"family")===a)return b;b=b.nextS [...]
- function f(a,b,d){var c,e;d=d||[k.rootElement.automaticStyles,k.rootElement.styles];for(c=d.shift();c;){for(c=c.firstChild;c;){if(c.nodeType===Node.ELEMENT_NODE&&(e=c.getAttributeNS(l,"name"),c.namespaceURI===l&&"style"===c.localName&&c.getAttributeNS(l,"family")===b&&e===a||"list-style"===b&&c.namespaceURI===r&&"list-style"===c.localName&&e===a||"data"===b&&c.namespaceURI===t&&e===a))return c;c=c.nextSibling}c=d.shift()}return null}function n(a){for(var b,d={},c=a.firstChild;c;){if(c.n [...]
- Node.ELEMENT_NODE&&c.namespaceURI===l)for(d[c.nodeName]={},b=0;b<c.attributes.length;b+=1)d[c.nodeName][c.attributes[b].name]=c.attributes[b].value;c=c.nextSibling}for(b=0;b<a.attributes.length;b+=1)d[a.attributes[b].name]=a.attributes[b].value;return d}function m(a,b){Object.keys(b).forEach(function(d){var c=d.split(":"),e=c[1],f=odf.Namespaces.resolvePrefix(c[0]),c=b[d];"object"===typeof c&&Object.keys(c).length?(d=a.getElementsByTagNameNS(f,e)[0]||a.ownerDocument.createElementNS(f,d) [...]
- m(d,c)):f&&a.setAttributeNS(f,d,c)})}function p(a,b){for(var d=k.rootElement.styles,c,e={},g=a.getAttributeNS(l,"family"),m=a;m;)c=n(m),e=x.mergeObjects(c,e),m=(c=m.getAttributeNS(l,"parent-style-name"))?f(c,g,[d]):null;if(m=h(g))c=n(m),e=x.mergeObjects(c,e);b&&(c=(d=u[g])?x.mergeObjects({},d):null)&&(e=x.mergeObjects(c,e));return e}function c(a,b){for(var d=a.nodeType===Node.TEXT_NODE?a.parentNode:a,c,e=[],f="",k=!1;d;)!k&&v.isGroupingElement(d)&&(k=!0),(c=g.determineStylesForNode(d))& [...]
- d=d.parentNode;k&&(e.forEach(function(a){Object.keys(a).forEach(function(b){Object.keys(a[b]).forEach(function(a){f+="|"+b+":"+a+"|"})})}),b&&(b[f]=e));return k?e:void 0}function b(a){var b={orderedStyles:[]};a.forEach(function(a){Object.keys(a).forEach(function(d){var c=Object.keys(a[d])[0],e,g;(e=f(c,d))?(g=p(e),b=x.mergeObjects(g,b),g=e.getAttributeNS(l,"display-name")):runtime.log("No style element found for '"+c+"' of family '"+d+"'");b.orderedStyles.push({name:c,family:d,displayNa [...]
- return b}function a(a,b){var d=v.parseLength(a),c=b;if(d)switch(d.unit){case "cm":c=d.value;break;case "mm":c=0.1*d.value;break;case "in":c=2.54*d.value;break;case "pt":c=0.035277778*d.value;break;case "pc":case "px":case "em":break;default:runtime.log("Unit identifier: "+d.unit+" is not supported.")}return c}var d=this,k,g=new odf.StyleInfo,q=odf.Namespaces.svgns,l=odf.Namespaces.stylens,r=odf.Namespaces.textns,t=odf.Namespaces.numberns,w=odf.Namespaces.fons,v=new odf.OdfUtils,y=new co [...]
- x=new core.Utils,u={paragraph:{"style:paragraph-properties":{"fo:text-align":"left"}}};this.setOdfContainer=function(a){k=a};this.getFontMap=e;this.getAvailableParagraphStyles=function(){for(var a=k.rootElement.styles&&k.rootElement.styles.firstChild,b,d,c=[];a;)a.nodeType===Node.ELEMENT_NODE&&"style"===a.localName&&a.namespaceURI===l&&(d=a,b=d.getAttributeNS(l,"family"),"paragraph"===b&&(b=d.getAttributeNS(l,"name"),d=d.getAttributeNS(l,"display-name")||b,b&&d&&c.push({name:b,displayNa [...]
- a.nextSibling;return c};this.isStyleUsed=function(a){var b;b=g.hasDerivedStyles(k.rootElement,odf.Namespaces.resolvePrefix,a);a=(new g.UsedStyleList(k.rootElement.styles)).uses(a)||(new g.UsedStyleList(k.rootElement.automaticStyles)).uses(a)||(new g.UsedStyleList(k.rootElement.body)).uses(a);return b||a};this.getDefaultStyleElement=h;this.getStyleElement=f;this.getStyleAttributes=n;this.getInheritedStyleAttributes=p;this.getFirstCommonParentStyleNameOrSelf=function(a){var b=k.rootElemen [...]
- d=k.rootElement.styles,c;for(c=f(a,"paragraph",[b]);c;)a=c.getAttributeNS(l,"parent-style-name"),c=f(a,"paragraph",[b]);return(c=f(a,"paragraph",[d]))?a:null};this.hasParagraphStyle=function(a){return Boolean(f(a,"paragraph"))};this.getAppliedStyles=function(a){var d={},e=[];a.forEach(function(a){c(a,d)});Object.keys(d).forEach(function(a){e.push(b(d[a]))});return e};this.getAppliedStylesForElement=function(a){return(a=c(a))?b(a):void 0};this.applyStyle=function(a,b,c,e){(new odf.TextSt [...]
- a),d,k.rootElement.automaticStyles)).applyStyle(b,c,e)};this.updateStyle=function(a,b){var d,c;m(a,b);(d=b["style:text-properties"]&&b["style:text-properties"]["style:font-name"])&&!e().hasOwnProperty(d)&&(c=a.ownerDocument.createElementNS(l,"style:font-face"),c.setAttributeNS(l,"style:name",d),c.setAttributeNS(q,"svg:font-family",d),k.rootElement.fontFaceDecls.appendChild(c))};this.createDerivedStyleObject=function(a,b,d){var c=f(a,b);runtime.assert(Boolean(c),"No style element found f [...]
- b+"'");a=c.parentNode===k.rootElement.automaticStyles?n(c):{"style:parent-style-name":a};a["style:family"]=b;x.mergeObjects(a,d);return a};this.getDefaultTabStopDistance=function(){var a=h("paragraph");(a=(a=a&&a.getAttributeNS(l,"paragraph-properties"))&&a.getAttributeNS(l,"tab-stop-distance"))||(a="1.25cm");return v.parseNonNegativeLength(a)};this.getContentSize=function(b,d){var c,e,g,h,m,n,p,t,q,r,u,v;a:{c=f(b,d);var x,U,O;runtime.assert("paragraph"===d||"table"===d,"styleFamily has [...]
- if(c){x=c.getAttributeNS(l,"master-page-name")||"Standard";for(c=k.rootElement.masterStyles.lastChild;c&&c.previousSibling&&c.getAttributeNS(l,"name")!==x;)c=c.previousSibling;x=c.getAttributeNS(l,"page-layout-name");U=y.getElementsByTagNameNS(k.rootElement.automaticStyles,l,"page-layout");for(O=0;O<U.length;O+=1)if(c=U[O],c.getAttributeNS(l,"name")===x)break a}c=null}c||(c=k.rootElement.styles.getElementsByTagNameNS(l,"default-page-layout")[0]);c&&(e=c.getElementsByTagNameNS(l,"page-la [...]
- e&&(g=e.getAttributeNS(l,"print-orientation")||"portrait","portrait"===g?(g=21.001,h=29.7):(g=29.7,h=21.001),g=a(e.getAttributeNS(w,"page-width"),g),h=a(e.getAttributeNS(w,"page-height"),h),m=a(e.getAttributeNS(w,"margin"),null),null===m?(m=a(e.getAttributeNS(w,"margin-left"),2),n=a(e.getAttributeNS(w,"margin-right"),2),p=a(e.getAttributeNS(w,"margin-top"),2),t=a(e.getAttributeNS(w,"margin-bottom"),2)):m=n=p=t=m,q=a(e.getAttributeNS(w,"padding"),null),null===q?(q=a(e.getAttributeNS(w,"p [...]
- 0),r=a(e.getAttributeNS(w,"padding-right"),0),u=a(e.getAttributeNS(w,"padding-top"),0),v=a(e.getAttributeNS(w,"padding-bottom"),0)):q=r=u=v=q);return{width:g-m-n-q-r,height:h-p-t-u-v}}};
++odf.Formatting=function(){function h(){for(var a=k.rootElement.fontFaceDecls,c={},b,d,a=a&&a.firstChild;a;)a.nodeType===Node.ELEMENT_NODE&&(b=a.getAttributeNS(n,"name"))&&((d=a.getAttributeNS(g,"font-family"))||a.getElementsByTagNameNS(g,"font-face-uri")[0])&&(c[b]=d),a=a.nextSibling;return c}function m(a){for(var c=k.rootElement.styles.firstChild;c;){if(c.nodeType===Node.ELEMENT_NODE&&c.namespaceURI===n&&"default-style"===c.localName&&c.getAttributeNS(n,"family")===a)return c;c=c.nextS [...]
++function e(a,c,b){var d,g;b=b||[k.rootElement.automaticStyles,k.rootElement.styles];for(d=b.shift();d;){for(d=d.firstChild;d;){if(d.nodeType===Node.ELEMENT_NODE&&(g=d.getAttributeNS(n,"name"),d.namespaceURI===n&&"style"===d.localName&&d.getAttributeNS(n,"family")===c&&g===a||"list-style"===c&&d.namespaceURI===r&&"list-style"===d.localName&&g===a||"data"===c&&d.namespaceURI===u&&g===a))return d;d=d.nextSibling}d=b.shift()}return null}function p(a){for(var c,b={},d=a.firstChild;d;){if(d.n [...]
++Node.ELEMENT_NODE&&d.namespaceURI===n)for(b[d.nodeName]={},c=0;c<d.attributes.length;c+=1)b[d.nodeName][d.attributes[c].name]=d.attributes[c].value;d=d.nextSibling}for(c=0;c<a.attributes.length;c+=1)b[a.attributes[c].name]=a.attributes[c].value;return b}function l(a,c){Object.keys(c).forEach(function(b){var d=b.split(":"),g=d[1],f=odf.Namespaces.resolvePrefix(d[0]),d=c[b];"object"===typeof d&&Object.keys(d).length?(b=a.getElementsByTagNameNS(f,g)[0]||a.ownerDocument.createElementNS(f,b) [...]
++l(b,d)):f&&a.setAttributeNS(f,b,d)})}function q(a,c){for(var b=k.rootElement.styles,d,g={},f=a.getAttributeNS(n,"family"),h=a;h;)d=p(h),g=v.mergeObjects(d,g),h=(d=h.getAttributeNS(n,"parent-style-name"))?e(d,f,[b]):null;if(h=m(f))d=p(h),g=v.mergeObjects(d,g);c&&(d=(b=t[f])?v.mergeObjects({},b):null)&&(g=v.mergeObjects(d,g));return g}function a(a,b){for(var d=a.nodeType===Node.TEXT_NODE?a.parentNode:a,g,f=[],e="",k=!1;d;)!k&&x.isGroupingElement(d)&&(k=!0),(g=c.determineStylesForNode(d))& [...]
++d=d.parentNode;k&&(f.forEach(function(a){Object.keys(a).forEach(function(c){Object.keys(a[c]).forEach(function(a){e+="|"+c+":"+a+"|"})})}),b&&(b[e]=f));return k?f:void 0}function d(a){var c={orderedStyles:[]};a.forEach(function(a){Object.keys(a).forEach(function(b){var d=Object.keys(a[b])[0],g,f;(g=e(d,b))?(f=q(g),c=v.mergeObjects(f,c),f=g.getAttributeNS(n,"display-name")):runtime.log("No style element found for '"+d+"' of family '"+b+"'");c.orderedStyles.push({name:d,family:b,displayNa [...]
++return c}function f(a,c){var b=x.parseLength(a),d=c;if(b)switch(b.unit){case "cm":d=b.value;break;case "mm":d=0.1*b.value;break;case "in":d=2.54*b.value;break;case "pt":d=0.035277778*b.value;break;case "pc":case "px":case "em":break;default:runtime.log("Unit identifier: "+b.unit+" is not supported.")}return d}var b=this,k,c=new odf.StyleInfo,g=odf.Namespaces.svgns,n=odf.Namespaces.stylens,r=odf.Namespaces.textns,u=odf.Namespaces.numberns,y=odf.Namespaces.fons,x=new odf.OdfUtils,w=new co [...]
++v=new core.Utils,t={paragraph:{"style:paragraph-properties":{"fo:text-align":"left"}}};this.setOdfContainer=function(a){k=a};this.getFontMap=h;this.getAvailableParagraphStyles=function(){for(var a=k.rootElement.styles&&k.rootElement.styles.firstChild,c,b,d=[];a;)a.nodeType===Node.ELEMENT_NODE&&"style"===a.localName&&a.namespaceURI===n&&(b=a,c=b.getAttributeNS(n,"family"),"paragraph"===c&&(c=b.getAttributeNS(n,"name"),b=b.getAttributeNS(n,"display-name")||c,c&&b&&d.push({name:c,displayNa [...]
++a.nextSibling;return d};this.isStyleUsed=function(a){var b;b=c.hasDerivedStyles(k.rootElement,odf.Namespaces.resolvePrefix,a);a=(new c.UsedStyleList(k.rootElement.styles)).uses(a)||(new c.UsedStyleList(k.rootElement.automaticStyles)).uses(a)||(new c.UsedStyleList(k.rootElement.body)).uses(a);return b||a};this.getDefaultStyleElement=m;this.getStyleElement=e;this.getStyleAttributes=p;this.getInheritedStyleAttributes=q;this.getFirstCommonParentStyleNameOrSelf=function(a){var c=k.rootElemen [...]
++b=k.rootElement.styles,d;for(d=e(a,"paragraph",[c]);d;)a=d.getAttributeNS(n,"parent-style-name"),d=e(a,"paragraph",[c]);return(d=e(a,"paragraph",[b]))?a:null};this.hasParagraphStyle=function(a){return Boolean(e(a,"paragraph"))};this.getAppliedStyles=function(c){var b={},g=[];c.forEach(function(c){a(c,b)});Object.keys(b).forEach(function(a){g.push(d(b[a]))});return g};this.getAppliedStylesForElement=function(c){return(c=a(c))?d(c):void 0};this.applyStyle=function(a,c,d,g){(new odf.TextSt [...]
++a),b,k.rootElement.automaticStyles)).applyStyle(c,d,g)};this.updateStyle=function(a,c){var b,d;l(a,c);(b=c["style:text-properties"]&&c["style:text-properties"]["style:font-name"])&&!h().hasOwnProperty(b)&&(d=a.ownerDocument.createElementNS(n,"style:font-face"),d.setAttributeNS(n,"style:name",b),d.setAttributeNS(g,"svg:font-family",b),k.rootElement.fontFaceDecls.appendChild(d))};this.createDerivedStyleObject=function(a,c,b){var d=e(a,c);runtime.assert(Boolean(d),"No style element found f [...]
++c+"'");a=d.parentNode===k.rootElement.automaticStyles?p(d):{"style:parent-style-name":a};a["style:family"]=c;v.mergeObjects(a,b);return a};this.getDefaultTabStopDistance=function(){var a=m("paragraph");(a=(a=a&&a.getAttributeNS(n,"paragraph-properties"))&&a.getAttributeNS(n,"tab-stop-distance"))||(a="1.25cm");return x.parseNonNegativeLength(a)};this.getContentSize=function(a,c){var b,d,g,h,l,m,p,q,r,x,u,t;a:{b=e(a,c);var v,S,Y;runtime.assert("paragraph"===c||"table"===c,"styleFamily has [...]
++if(b){v=b.getAttributeNS(n,"master-page-name")||"Standard";for(b=k.rootElement.masterStyles.lastChild;b&&b.previousSibling&&b.getAttributeNS(n,"name")!==v;)b=b.previousSibling;v=b.getAttributeNS(n,"page-layout-name");S=w.getElementsByTagNameNS(k.rootElement.automaticStyles,n,"page-layout");for(Y=0;Y<S.length;Y+=1)if(b=S[Y],b.getAttributeNS(n,"name")===v)break a}b=null}b||(b=k.rootElement.styles.getElementsByTagNameNS(n,"default-page-layout")[0]);b&&(d=b.getElementsByTagNameNS(n,"page-la [...]
++d&&(g=d.getAttributeNS(n,"print-orientation")||"portrait","portrait"===g?(g=21.001,h=29.7):(g=29.7,h=21.001),g=f(d.getAttributeNS(y,"page-width"),g),h=f(d.getAttributeNS(y,"page-height"),h),l=f(d.getAttributeNS(y,"margin"),null),null===l?(l=f(d.getAttributeNS(y,"margin-left"),2),m=f(d.getAttributeNS(y,"margin-right"),2),p=f(d.getAttributeNS(y,"margin-top"),2),q=f(d.getAttributeNS(y,"margin-bottom"),2)):l=m=p=q=l,r=f(d.getAttributeNS(y,"padding"),null),null===r?(r=f(d.getAttributeNS(y,"p [...]
++0),x=f(d.getAttributeNS(y,"padding-right"),0),u=f(d.getAttributeNS(y,"padding-top"),0),t=f(d.getAttributeNS(y,"padding-bottom"),0)):r=x=u=t=r);return{width:g-l-m-r-x,height:h-p-q-u-t}}};
 +// Input 38
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfContainer");runtime.loadClass("odf.Formatting");runtime.loadClass("xmldom.XPath");runtime.loadClass("odf.FontLoader");runtime.loadClass("odf.Style2CSS");runtime.loadClass("odf.OdfUtils");runtime.loadClass("gui.AnnotationViewManager");
- odf.OdfCanvas=function(){function e(){function a(c){d=!0;runtime.setTimeout(function(){try{c()}catch(e){runtime.log(e)}d=!1;0<b.length&&a(b.pop())},10)}var b=[],d=!1;this.clearQueue=function(){b.length=0};this.addToQueue=function(c){if(0===b.length&&!d)return a(c);b.push(c)}}function h(a){function b(){for(;0<d.cssRules.length;)d.deleteRule(0);d.insertRule("#shadowContent draw|page {display:none;}",0);d.insertRule("office|presentation draw|page {display:none;}",1);d.insertRule("#shadowCo [...]
- c+") {display:block;}",2);d.insertRule("office|presentation draw|page:nth-of-type("+c+") {display:block;}",3)}var d=a.sheet,c=1;this.showFirstPage=function(){c=1;b()};this.showNextPage=function(){c+=1;b()};this.showPreviousPage=function(){1<c&&(c-=1,b())};this.showPage=function(a){0<a&&(c=a,b())};this.css=a;this.destroy=function(b){a.parentNode.removeChild(a);b()}}function f(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent?a.attachEvent("on"+b,d):a["on"+b]=d}function n [...]
- "on"+b;a.removeEventListener?a.removeEventListener(b,d,!1):a.detachEvent?a.detachEvent(c,d):a[c]===d&&(a[c]=null)}function m(a){function b(a,d){for(;d;){if(d===a)return!0;d=d.parentNode}return!1}function d(){var f=[],g=runtime.getWindow().getSelection(),k,h;for(k=0;k<g.rangeCount;k+=1)h=g.getRangeAt(k),null!==h&&b(a,h.startContainer)&&b(a,h.endContainer)&&f.push(h);if(f.length===c.length){for(g=0;g<f.length&&(k=f[g],h=c[g],k=k===h?!1:null===k||null===h?!0:k.startContainer!==h.startConta [...]
- h.startOffset||k.endContainer!==h.endContainer||k.endOffset!==h.endOffset,!k);g+=1);if(g===f.length)return}c=f;var g=[f.length],l,m=a.ownerDocument;for(k=0;k<f.length;k+=1)h=f[k],l=m.createRange(),l.setStart(h.startContainer,h.startOffset),l.setEnd(h.endContainer,h.endOffset),g[k]=l;c=g;g=e.length;for(f=0;f<g;f+=1)e[f](a,c)}var c=[],e=[];this.addListener=function(a,b){var d,c=e.length;for(d=0;d<c;d+=1)if(e[d]===b)return;e.push(b)};this.destroy=function(b){n(a,"mouseup",d);n(a,"keyup",d) [...]
- d);b()};f(a,"mouseup",d);f(a,"keyup",d);f(a,"keydown",d)}function p(a){for(;a.firstChild;)a.removeChild(a.firstChild)}function c(a,b,d){(new odf.Style2CSS).style2css(a.getDocumentType(),d.sheet,b.getFontMap(),a.rootElement.styles,a.rootElement.automaticStyles)}function b(a,b,d){var c=null;a=a.rootElement.body.getElementsByTagNameNS(G,d+"-decl");if((d=b.getAttributeNS(G,"use-"+d+"-name"))&&0<a.length)for(b=0;b<a.length;b+=1)if(a[b].getAttributeNS(G,"name")===d){c=a[b].textContent;break}r [...]
- b,d,c){var e=a.ownerDocument;b=a.getElementsByTagNameNS(b,d);for(a=0;a<b.length;a+=1)p(b[a]),c&&b[a].appendChild(e.createTextNode(c))}function d(a,b,d){b.setAttributeNS("urn:webodf:names:helper","styleid",a);var c,e=b.getAttributeNS(I,"anchor-type"),f=b.getAttributeNS(B,"x"),g=b.getAttributeNS(B,"y"),k=b.getAttributeNS(B,"width"),h=b.getAttributeNS(B,"height"),l=b.getAttributeNS(u,"min-height"),m=b.getAttributeNS(u,"min-width");if("as-char"===e)c="display: inline-block;";else if(e||f||g [...]
- else if(k||h||l||m)c="display: block;";f&&(c+="left: "+f+";");g&&(c+="top: "+g+";");k&&(c+="width: "+k+";");h&&(c+="height: "+h+";");l&&(c+="min-height: "+l+";");m&&(c+="min-width: "+m+";");c&&(c="draw|"+b.localName+'[webodfhelper|styleid="'+a+'"] {'+c+"}",d.insertRule(c,d.cssRules.length))}function k(a){for(a=a.firstChild;a;){if(a.namespaceURI===s&&"binary-data"===a.localName)return"data:image/png;base64,"+a.textContent.replace(/[\r\n\s]/g,"");a=a.nextSibling}return""}function g(a,b,d, [...]
- (b='draw|image[webodfhelper|styleid="'+a+'"] {'+("background-image: url("+b+");")+"}",c.insertRule(b,c.cssRules.length))}d.setAttributeNS("urn:webodf:names:helper","styleid",a);var f=d.getAttributeNS(z,"href"),g;if(f)try{g=b.getPart(f),g.onchange=function(a){e(a.url)},g.load()}catch(h){runtime.log("slight problem: "+h)}else f=k(d),e(f)}function q(a){function b(d){var c,e;d.hasAttributeNS(z,"href")&&(c=d.getAttributeNS(z,"href"),"#"===c[0]?(c=c.substring(1),e=function(){var b=Z.getODFEle [...]
- "//text:bookmark-start[@text:name='"+c+"']",odf.Namespaces.resolvePrefix);0===b.length&&(b=Z.getODFElementsWithXPath(a,"//text:bookmark[@text:name='"+c+"']",odf.Namespaces.resolvePrefix));0<b.length&&b[0].scrollIntoView(!0);return!1}):e=function(){R.open(c)},d.onclick=e)}var d,c,e;c=a.getElementsByTagNameNS(I,"a");for(d=0;d<c.length;d+=1)e=c.item(d),b(e)}function l(a){var b=a.ownerDocument;T.getElementsByTagNameNS(a,I,"line-break").forEach(function(a){a.hasChildNodes()||a.appendChild(b. [...]
- function r(a){var b=a.ownerDocument;T.getElementsByTagNameNS(a,I,"s").forEach(function(a){for(var d,c;a.firstChild;)a.removeChild(a.firstChild);a.appendChild(b.createTextNode(" "));c=parseInt(a.getAttributeNS(I,"c"),10);if(1<c)for(a.removeAttributeNS(I,"c"),d=1;d<c;d+=1)a.parentNode.insertBefore(a.cloneNode(!0),a)})}function t(a){T.getElementsByTagNameNS(a,I,"tab").forEach(function(a){a.textContent="\t"})}function w(a,b){function d(a,f){var k=g.documentElement.namespaceURI;"video/"===f. [...]
- (c=g.createElementNS(k,"video"),c.setAttribute("controls","controls"),e=g.createElementNS(k,"source"),e.setAttribute("src",a),e.setAttribute("type",f),c.appendChild(e),b.parentNode.appendChild(c)):b.innerHtml="Unrecognised Plugin"}var c,e,f,g=b.ownerDocument,h;if(f=b.getAttributeNS(z,"href"))try{h=a.getPart(f),h.onchange=function(a){d(a.url,a.mimetype)},h.load()}catch(l){runtime.log("slight problem: "+l)}else runtime.log("using MP4 data fallback"),f=k(b),d(f,"video/mp4")}function v(a){v [...]
- d;"undefined"!==String(typeof webodf_css)?(d=a.createElementNS(b.namespaceURI,"style"),d.setAttribute("media","screen, print, handheld, projection"),d.appendChild(a.createTextNode(webodf_css))):(d=a.createElementNS(b.namespaceURI,"link"),a="webodf.css",runtime.currentDirectory&&(a=runtime.currentDirectory()+"/../"+a),d.setAttribute("href",a),d.setAttribute("rel","stylesheet"));d.setAttribute("type","text/css");b.appendChild(d);return d}function y(a){var b=a.getElementsByTagName("head")[ [...]
- "style"),c="";d.setAttribute("type","text/css");d.setAttribute("media","screen, print, handheld, projection");odf.Namespaces.forEachPrefix(function(a,b){c+="@namespace "+a+" url("+b+");\n"});c+="@namespace webodfhelper url(urn:webodf:names:helper);\n";d.appendChild(a.createTextNode(c));b.appendChild(d);return d}var x=odf.Namespaces.drawns,u=odf.Namespaces.fons,s=odf.Namespaces.officens,C=odf.Namespaces.stylens,B=odf.Namespaces.svgns,A=odf.Namespaces.tablens,I=odf.Namespaces.textns,z=odf [...]
- N=odf.Namespaces.xmlns,G=odf.Namespaces.presentationns,R=runtime.getWindow(),Z=new xmldom.XPath,ka=new odf.OdfUtils,T=new core.DomUtils;odf.OdfCanvas=function(k){function n(a,b,d){function c(a,b,d,e){la.addToQueue(function(){g(a,b,d,e)})}var e,f;e=b.getElementsByTagNameNS(x,"image");for(b=0;b<e.length;b+=1)f=e.item(b),c("image"+String(b),a,f,d)}function u(a,b){function d(a,b){la.addToQueue(function(){w(a,b)})}var c,e,f;e=b.getElementsByTagNameNS(x,"plugin");for(c=0;c<e.length;c+=1)f=e.i [...]
- f)}function B(){V.firstChild&&(1<Y?(V.style.MozTransformOrigin="center top",V.style.WebkitTransformOrigin="center top",V.style.OTransformOrigin="center top",V.style.msTransformOrigin="center top"):(V.style.MozTransformOrigin="left top",V.style.WebkitTransformOrigin="left top",V.style.OTransformOrigin="left top",V.style.msTransformOrigin="left top"),V.style.WebkitTransform="scale("+Y+")",V.style.MozTransform="scale("+Y+")",V.style.OTransform="scale("+Y+")",V.style.msTransform="scale("+Y+ [...]
- Math.round(Y*V.offsetWidth)+"px",k.style.height=Math.round(Y*V.offsetHeight)+"px")}function z(a){function b(a){return c===a.getAttributeNS(s,"name")}var d=T.getElementsByTagNameNS(a,s,"annotation");a=T.getElementsByTagNameNS(a,s,"annotation-end");var c,e;for(e=0;e<d.length;e+=1)c=d[e].getAttributeNS(s,"name"),ea.addAnnotation({node:d[e],end:a.filter(b)[0]||null});ea.rerenderAnnotations()}function W(a){J?(Q.parentNode||(V.appendChild(Q),B()),ea&&ea.forgetAnnotations(),ea=new gui.Annotati [...]
- a.body,Q),z(a.body)):Q.parentNode&&(V.removeChild(Q),ea.forgetAnnotations(),B())}function E(e){function f(){p(k);k.style.display="inline-block";var g=P.rootElement;k.ownerDocument.importNode(g,!0);aa.setOdfContainer(P);var h=P,m=D;(new odf.FontLoader).loadFonts(h,m.sheet);c(P,aa,fa);m=P;h=F.sheet;p(k);V=S.createElementNS(k.namespaceURI,"div");V.style.display="inline-block";V.style.background="white";V.appendChild(g);k.appendChild(V);Q=S.createElementNS(k.namespaceURI,"div");Q.id="annota [...]
- ia=S.createElementNS(k.namespaceURI,"div");ia.id="shadowContent";ia.style.position="absolute";ia.style.top=0;ia.style.left=0;m.getContentElement().appendChild(ia);var w=g.body,v,y,z;y=[];for(v=w.firstChild;v&&v!==w;)if(v.namespaceURI===x&&(y[y.length]=v),v.firstChild)v=v.firstChild;else{for(;v&&v!==w&&!v.nextSibling;)v=v.parentNode;v&&v.nextSibling&&(v=v.nextSibling)}for(z=0;z<y.length;z+=1)v=y[z],d("frame"+String(z),v,h);y=Z.getODFElementsWithXPath(w,".//*[*[@text:anchor-type='paragrap [...]
- for(v=0;v<y.length;v+=1)w=y[v],w.setAttributeNS&&w.setAttributeNS("urn:webodf:names:helper","containsparagraphanchor",!0);var w=ia,T,E,K;K=0;var H,J;y=m.rootElement.ownerDocument;if((v=g.body.firstElementChild)&&v.namespaceURI===s&&("presentation"===v.localName||"drawing"===v.localName))for(v=v.firstElementChild;v;){z=v.getAttributeNS(x,"master-page-name");if(z){T=m.rootElement.masterStyles.getElementsByTagNameNS(C,"master-page");E=null;K=void 0;for(K=0;K<T.length;K+=1)if(T[K].getAttrib [...]
- z){E=T[K];break}z=E}else z=null;if(z){T=v.getAttributeNS("urn:webodf:names:helper","styleid");E=y.createElementNS(x,"draw:page");J=z.firstElementChild;for(H=0;J;)"true"!==J.getAttributeNS(G,"placeholder")&&(K=J.cloneNode(!0),E.appendChild(K),d(T+"_"+H,K,h)),J=J.nextElementSibling,H+=1;J=H=K=void 0;var M=E.getElementsByTagNameNS(x,"frame");for(K=0;K<M.length;K+=1)H=M[K],(J=H.getAttributeNS(G,"class"))&&!/^(date-time|footer|header|page-number')$/.test(J)&&H.parentNode.removeChild(H);w.app [...]
- K=String(w.getElementsByTagNameNS(x,"page").length);a(E,I,"page-number",K);a(E,G,"header",b(m,v,"header"));a(E,G,"footer",b(m,v,"footer"));d(T,E,h);E.setAttributeNS(x,"draw:master-page-name",z.getAttributeNS(C,"name"))}v=v.nextElementSibling}v=g.body.getElementsByTagNameNS(A,"table-cell");for(w=0;w<v.length;w+=1)y=v.item(w),y.hasAttributeNS(A,"number-columns-spanned")&&y.setAttribute("colspan",y.getAttributeNS(A,"number-columns-spanned")),y.hasAttributeNS(A,"number-rows-spanned")&&y.set [...]
- y.getAttributeNS(A,"number-rows-spanned"));q(g.body);l(g.body);r(g.body);t(g.body);n(m,g.body,h);u(m,g.body);y=g.body;w={};v={};var O;z=R.document.getElementsByTagNameNS(I,"list-style");for(m=0;m<z.length;m+=1)K=z.item(m),(H=K.getAttributeNS(C,"name"))&&(v[H]=K);y=y.getElementsByTagNameNS(I,"list");for(m=0;m<y.length;m+=1)if(K=y.item(m),z=K.getAttributeNS(N,"id")){T=K.getAttributeNS(I,"continue-list");K.setAttribute("id",z);E="text|list#"+z+" > text|list-item > *:first-child:before {";i [...]
- "style-name"))K=v[H],O=ka.getFirstNonWhitespaceChild(K),K=void 0,O&&("list-level-style-number"===O.localName?(K=O.getAttributeNS(C,"num-format"),H=O.getAttributeNS(C,"num-suffix"),J="",J={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},M=void 0,M=O.getAttributeNS(C,"num-prefix")||"",M=J.hasOwnProperty(K)?M+(" counter(list, "+J[K]+")"):K?M+("'"+K+"';"):M+" ''",H&&(M+=" '"+H+"'"),K=J="content: "+M+";"):"list-level-style-image"===O.localName?K="content: none;": [...]
- O.localName&&(K="content: '"+O.getAttributeNS(I,"bullet-char")+"';")),O=K;if(T){for(K=w[T];K;)T=K,K=w[T];E+="counter-increment:"+T+";";O?(O=O.replace("list",T),E+=O):E+="content:counter("+T+");"}else T="",O?(O=O.replace("list",z),E+=O):E+="content: counter("+z+");",E+="counter-increment:"+z+";",h.insertRule("text|list#"+z+" {counter-reset:"+z+"}",h.cssRules.length);E+="}";w[z]=T;E&&h.insertRule(E,h.cssRules.length)}V.insertBefore(ia,V.firstChild);B();W(g);if(!e&&(g=[P],ba.hasOwnProperty [...]
- ba.statereadychange,O=0;O<h.length;O+=1)h[O].apply(null,g)}P.state===odf.OdfContainer.DONE?f():(runtime.log("WARNING: refreshOdf called but ODF was not DONE."),runtime.setTimeout(function ma(){P.state===odf.OdfContainer.DONE?f():(runtime.log("will be back later..."),runtime.setTimeout(ma,500))},100))}function H(a){la.clearQueue();k.innerHTML=runtime.tr("Loading")+" "+a+"...";k.removeAttribute("style");P=new odf.OdfContainer(a,function(a){P=a;E(!1)})}runtime.assert(null!==k&&void 0!==k," [...]
- runtime.assert(null!==k.ownerDocument&&void 0!==k.ownerDocument,"odf.OdfCanvas constructor needs DOM");var M=this,S=k.ownerDocument,P,aa=new odf.Formatting,na=new m(k),da,V,Q,J=!1,ea,oa,D,fa,F,ia,Y=1,ba={},la=new e;this.refreshCSS=function(){c(P,aa,fa);B()};this.refreshSize=function(){B()};this.odfContainer=function(){return P};this.slidevisibilitycss=function(){return da.css};this.setOdfContainer=function(a,b){P=a;E(!0===b)};this.load=this.load=H;this.save=function(a){P.save(a)};this.a [...]
- function(a,b){switch(a){case "selectionchange":na.addListener(a,b);break;case "click":f(k,a,b);break;default:var d=ba[a];void 0===d&&(d=ba[a]=[]);b&&-1===d.indexOf(b)&&d.push(b)}};this.getFormatting=function(){return aa};this.getAnnotationManager=function(){return ea};this.refreshAnnotations=function(){W(P.rootElement)};this.rerenderAnnotations=function(){ea&&ea.rerenderAnnotations()};this.getSizer=function(){return V};this.enableAnnotations=function(a){a!==J&&(J=a,P&&W(P.rootElement))} [...]
- function(a){ea&&ea.addAnnotation(a)};this.forgetAnnotations=function(){ea&&ea.forgetAnnotations()};this.setZoomLevel=function(a){Y=a;B()};this.getZoomLevel=function(){return Y};this.fitToContainingElement=function(a,b){var d=k.offsetHeight/Y;Y=a/(k.offsetWidth/Y);b/d<Y&&(Y=b/d);B()};this.fitToWidth=function(a){Y=a/(k.offsetWidth/Y);B()};this.fitSmart=function(a,b){var d,c;d=k.offsetWidth/Y;c=k.offsetHeight/Y;d=a/d;void 0!==b&&b/c<d&&(d=b/c);Y=Math.min(1,d);B()};this.fitToHeight=function [...]
- Y);B()};this.showFirstPage=function(){da.showFirstPage()};this.showNextPage=function(){da.showNextPage()};this.showPreviousPage=function(){da.showPreviousPage()};this.showPage=function(a){da.showPage(a);B()};this.getElement=function(){return k};this.addCssForFrameWithImage=function(a){var b=a.getAttributeNS(x,"name");d(b,a,F.sheet);g(b+"img",P,a.firstChild,F.sheet)};this.destroy=function(a){var b=S.getElementsByTagName("head")[0];Q&&Q.parentNode&&Q.parentNode.removeChild(Q);V&&k.removeC [...]
- b.removeChild(D);b.removeChild(fa);b.removeChild(F);na.destroy(function(b){b?a(b):da.destroy(a)})};oa=v(S);da=new h(y(S));D=y(S);fa=y(S);F=y(S)};return odf.OdfCanvas}();
++odf.OdfCanvas=function(){function h(){function a(d){b=!0;runtime.setTimeout(function(){try{d()}catch(g){runtime.log(g)}b=!1;0<c.length&&a(c.pop())},10)}var c=[],b=!1;this.clearQueue=function(){c.length=0};this.addToQueue=function(d){if(0===c.length&&!b)return a(d);c.push(d)}}function m(a){function c(){for(;0<b.cssRules.length;)b.deleteRule(0);b.insertRule("#shadowContent draw|page {display:none;}",0);b.insertRule("office|presentation draw|page {display:none;}",1);b.insertRule("#shadowCo [...]
++d+") {display:block;}",2);b.insertRule("office|presentation draw|page:nth-of-type("+d+") {display:block;}",3)}var b=a.sheet,d=1;this.showFirstPage=function(){d=1;c()};this.showNextPage=function(){d+=1;c()};this.showPreviousPage=function(){1<d&&(d-=1,c())};this.showPage=function(a){0<a&&(d=a,c())};this.css=a;this.destroy=function(c){a.parentNode.removeChild(a);c()}}function e(a,c,b){a.addEventListener?a.addEventListener(c,b,!1):a.attachEvent?a.attachEvent("on"+c,b):a["on"+c]=b}function p [...]
++"on"+c;a.removeEventListener?a.removeEventListener(c,b,!1):a.detachEvent?a.detachEvent(d,b):a[d]===b&&(a[d]=null)}function l(a){function c(a,b){for(;b;){if(b===a)return!0;b=b.parentNode}return!1}function b(){var f=[],e=runtime.getWindow().getSelection(),k,h;for(k=0;k<e.rangeCount;k+=1)h=e.getRangeAt(k),null!==h&&c(a,h.startContainer)&&c(a,h.endContainer)&&f.push(h);if(f.length===d.length){for(e=0;e<f.length&&(k=f[e],h=d[e],k=k===h?!1:null===k||null===h?!0:k.startContainer!==h.startConta [...]
++h.startOffset||k.endContainer!==h.endContainer||k.endOffset!==h.endOffset,!k);e+=1);if(e===f.length)return}d=f;var e=[f.length],l,n=a.ownerDocument;for(k=0;k<f.length;k+=1)h=f[k],l=n.createRange(),l.setStart(h.startContainer,h.startOffset),l.setEnd(h.endContainer,h.endOffset),e[k]=l;d=e;e=g.length;for(f=0;f<e;f+=1)g[f](a,d)}var d=[],g=[];this.addListener=function(a,c){var b,d=g.length;for(b=0;b<d;b+=1)if(g[b]===c)return;g.push(c)};this.destroy=function(c){p(a,"mouseup",b);p(a,"keyup",b) [...]
++b);c()};e(a,"mouseup",b);e(a,"keyup",b);e(a,"keydown",b)}function q(a){for(;a.firstChild;)a.removeChild(a.firstChild)}function a(a,c,b){(new odf.Style2CSS).style2css(a.getDocumentType(),b.sheet,c.getFontMap(),a.rootElement.styles,a.rootElement.automaticStyles)}function d(a,c,b){var d=null;a=a.rootElement.body.getElementsByTagNameNS(H,b+"-decl");if((b=c.getAttributeNS(H,"use-"+b+"-name"))&&0<a.length)for(c=0;c<a.length;c+=1)if(a[c].getAttributeNS(H,"name")===b){d=a[c].textContent;break}r [...]
++c,b,d){var g=a.ownerDocument;c=a.getElementsByTagNameNS(c,b);for(a=0;a<c.length;a+=1)q(c[a]),d&&c[a].appendChild(g.createTextNode(d))}function b(a,c,b){c.setAttributeNS("urn:webodf:names:helper","styleid",a);var d,g=c.getAttributeNS(I,"anchor-type"),f=c.getAttributeNS(A,"x"),e=c.getAttributeNS(A,"y"),k=c.getAttributeNS(A,"width"),h=c.getAttributeNS(A,"height"),l=c.getAttributeNS(t,"min-height"),n=c.getAttributeNS(t,"min-width");if("as-char"===g)d="display: inline-block;";else if(g||f||e [...]
++else if(k||h||l||n)d="display: block;";f&&(d+="left: "+f+";");e&&(d+="top: "+e+";");k&&(d+="width: "+k+";");h&&(d+="height: "+h+";");l&&(d+="min-height: "+l+";");n&&(d+="min-width: "+n+";");d&&(d="draw|"+c.localName+'[webodfhelper|styleid="'+a+'"] {'+d+"}",b.insertRule(d,b.cssRules.length))}function k(a){for(a=a.firstChild;a;){if(a.namespaceURI===s&&"binary-data"===a.localName)return"data:image/png;base64,"+a.textContent.replace(/[\r\n\s]/g,"");a=a.nextSibling}return""}function c(a,c,b, [...]
++(c='draw|image[webodfhelper|styleid="'+a+'"] {'+("background-image: url("+c+");")+"}",d.insertRule(c,d.cssRules.length))}b.setAttributeNS("urn:webodf:names:helper","styleid",a);var f=b.getAttributeNS(z,"href"),e;if(f)try{e=c.getPart(f),e.onchange=function(a){g(a.url)},e.load()}catch(h){runtime.log("slight problem: "+h)}else f=k(b),g(f)}function g(a){function c(b){var d,g;b.hasAttributeNS(z,"href")&&(d=b.getAttributeNS(z,"href"),"#"===d[0]?(d=d.substring(1),g=function(){var c=Z.getODFEle [...]
++"//text:bookmark-start[@text:name='"+d+"']",odf.Namespaces.resolvePrefix);0===c.length&&(c=Z.getODFElementsWithXPath(a,"//text:bookmark[@text:name='"+d+"']",odf.Namespaces.resolvePrefix));0<c.length&&c[0].scrollIntoView(!0);return!1}):g=function(){R.open(d)},b.onclick=g)}var b,d,g;d=a.getElementsByTagNameNS(I,"a");for(b=0;b<d.length;b+=1)g=d.item(b),c(g)}function n(a){var c=a.ownerDocument;E.getElementsByTagNameNS(a,I,"line-break").forEach(function(a){a.hasChildNodes()||a.appendChild(c. [...]
++function r(a){var c=a.ownerDocument;E.getElementsByTagNameNS(a,I,"s").forEach(function(a){for(var b,d;a.firstChild;)a.removeChild(a.firstChild);a.appendChild(c.createTextNode(" "));d=parseInt(a.getAttributeNS(I,"c"),10);if(1<d)for(a.removeAttributeNS(I,"c"),b=1;b<d;b+=1)a.parentNode.insertBefore(a.cloneNode(!0),a)})}function u(a){E.getElementsByTagNameNS(a,I,"tab").forEach(function(a){a.textContent="\t"})}function y(a,c){function b(a,f){var k=e.documentElement.namespaceURI;"video/"===f. [...]
++(d=e.createElementNS(k,"video"),d.setAttribute("controls","controls"),g=e.createElementNS(k,"source"),g.setAttribute("src",a),g.setAttribute("type",f),d.appendChild(g),c.parentNode.appendChild(d)):c.innerHtml="Unrecognised Plugin"}var d,g,f,e=c.ownerDocument,h;if(f=c.getAttributeNS(z,"href"))try{h=a.getPart(f),h.onchange=function(a){b(a.url,a.mimetype)},h.load()}catch(l){runtime.log("slight problem: "+l)}else runtime.log("using MP4 data fallback"),f=k(c),b(f,"video/mp4")}function x(a){v [...]
++b;"undefined"!==String(typeof webodf_css)?(b=a.createElementNS(c.namespaceURI,"style"),b.setAttribute("media","screen, print, handheld, projection"),b.appendChild(a.createTextNode(webodf_css))):(b=a.createElementNS(c.namespaceURI,"link"),a="webodf.css",runtime.currentDirectory&&(a=runtime.currentDirectory()+"/../"+a),b.setAttribute("href",a),b.setAttribute("rel","stylesheet"));b.setAttribute("type","text/css");c.appendChild(b);return b}function w(a){var c=a.getElementsByTagName("head")[ [...]
++"style"),d="";b.setAttribute("type","text/css");b.setAttribute("media","screen, print, handheld, projection");odf.Namespaces.forEachPrefix(function(a,c){d+="@namespace "+a+" url("+c+");\n"});d+="@namespace webodfhelper url(urn:webodf:names:helper);\n";b.appendChild(a.createTextNode(d));c.appendChild(b);return b}var v=odf.Namespaces.drawns,t=odf.Namespaces.fons,s=odf.Namespaces.officens,D=odf.Namespaces.stylens,A=odf.Namespaces.svgns,C=odf.Namespaces.tablens,I=odf.Namespaces.textns,z=odf [...]
++M=odf.Namespaces.xmlns,H=odf.Namespaces.presentationns,R=runtime.getWindow(),Z=new xmldom.XPath,ja=new odf.OdfUtils,E=new core.DomUtils;odf.OdfCanvas=function(k){function p(a,b,d){function g(a,b,d,f){B.addToQueue(function(){c(a,b,d,f)})}var f,e;f=b.getElementsByTagNameNS(v,"image");for(b=0;b<f.length;b+=1)e=f.item(b),g("image"+String(b),a,e,d)}function t(a,c){function b(a,c){B.addToQueue(function(){y(a,c)})}var d,g,f;g=c.getElementsByTagNameNS(v,"plugin");for(d=0;d<g.length;d+=1)f=g.ite [...]
++function A(){T.firstChild&&(1<W?(T.style.MozTransformOrigin="center top",T.style.WebkitTransformOrigin="center top",T.style.OTransformOrigin="center top",T.style.msTransformOrigin="center top"):(T.style.MozTransformOrigin="left top",T.style.WebkitTransformOrigin="left top",T.style.OTransformOrigin="left top",T.style.msTransformOrigin="left top"),T.style.WebkitTransform="scale("+W+")",T.style.MozTransform="scale("+W+")",T.style.OTransform="scale("+W+")",T.style.msTransform="scale("+W+")" [...]
++Math.round(W*T.offsetWidth)+"px",k.style.height=Math.round(W*T.offsetHeight)+"px")}function z(a){function c(a){return d===a.getAttributeNS(s,"name")}var b=E.getElementsByTagNameNS(a,s,"annotation");a=E.getElementsByTagNameNS(a,s,"annotation-end");var d,g;for(g=0;g<b.length;g+=1)d=b[g].getAttributeNS(s,"name"),$.addAnnotation({node:b[g],end:a.filter(c)[0]||null});$.rerenderAnnotations()}function V(a){ra?(P.parentNode||(T.appendChild(P),A()),$&&$.forgetAnnotations(),$=new gui.AnnotationVi [...]
++a.body,P),z(a.body)):P.parentNode&&(T.removeChild(P),$.forgetAnnotations(),A())}function N(c){function e(){q(k);k.style.display="inline-block";var h=O.rootElement;k.ownerDocument.importNode(h,!0);ca.setOdfContainer(O);var l=O,m=U;(new odf.FontLoader).loadFonts(l,m.sheet);a(O,ca,J);m=O;l=ia.sheet;q(k);T=Q.createElementNS(k.namespaceURI,"div");T.style.display="inline-block";T.style.background="white";T.appendChild(h);k.appendChild(T);P=Q.createElementNS(k.namespaceURI,"div");P.id="annotat [...]
++fa=Q.createElementNS(k.namespaceURI,"div");fa.id="shadowContent";fa.style.position="absolute";fa.style.top=0;fa.style.left=0;m.getContentElement().appendChild(fa);var x=h.body,w,y,z;y=[];for(w=x.firstChild;w&&w!==x;)if(w.namespaceURI===v&&(y[y.length]=w),w.firstChild)w=w.firstChild;else{for(;w&&w!==x&&!w.nextSibling;)w=w.parentNode;w&&w.nextSibling&&(w=w.nextSibling)}for(z=0;z<y.length;z+=1)w=y[z],b("frame"+String(z),w,l);y=Z.getODFElementsWithXPath(x,".//*[*[@text:anchor-type='paragrap [...]
++for(w=0;w<y.length;w+=1)x=y[w],x.setAttributeNS&&x.setAttributeNS("urn:webodf:names:helper","containsparagraphanchor",!0);var x=fa,E,B,K;K=0;var F,N;y=m.rootElement.ownerDocument;if((w=h.body.firstElementChild)&&w.namespaceURI===s&&("presentation"===w.localName||"drawing"===w.localName))for(w=w.firstElementChild;w;){z=w.getAttributeNS(v,"master-page-name");if(z){E=m.rootElement.masterStyles.getElementsByTagNameNS(D,"master-page");B=null;K=void 0;for(K=0;K<E.length;K+=1)if(E[K].getAttrib [...]
++z){B=E[K];break}z=B}else z=null;if(z){E=w.getAttributeNS("urn:webodf:names:helper","styleid");B=y.createElementNS(v,"draw:page");N=z.firstElementChild;for(F=0;N;)"true"!==N.getAttributeNS(H,"placeholder")&&(K=N.cloneNode(!0),B.appendChild(K),b(E+"_"+F,K,l)),N=N.nextElementSibling,F+=1;N=F=K=void 0;var L=B.getElementsByTagNameNS(v,"frame");for(K=0;K<L.length;K+=1)F=L[K],(N=F.getAttributeNS(H,"class"))&&!/^(date-time|footer|header|page-number')$/.test(N)&&F.parentNode.removeChild(F);x.app [...]
++K=String(x.getElementsByTagNameNS(v,"page").length);f(B,I,"page-number",K);f(B,H,"header",d(m,w,"header"));f(B,H,"footer",d(m,w,"footer"));b(E,B,l);B.setAttributeNS(v,"draw:master-page-name",z.getAttributeNS(D,"name"))}w=w.nextElementSibling}w=h.body.getElementsByTagNameNS(C,"table-cell");for(x=0;x<w.length;x+=1)y=w.item(x),y.hasAttributeNS(C,"number-columns-spanned")&&y.setAttribute("colspan",y.getAttributeNS(C,"number-columns-spanned")),y.hasAttributeNS(C,"number-rows-spanned")&&y.set [...]
++y.getAttributeNS(C,"number-rows-spanned"));g(h.body);n(h.body);r(h.body);u(h.body);p(m,h.body,l);t(m,h.body);y=h.body;x={};w={};var G;z=R.document.getElementsByTagNameNS(I,"list-style");for(m=0;m<z.length;m+=1)K=z.item(m),(F=K.getAttributeNS(D,"name"))&&(w[F]=K);y=y.getElementsByTagNameNS(I,"list");for(m=0;m<y.length;m+=1)if(K=y.item(m),z=K.getAttributeNS(M,"id")){E=K.getAttributeNS(I,"continue-list");K.setAttribute("id",z);B="text|list#"+z+" > text|list-item > *:first-child:before {";i [...]
++"style-name"))K=w[F],G=ja.getFirstNonWhitespaceChild(K),K=void 0,G&&("list-level-style-number"===G.localName?(K=G.getAttributeNS(D,"num-format"),F=G.getAttributeNS(D,"num-suffix"),N="",N={1:"decimal",a:"lower-latin",A:"upper-latin",i:"lower-roman",I:"upper-roman"},L=void 0,L=G.getAttributeNS(D,"num-prefix")||"",L=N.hasOwnProperty(K)?L+(" counter(list, "+N[K]+")"):K?L+("'"+K+"';"):L+" ''",F&&(L+=" '"+F+"'"),K=N="content: "+L+";"):"list-level-style-image"===G.localName?K="content: none;": [...]
++G.localName&&(K="content: '"+G.getAttributeNS(I,"bullet-char")+"';")),G=K;if(E){for(K=x[E];K;)E=K,K=x[E];B+="counter-increment:"+E+";";G?(G=G.replace("list",E),B+=G):B+="content:counter("+E+");"}else E="",G?(G=G.replace("list",z),B+=G):B+="content: counter("+z+");",B+="counter-increment:"+z+";",l.insertRule("text|list#"+z+" {counter-reset:"+z+"}",l.cssRules.length);B+="}";x[z]=E;B&&l.insertRule(B,l.cssRules.length)}T.insertBefore(fa,T.firstChild);A();V(h);if(!c&&(h=[O],ha.hasOwnProperty [...]
++ha.statereadychange,G=0;G<l.length;G+=1)l[G].apply(null,h)}O.state===odf.OdfContainer.DONE?e():(runtime.log("WARNING: refreshOdf called but ODF was not DONE."),runtime.setTimeout(function ma(){O.state===odf.OdfContainer.DONE?e():(runtime.log("will be back later..."),runtime.setTimeout(ma,500))},100))}function L(a){B.clearQueue();k.innerHTML=runtime.tr("Loading")+" "+a+"...";k.removeAttribute("style");O=new odf.OdfContainer(a,function(a){O=a;N(!1)})}runtime.assert(null!==k&&void 0!==k,"o [...]
++runtime.assert(null!==k.ownerDocument&&void 0!==k.ownerDocument,"odf.OdfCanvas constructor needs DOM");var G=this,Q=k.ownerDocument,O,ca=new odf.Formatting,oa=new l(k),da,T,P,ra=!1,$,F,U,J,ia,fa,W=1,ha={},B=new h;this.refreshCSS=function(){a(O,ca,J);A()};this.refreshSize=function(){A()};this.odfContainer=function(){return O};this.slidevisibilitycss=function(){return da.css};this.setOdfContainer=function(a,c){O=a;N(!0===c)};this.load=this.load=L;this.save=function(a){O.save(a)};this.addL [...]
++c){switch(a){case "selectionchange":oa.addListener(a,c);break;case "click":e(k,a,c);break;default:var b=ha[a];void 0===b&&(b=ha[a]=[]);c&&-1===b.indexOf(c)&&b.push(c)}};this.getFormatting=function(){return ca};this.getAnnotationManager=function(){return $};this.refreshAnnotations=function(){V(O.rootElement)};this.rerenderAnnotations=function(){$&&$.rerenderAnnotations()};this.getSizer=function(){return T};this.enableAnnotations=function(a){a!==ra&&(ra=a,O&&V(O.rootElement))};this.addAnn [...]
++$.addAnnotation(a)};this.forgetAnnotations=function(){$&&$.forgetAnnotations()};this.setZoomLevel=function(a){W=a;A()};this.getZoomLevel=function(){return W};this.fitToContainingElement=function(a,c){var b=k.offsetHeight/W;W=a/(k.offsetWidth/W);c/b<W&&(W=c/b);A()};this.fitToWidth=function(a){W=a/(k.offsetWidth/W);A()};this.fitSmart=function(a,c){var b,d;b=k.offsetWidth/W;d=k.offsetHeight/W;b=a/b;void 0!==c&&c/d<b&&(b=c/d);W=Math.min(1,b);A()};this.fitToHeight=function(a){W=a/(k.offsetHe [...]
++this.showFirstPage=function(){da.showFirstPage()};this.showNextPage=function(){da.showNextPage()};this.showPreviousPage=function(){da.showPreviousPage()};this.showPage=function(a){da.showPage(a);A()};this.getElement=function(){return k};this.addCssForFrameWithImage=function(a){var d=a.getAttributeNS(v,"name");b(d,a,ia.sheet);c(d+"img",O,a.firstChild,ia.sheet)};this.destroy=function(a){var c=Q.getElementsByTagName("head")[0];P&&P.parentNode&&P.parentNode.removeChild(P);T&&k.removeChild(T [...]
++c.removeChild(U);c.removeChild(J);c.removeChild(ia);oa.destroy(function(c){c?a(c):da.destroy(a)})};F=x(Q);da=new m(w(Q));U=w(Q);J=w(Q);ia=w(Q)};return odf.OdfCanvas}();
 +// Input 39
 +runtime.loadClass("odf.OdfCanvas");
- odf.CommandLineTools=function(){this.roundTrip=function(e,h,f){return new odf.OdfContainer(e,function(n){if(n.state===odf.OdfContainer.INVALID)return f("Document "+e+" is invalid.");n.state===odf.OdfContainer.DONE?n.saveAs(h,function(e){f(e)}):f("Document was not completely loaded.")})};this.render=function(e,h,f){for(h=h.getElementsByTagName("body")[0];h.firstChild;)h.removeChild(h.firstChild);h=new odf.OdfCanvas(h);h.addListener("statereadychange",function(e){f(e)});h.load(e)}};
++odf.CommandLineTools=function(){this.roundTrip=function(h,m,e){return new odf.OdfContainer(h,function(p){if(p.state===odf.OdfContainer.INVALID)return e("Document "+h+" is invalid.");p.state===odf.OdfContainer.DONE?p.saveAs(m,function(h){e(h)}):e("Document was not completely loaded.")})};this.render=function(h,m,e){for(m=m.getElementsByTagName("body")[0];m.firstChild;)m.removeChild(m.firstChild);m=new odf.OdfCanvas(m);m.addListener("statereadychange",function(h){e(h)});m.load(h)}};
 +// Input 40
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.Server=function(){};ops.Server.prototype.connect=function(e,h){};ops.Server.prototype.networkStatus=function(){};ops.Server.prototype.login=function(e,h,f,n){};ops.Server.prototype.joinSession=function(e,h,f,n){};ops.Server.prototype.leaveSession=function(e,h,f,n){};ops.Server.prototype.getGenesisUrl=function(e){};
++ops.Server=function(){};ops.Server.prototype.connect=function(h,m){};ops.Server.prototype.networkStatus=function(){};ops.Server.prototype.login=function(h,m,e,p){};ops.Server.prototype.joinSession=function(h,m,e,p){};ops.Server.prototype.leaveSession=function(h,m,e,p){};ops.Server.prototype.getGenesisUrl=function(h){};
 +// Input 41
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.Operation=function(){};ops.Operation.prototype.init=function(e){};ops.Operation.prototype.execute=function(e){};ops.Operation.prototype.spec=function(){};
++ops.Operation=function(){};ops.Operation.prototype.init=function(h){};ops.Operation.prototype.execute=function(h){};ops.Operation.prototype.spec=function(){};
 +// Input 42
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpAddCursor=function(){var e,h;this.init=function(f){e=f.memberid;h=f.timestamp};this.execute=function(f){var h=f.getCursor(e);if(h)return!1;h=new ops.OdtCursor(e,f);f.addCursor(h);f.emit(ops.OdtDocument.signalCursorAdded,h);return!0};this.spec=function(){return{optype:"AddCursor",memberid:e,timestamp:h}}};
++ops.OpAddCursor=function(){var h,m;this.init=function(e){h=e.memberid;m=e.timestamp};this.execute=function(e){var m=e.getCursor(h);if(m)return!1;m=new ops.OdtCursor(h,e);e.addCursor(m);e.emit(ops.OdtDocument.signalCursorAdded,m);return!0};this.spec=function(){return{optype:"AddCursor",memberid:h,timestamp:m}}};
 +// Input 43
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfUtils");
- gui.StyleHelper=function(e){function h(c,b,a){var d=!0,e;for(e=0;e<c.length&&!(d=c[e]["style:text-properties"],d=!d||d[b]!==a);e+=1);return!d}function f(c,b,a){c=m.getParagraphElements(c);for(var d={},f=!1,g,h;0<c.length;){(g=c[0].getAttributeNS(p,"style-name"))?d[g]||(h=e.getStyleElement(g,"paragraph"),d[g]=!0):f?h=void 0:(f=!0,h=e.getDefaultStyleElement("paragraph"));if(h&&(g=e.getInheritedStyleAttributes(h,!0),(g=g["style:paragraph-properties"])&&-1===a.indexOf(g[b])))return!1;c.pop( [...]
- var n=new core.DomUtils,m=new odf.OdfUtils,p=odf.Namespaces.textns;this.getAppliedStyles=function(c){var b;c.collapsed?(b=c.startContainer,b.hasChildNodes()&&c.startOffset<b.childNodes.length&&(b=b.childNodes[c.startOffset]),c=[b]):c=m.getTextNodes(c,!0);return e.getAppliedStyles(c)};this.applyStyle=function(c,b,a){var d=n.splitBoundaries(b),f=m.getTextNodes(b,!1);e.applyStyle(c,f,{startContainer:b.startContainer,startOffset:b.startOffset,endContainer:b.endContainer,endOffset:b.endOffse [...]
- this.isBold=function(c){return h(c,"fo:font-weight","bold")};this.isItalic=function(c){return h(c,"fo:font-style","italic")};this.hasUnderline=function(c){return h(c,"style:text-underline-style","solid")};this.hasStrikeThrough=function(c){return h(c,"style:text-line-through-style","solid")};this.isAlignedLeft=function(c){return f(c,"fo:text-align",["left","start"])};this.isAlignedCenter=function(c){return f(c,"fo:text-align",["center"])};this.isAlignedRight=function(c){return f(c,"fo:te [...]
- ["right","end"])};this.isAlignedJustified=function(c){return f(c,"fo:text-align",["justify"])}};
++gui.StyleHelper=function(h){function m(a,d,f){var b=!0,e;for(e=0;e<a.length&&!(b=a[e]["style:text-properties"],b=!b||b[d]!==f);e+=1);return!b}function e(a,d,f){a=l.getParagraphElements(a);for(var b={},e=!1,c,g;0<a.length;){(c=a[0].getAttributeNS(q,"style-name"))?b[c]||(g=h.getStyleElement(c,"paragraph"),b[c]=!0):e?g=void 0:(e=!0,g=h.getDefaultStyleElement("paragraph"));if(g&&(c=h.getInheritedStyleAttributes(g,!0),(c=c["style:paragraph-properties"])&&-1===f.indexOf(c[d])))return!1;a.pop( [...]
++var p=new core.DomUtils,l=new odf.OdfUtils,q=odf.Namespaces.textns;this.getAppliedStyles=function(a){var d;a.collapsed?(d=a.startContainer,d.hasChildNodes()&&a.startOffset<d.childNodes.length&&(d=d.childNodes[a.startOffset]),a=[d]):a=l.getTextNodes(a,!0);return h.getAppliedStyles(a)};this.applyStyle=function(a,d,f){var b=p.splitBoundaries(d),e=l.getTextNodes(d,!1);h.applyStyle(a,e,{startContainer:d.startContainer,startOffset:d.startOffset,endContainer:d.endContainer,endOffset:d.endOffse [...]
++this.isBold=function(a){return m(a,"fo:font-weight","bold")};this.isItalic=function(a){return m(a,"fo:font-style","italic")};this.hasUnderline=function(a){return m(a,"style:text-underline-style","solid")};this.hasStrikeThrough=function(a){return m(a,"style:text-line-through-style","solid")};this.isAlignedLeft=function(a){return e(a,"fo:text-align",["left","start"])};this.isAlignedCenter=function(a){return e(a,"fo:text-align",["center"])};this.isAlignedRight=function(a){return e(a,"fo:te [...]
++["right","end"])};this.isAlignedJustified=function(a){return e(a,"fo:text-align",["justify"])}};
 +// Input 44
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.StyleHelper");runtime.loadClass("odf.OdfUtils");
- ops.OpApplyDirectStyling=function(){function e(b){var a=0<=m?n+m:n,d=b.getIteratorAtPosition(0<=m?n:n+m),a=m?b.getIteratorAtPosition(a):d;b=b.getDOM().createRange();b.setStart(d.container(),d.unfilteredDomOffset());b.setEnd(a.container(),a.unfilteredDomOffset());return b}var h,f,n,m,p,c=new odf.OdfUtils;this.init=function(b){h=b.memberid;f=b.timestamp;n=parseInt(b.position,10);m=parseInt(b.length,10);p=b.setProperties};this.execute=function(b){var a=e(b),d=c.getImpactedParagraphs(a);(ne [...]
- a,p);a.detach();b.getOdfCanvas().refreshCSS();b.fixCursorPositions();d.forEach(function(a){b.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:a,memberId:h,timeStamp:f})});b.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"ApplyDirectStyling",memberid:h,timestamp:f,position:n,length:m,setProperties:p}}};
++ops.OpApplyDirectStyling=function(){function h(a){var f=0<=l?p+l:p,b=a.getIteratorAtPosition(0<=l?p:p+l),f=l?a.getIteratorAtPosition(f):b;a=a.getDOM().createRange();a.setStart(b.container(),b.unfilteredDomOffset());a.setEnd(f.container(),f.unfilteredDomOffset());return a}var m,e,p,l,q,a=new odf.OdfUtils;this.init=function(a){m=a.memberid;e=a.timestamp;p=parseInt(a.position,10);l=parseInt(a.length,10);q=a.setProperties};this.execute=function(d){var f=h(d),b=a.getImpactedParagraphs(f);(ne [...]
++f,q);f.detach();d.getOdfCanvas().refreshCSS();d.fixCursorPositions();b.forEach(function(a){d.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:a,memberId:m,timeStamp:e})});d.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"ApplyDirectStyling",memberid:m,timestamp:e,position:p,length:l,setProperties:q}}};
 +// Input 45
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpRemoveCursor=function(){var e,h;this.init=function(f){e=f.memberid;h=f.timestamp};this.execute=function(f){return f.removeCursor(e)?!0:!1};this.spec=function(){return{optype:"RemoveCursor",memberid:e,timestamp:h}}};
++ops.OpRemoveCursor=function(){var h,m;this.init=function(e){h=e.memberid;m=e.timestamp};this.execute=function(e){return e.removeCursor(h)?!0:!1};this.spec=function(){return{optype:"RemoveCursor",memberid:h,timestamp:m}}};
 +// Input 46
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpMoveCursor=function(){var e,h,f,n,m;this.init=function(p){e=p.memberid;h=p.timestamp;f=p.position;n=p.length||0;m=p.selectionType||ops.OdtCursor.RangeSelection};this.execute=function(h){var c=h.getCursor(e),b=h.getCursorPosition(e),a=h.getPositionFilter(),d=f-b;if(!c)return!1;b=c.getStepCounter();d=b.countSteps(d,a);c.move(d);n&&(a=b.countSteps(n,a),c.move(a,!0));c.setSelectionType(m);h.emit(ops.OdtDocument.signalCursorMoved,c);return!0};this.spec=function(){return{optype:"MoveCur [...]
- timestamp:h,position:f,length:n,selectionType:m}}};
++ops.OpMoveCursor=function(){var h,m,e,p,l;this.init=function(q){h=q.memberid;m=q.timestamp;e=q.position;p=q.length||0;l=q.selectionType||ops.OdtCursor.RangeSelection};this.execute=function(m){var a=m.getCursor(h),d;if(!a)return!1;d=m.convertCursorToDomRange(e,p);a.setSelectedRange(d,0<=p);a.setSelectionType(l);m.emit(ops.OdtDocument.signalCursorMoved,a);return!0};this.spec=function(){return{optype:"MoveCursor",memberid:h,timestamp:m,position:e,length:p,selectionType:l}}};
 +// Input 47
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpSetBlob=function(){var e,h,f,n,m;this.init=function(p){e=p.memberid;h=p.timestamp;f=p.filename;n=p.mimetype;m=p.content};this.execute=function(e){e.getOdfCanvas().odfContainer().setBlob(f,n,m);return!0};this.spec=function(){return{optype:"SetBlob",memberid:e,timestamp:h,filename:f,mimetype:n,content:m}}};
++ops.OpSetBlob=function(){var h,m,e,p,l;this.init=function(q){h=q.memberid;m=q.timestamp;e=q.filename;p=q.mimetype;l=q.content};this.execute=function(h){h.getOdfCanvas().odfContainer().setBlob(e,p,l);return!0};this.spec=function(){return{optype:"SetBlob",memberid:h,timestamp:m,filename:e,mimetype:p,content:l}}};
 +// Input 48
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpRemoveBlob=function(){var e,h,f;this.init=function(n){e=n.memberid;h=n.timestamp;f=n.filename};this.execute=function(e){e.getOdfCanvas().odfContainer().removeBlob(f);return!0};this.spec=function(){return{optype:"RemoveBlob",memberid:e,timestamp:h,filename:f}}};
++ops.OpRemoveBlob=function(){var h,m,e;this.init=function(p){h=p.memberid;m=p.timestamp;e=p.filename};this.execute=function(h){h.getOdfCanvas().odfContainer().removeBlob(e);return!0};this.spec=function(){return{optype:"RemoveBlob",memberid:h,timestamp:m,filename:e}}};
 +// Input 49
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpInsertImage=function(){var e,h,f,n,m,p,c,b,a=odf.Namespaces.drawns,d=odf.Namespaces.svgns,k=odf.Namespaces.textns,g=odf.Namespaces.xlinkns;this.init=function(a){e=a.memberid;h=a.timestamp;f=a.position;n=a.filename;m=a.frameWidth;p=a.frameHeight;c=a.frameStyleName;b=a.frameName};this.execute=function(q){var l=q.getOdfCanvas(),r=q.getPositionInTextNode(f,e),t,w;if(!r)return!1;t=r.textNode;w=q.getParagraphElement(t);var r=r.offset!==t.length?t.splitText(r.offset):t.nextSibling,v=q.ge [...]
- "draw:image"),v=v.createElementNS(a,"draw:frame");y.setAttributeNS(g,"xlink:href",n);y.setAttributeNS(g,"xlink:type","simple");y.setAttributeNS(g,"xlink:show","embed");y.setAttributeNS(g,"xlink:actuate","onLoad");v.setAttributeNS(a,"draw:style-name",c);v.setAttributeNS(a,"draw:name",b);v.setAttributeNS(k,"text:anchor-type","as-char");v.setAttributeNS(d,"svg:width",m);v.setAttributeNS(d,"svg:height",p);v.appendChild(y);t.parentNode.insertBefore(v,r);0===t.length&&t.parentNode.removeChild [...]
- l.refreshCSS();q.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:w,memberId:e,timeStamp:h});l.rerenderAnnotations();return!0};this.spec=function(){return{optype:"InsertImage",memberid:e,timestamp:h,filename:n,position:f,frameWidth:m,frameHeight:p,frameStyleName:c,frameName:b}}};
++ops.OpInsertImage=function(){var h,m,e,p,l,q,a,d,f=odf.Namespaces.drawns,b=odf.Namespaces.svgns,k=odf.Namespaces.textns,c=odf.Namespaces.xlinkns;this.init=function(c){h=c.memberid;m=c.timestamp;e=c.position;p=c.filename;l=c.frameWidth;q=c.frameHeight;a=c.frameStyleName;d=c.frameName};this.execute=function(g){var n=g.getOdfCanvas(),r=g.getTextNodeAtStep(e,h),u,y;if(!r)return!1;u=r.textNode;y=g.getParagraphElement(u);var r=r.offset!==u.length?u.splitText(r.offset):u.nextSibling,x=g.getDOM [...]
++"draw:image"),x=x.createElementNS(f,"draw:frame");w.setAttributeNS(c,"xlink:href",p);w.setAttributeNS(c,"xlink:type","simple");w.setAttributeNS(c,"xlink:show","embed");w.setAttributeNS(c,"xlink:actuate","onLoad");x.setAttributeNS(f,"draw:style-name",a);x.setAttributeNS(f,"draw:name",d);x.setAttributeNS(k,"text:anchor-type","as-char");x.setAttributeNS(b,"svg:width",l);x.setAttributeNS(b,"svg:height",q);x.appendChild(w);u.parentNode.insertBefore(x,r);g.emit(ops.OdtDocument.signalStepsInse [...]
++length:1});0===u.length&&u.parentNode.removeChild(u);n.addCssForFrameWithImage(x);n.refreshCSS();g.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:y,memberId:h,timeStamp:m});n.rerenderAnnotations();return!0};this.spec=function(){return{optype:"InsertImage",memberid:h,timestamp:m,filename:p,position:e,frameWidth:l,frameHeight:q,frameStyleName:a,frameName:d}}};
 +// Input 50
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpInsertTable=function(){function e(a,b){var c;if(1===d.length)c=d[0];else if(3===d.length)switch(a){case 0:c=d[0];break;case n-1:c=d[2];break;default:c=d[1]}else c=d[a];if(1===c.length)return c[0];if(3===c.length)switch(b){case 0:return c[0];case m-1:return c[2];default:return c[1]}return c[b]}var h,f,n,m,p,c,b,a,d;this.init=function(e){h=e.memberid;f=e.timestamp;p=e.position;n=e.initialRows;m=e.initialColumns;c=e.tableName;b=e.tableStyleName;a=e.tableColumnStyleName;d=e.tableCellS [...]
- this.execute=function(d){var g=d.getPositionInTextNode(p),q=d.getRootNode();if(g){var l=d.getDOM(),r=l.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table"),t=l.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-column"),w,v,y,x;b&&r.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",b);c&&r.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:name",c);t.setAttributeNS("urn:oasis:n [...]
- "table:number-columns-repeated",m);a&&t.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",a);r.appendChild(t);for(y=0;y<n;y+=1){t=l.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-row");for(x=0;x<m;x+=1)w=l.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-cell"),(v=e(y,x))&&w.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",v),v=l.createElementNS("urn:oasis:n [...]
- "text:p"),w.appendChild(v),t.appendChild(w);r.appendChild(t)}g=d.getParagraphElement(g.textNode);q.insertBefore(r,g.nextSibling);d.getOdfCanvas().refreshSize();d.emit(ops.OdtDocument.signalTableAdded,{tableElement:r,memberId:h,timeStamp:f});d.getOdfCanvas().rerenderAnnotations();return!0}return!1};this.spec=function(){return{optype:"InsertTable",memberid:h,timestamp:f,position:p,initialRows:n,initialColumns:m,tableName:c,tableStyleName:b,tableColumnStyleName:a,tableCellStyleMatrix:d}}};
++ops.OpInsertTable=function(){function h(a,c){var d;if(1===b.length)d=b[0];else if(3===b.length)switch(a){case 0:d=b[0];break;case p-1:d=b[2];break;default:d=b[1]}else d=b[a];if(1===d.length)return d[0];if(3===d.length)switch(c){case 0:return d[0];case l-1:return d[2];default:return d[1]}return d[c]}var m,e,p,l,q,a,d,f,b;this.init=function(k){m=k.memberid;e=k.timestamp;q=k.position;p=k.initialRows;l=k.initialColumns;a=k.tableName;d=k.tableStyleName;f=k.tableColumnStyleName;b=k.tableCellS [...]
++this.execute=function(b){var c=b.getTextNodeAtStep(q),g=b.getRootNode();if(c){var n=b.getDOM(),r=n.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table"),u=n.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-column"),y,x,w,v;d&&r.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",d);a&&r.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:name",a);u.setAttributeNS("urn:oasis:names [...]
++"table:number-columns-repeated",l);f&&u.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",f);r.appendChild(u);for(w=0;w<p;w+=1){u=n.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-row");for(v=0;v<l;v+=1)y=n.createElementNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:table-cell"),(x=h(w,v))&&y.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:table:1.0","table:style-name",x),x=n.createElementNS("urn:oasis:n [...]
++"text:p"),y.appendChild(x),u.appendChild(y);r.appendChild(u)}c=b.getParagraphElement(c.textNode);g.insertBefore(r,c.nextSibling);b.emit(ops.OdtDocument.signalStepsInserted,{position:q,length:l*p+1});b.getOdfCanvas().refreshSize();b.emit(ops.OdtDocument.signalTableAdded,{tableElement:r,memberId:m,timeStamp:e});b.getOdfCanvas().rerenderAnnotations();return!0}return!1};this.spec=function(){return{optype:"InsertTable",memberid:m,timestamp:e,position:q,initialRows:p,initialColumns:l,tableNam [...]
++tableColumnStyleName:f,tableCellStyleMatrix:b}}};
 +// Input 51
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpInsertText=function(){var e,h,f,n;this.init=function(m){e=m.memberid;h=m.timestamp;f=m.position;n=m.text};this.execute=function(m){var p,c,b,a=null,d=m.getDOM(),k,g=0,q,l;m.upgradeWhitespacesAtPosition(f);if(p=m.getPositionInTextNode(f,e)){c=p.textNode;a=c.nextSibling;b=c.parentNode;k=m.getParagraphElement(c);for(l=0;l<n.length;l+=1)if(" "===n[l]&&(0===l||l===n.length-1||" "===n[l-1])||"\t"===n[l])0===g?(p.offset!==c.length&&(a=c.splitText(p.offset)),0<l&&c.appendData(n.substring( [...]
- (g=n.substring(g,l),b.insertBefore(d.createTextNode(g),a)),g=l+1,q=" "===n[l]?"text:s":"text:tab",q=d.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0",q),q.appendChild(d.createTextNode(n[l])),b.insertBefore(q,a);0===g?c.insertData(p.offset,n):g<n.length&&(p=n.substring(g),b.insertBefore(d.createTextNode(p),a));b=c.parentNode;a=c.nextSibling;b.removeChild(c);b.insertBefore(c,a);0===c.length&&c.parentNode.removeChild(c);0<f&&(1<f&&m.downgradeWhitespacesAtPosition(f-2),m.do [...]
- 1));m.downgradeWhitespacesAtPosition(f);m.downgradeWhitespacesAtPosition(f+n.length-1);m.downgradeWhitespacesAtPosition(f+n.length);m.getOdfCanvas().refreshSize();m.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:k,memberId:e,timeStamp:h});m.getOdfCanvas().rerenderAnnotations();return!0}return!1};this.spec=function(){return{optype:"InsertText",memberid:e,timestamp:h,position:f,text:n}}};
++ops.OpInsertText=function(){var h,m,e,p;this.init=function(l){h=l.memberid;m=l.timestamp;e=l.position;p=l.text};this.execute=function(l){var q,a,d,f=null,b=l.getDOM(),k,c=0,g,n;l.upgradeWhitespacesAtPosition(e);if(q=l.getTextNodeAtStep(e,h)){a=q.textNode;f=a.nextSibling;d=a.parentNode;k=l.getParagraphElement(a);for(n=0;n<p.length;n+=1)if(" "===p[n]&&(0===n||n===p.length-1||" "===p[n-1])||"\t"===p[n])0===c?(q.offset!==a.length&&(f=a.splitText(q.offset)),0<n&&a.appendData(p.substring(0,n) [...]
++p.substring(c,n),d.insertBefore(b.createTextNode(c),f)),c=n+1,g=" "===p[n]?"text:s":"text:tab",g=b.createElementNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0",g),g.appendChild(b.createTextNode(p[n])),d.insertBefore(g,f);0===c?a.insertData(q.offset,p):c<p.length&&(q=p.substring(c),d.insertBefore(b.createTextNode(q),f));d=a.parentNode;f=a.nextSibling;d.removeChild(a);d.insertBefore(a,f);0===a.length&&a.parentNode.removeChild(a);l.emit(ops.OdtDocument.signalStepsInserted,{position:e,l [...]
++0<e&&(1<e&&l.downgradeWhitespacesAtPosition(e-2),l.downgradeWhitespacesAtPosition(e-1));l.downgradeWhitespacesAtPosition(e);l.downgradeWhitespacesAtPosition(e+p.length-1);l.downgradeWhitespacesAtPosition(e+p.length);l.getOdfCanvas().refreshSize();l.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:k,memberId:h,timeStamp:m});l.getOdfCanvas().rerenderAnnotations();return!0}return!1};this.spec=function(){return{optype:"InsertText",memberid:h,timestamp:m,position:e,text:p}}};
 +// Input 52
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.OdfUtils");runtime.loadClass("core.DomUtils");
- ops.OpRemoveText=function(){function e(a){function e(a){return d.hasOwnProperty(a.namespaceURI)||"br"===a.localName&&c.isLineBreak(a.parentNode)||a.nodeType===Node.TEXT_NODE&&d.hasOwnProperty(a.parentNode.namespaceURI)}function f(a){if(c.isCharacterElement(a))return!1;if(a.nodeType===Node.TEXT_NODE)return 0===a.textContent.length;for(a=a.firstChild;a;){if(d.hasOwnProperty(a.namespaceURI)||!f(a))return!1;a=a.nextSibling}return!0}function h(d){var m;d.nodeType===Node.TEXT_NODE?(m=d.parent [...]
- m=b.removeUnwantedNodes(d,e);return!c.isParagraph(m)&&m!==a&&f(m)?h(m):m}this.isEmpty=f;this.mergeChildrenIntoParent=h}function h(d){var c=d.getPositionFilter(),e,f,h,n,w=p,v=d.getDOM().createRange();d=d.getIteratorAtPosition(m);e=d.container();for(f=d.unfilteredDomOffset();w&&d.nextPosition();)h=d.container(),n=d.unfilteredDomOffset(),c.acceptPosition(d)===a&&(w-=1);v.setStart(e,f);v.setEnd(h,n);b.splitBoundaries(v);return v}var f,n,m,p,c,b,a=core.PositionFilter.FilterResult.FILTER_ACC [...]
- function(a){runtime.assert(0<=a.length,"OpRemoveText only supports positive lengths");f=a.memberid;n=a.timestamp;m=parseInt(a.position,10);p=parseInt(a.length,10);c=new odf.OdfUtils;b=new core.DomUtils;d[odf.Namespaces.dbns]=!0;d[odf.Namespaces.dcns]=!0;d[odf.Namespaces.dr3dns]=!0;d[odf.Namespaces.drawns]=!0;d[odf.Namespaces.chartns]=!0;d[odf.Namespaces.formns]=!0;d[odf.Namespaces.numberns]=!0;d[odf.Namespaces.officens]=!0;d[odf.Namespaces.presentationns]=!0;d[odf.Namespaces.stylens]=!0 [...]
- !0;d[odf.Namespaces.tablens]=!0;d[odf.Namespaces.textns]=!0};this.execute=function(a){var b,d,l,r,t=a.getCursor(f),w=new e(a.getRootNode());a.upgradeWhitespacesAtPosition(m);a.upgradeWhitespacesAtPosition(m+p);d=h(a);b=a.getParagraphElement(d.startContainer);l=c.getTextElements(d,!1,!0);r=c.getParagraphElements(d);d.detach();l.forEach(function(a){w.mergeChildrenIntoParent(a)});d=r.reduce(function(a,b){var d,c=!1,e=a,f=b,g,h=null;w.isEmpty(a)&&(c=!0,b.parentNode!==a.parentNode&&(g=b.pare [...]
- a.nextSibling)),f=a,e=b,h=e.getElementsByTagNameNS("urn:webodf:names:editinfo","editinfo")[0]||e.firstChild);for(;f.hasChildNodes();)d=c?f.lastChild:f.firstChild,f.removeChild(d),"editinfo"!==d.localName&&e.insertBefore(d,h);g&&w.isEmpty(g)&&w.mergeChildrenIntoParent(g);w.mergeChildrenIntoParent(f);return e});a.downgradeWhitespacesAtPosition(m);a.fixCursorPositions();a.getOdfCanvas().refreshSize();a.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:d||b,memberId:f,timeStamp: [...]
- a.emit(ops.OdtDocument.signalCursorMoved,t));a.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"RemoveText",memberid:f,timestamp:n,position:m,length:p}}};
++ops.OpRemoveText=function(){function h(f){function b(a){return d.hasOwnProperty(a.namespaceURI)||"br"===a.localName&&q.isLineBreak(a.parentNode)||a.nodeType===Node.TEXT_NODE&&d.hasOwnProperty(a.parentNode.namespaceURI)}function e(a){if(q.isCharacterElement(a))return!1;if(a.nodeType===Node.TEXT_NODE)return 0===a.textContent.length;for(a=a.firstChild;a;){if(d.hasOwnProperty(a.namespaceURI)||!e(a))return!1;a=a.nextSibling}return!0}function c(d){var h;d.nodeType===Node.TEXT_NODE?(h=d.parent [...]
++h=a.removeUnwantedNodes(d,b);return!q.isParagraph(h)&&h!==f&&e(h)?c(h):h}this.isEmpty=e;this.mergeChildrenIntoParent=c}var m,e,p,l,q,a,d={};this.init=function(f){runtime.assert(0<=f.length,"OpRemoveText only supports positive lengths");m=f.memberid;e=f.timestamp;p=parseInt(f.position,10);l=parseInt(f.length,10);q=new odf.OdfUtils;a=new core.DomUtils;d[odf.Namespaces.dbns]=!0;d[odf.Namespaces.dcns]=!0;d[odf.Namespaces.dr3dns]=!0;d[odf.Namespaces.drawns]=!0;d[odf.Namespaces.chartns]=!0;d[ [...]
++!0;d[odf.Namespaces.numberns]=!0;d[odf.Namespaces.officens]=!0;d[odf.Namespaces.presentationns]=!0;d[odf.Namespaces.stylens]=!0;d[odf.Namespaces.svgns]=!0;d[odf.Namespaces.tablens]=!0;d[odf.Namespaces.textns]=!0};this.execute=function(d){var b,k,c,g,n=d.getCursor(m),r=new h(d.getRootNode());d.upgradeWhitespacesAtPosition(p);d.upgradeWhitespacesAtPosition(p+l);k=d.convertCursorToDomRange(p,l);a.splitBoundaries(k);b=d.getParagraphElement(k.startContainer);c=q.getTextElements(k,!1,!0);g=q. [...]
++k.detach();c.forEach(function(a){r.mergeChildrenIntoParent(a)});k=g.reduce(function(a,c){var b,d=!1,g=a,f=c,e,k=null;r.isEmpty(a)&&(d=!0,c.parentNode!==a.parentNode&&(e=c.parentNode,a.parentNode.insertBefore(c,a.nextSibling)),f=a,g=c,k=g.getElementsByTagNameNS("urn:webodf:names:editinfo","editinfo")[0]||g.firstChild);for(;f.hasChildNodes();)b=d?f.lastChild:f.firstChild,f.removeChild(b),"editinfo"!==b.localName&&g.insertBefore(b,k);e&&r.isEmpty(e)&&r.mergeChildrenIntoParent(e);r.mergeChi [...]
++return g});d.emit(ops.OdtDocument.signalStepsRemoved,{position:p,length:l});d.downgradeWhitespacesAtPosition(p);d.fixCursorPositions();d.getOdfCanvas().refreshSize();d.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:k||b,memberId:m,timeStamp:e});n&&(n.resetSelectionType(),d.emit(ops.OdtDocument.signalCursorMoved,n));d.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"RemoveText",memberid:m,timestamp:e,position:p,length:l}}};
 +// Input 53
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpSplitParagraph=function(){var e,h,f,n;this.init=function(m){e=m.memberid;h=m.timestamp;f=m.position;n=new odf.OdfUtils};this.execute=function(m){var p,c,b,a,d,k,g;m.upgradeWhitespacesAtPosition(f);p=m.getPositionInTextNode(f,e);if(!p)return!1;c=m.getParagraphElement(p.textNode);if(!c)return!1;b=n.isListItem(c.parentNode)?c.parentNode:c;0===p.offset?(g=p.textNode.previousSibling,k=null):(g=p.textNode,k=p.offset>=p.textNode.length?null:p.textNode.splitText(p.offset));for(a=p.textNod [...]
- a.parentNode,d=a.cloneNode(!1),g){for(k&&d.appendChild(k);g.nextSibling;)d.appendChild(g.nextSibling);a.parentNode.insertBefore(d,a.nextSibling);g=a;k=d}else a.parentNode.insertBefore(d,a),g=d,k=a;n.isListItem(k)&&(k=k.childNodes[0]);0===p.textNode.length&&p.textNode.parentNode.removeChild(p.textNode);m.fixCursorPositions();m.getOdfCanvas().refreshSize();m.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:c,memberId:e,timeStamp:h});m.emit(ops.OdtDocument.signalParagraphChang [...]
- memberId:e,timeStamp:h});m.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"SplitParagraph",memberid:e,timestamp:h,position:f}}};
++ops.OpSplitParagraph=function(){var h,m,e,p;this.init=function(l){h=l.memberid;m=l.timestamp;e=l.position;p=new odf.OdfUtils};this.execute=function(l){var q,a,d,f,b,k,c;l.upgradeWhitespacesAtPosition(e);q=l.getTextNodeAtStep(e,h);if(!q)return!1;a=l.getParagraphElement(q.textNode);if(!a)return!1;d=p.isListItem(a.parentNode)?a.parentNode:a;0===q.offset?(c=q.textNode.previousSibling,k=null):(c=q.textNode,k=q.offset>=q.textNode.length?null:q.textNode.splitText(q.offset));for(f=q.textNode;f! [...]
++b=f.cloneNode(!1);k&&b.appendChild(k);if(c)for(;c&&c.nextSibling;)b.appendChild(c.nextSibling);else for(;f.firstChild;)b.appendChild(f.firstChild);f.parentNode.insertBefore(b,f.nextSibling);c=f;k=b}p.isListItem(k)&&(k=k.childNodes[0]);0===q.textNode.length&&q.textNode.parentNode.removeChild(q.textNode);l.emit(ops.OdtDocument.signalStepsInserted,{position:e,length:1});l.fixCursorPositions();l.getOdfCanvas().refreshSize();l.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:a,m [...]
++timeStamp:m});l.emit(ops.OdtDocument.signalParagraphChanged,{paragraphElement:k,memberId:h,timeStamp:m});l.getOdfCanvas().rerenderAnnotations();return!0};this.spec=function(){return{optype:"SplitParagraph",memberid:h,timestamp:m,position:e}}};
 +// Input 54
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpSetParagraphStyle=function(){var e,h,f,n;this.init=function(m){e=m.memberid;h=m.timestamp;f=m.position;n=m.styleName};this.execute=function(m){var p;p=m.getIteratorAtPosition(f);return(p=m.getParagraphElement(p.container()))?(""!==n?p.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:style-name",n):p.removeAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","style-name"),m.getOdfCanvas().refreshSize(),m.emit(ops.OdtDocument.signalParagraphChanged,{para [...]
- timeStamp:h,memberId:e}),m.getOdfCanvas().rerenderAnnotations(),!0):!1};this.spec=function(){return{optype:"SetParagraphStyle",memberid:e,timestamp:h,position:f,styleName:n}}};
++ops.OpSetParagraphStyle=function(){var h,m,e,p;this.init=function(l){h=l.memberid;m=l.timestamp;e=l.position;p=l.styleName};this.execute=function(l){var q;q=l.getIteratorAtPosition(e);return(q=l.getParagraphElement(q.container()))?(""!==p?q.setAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","text:style-name",p):q.removeAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","style-name"),l.getOdfCanvas().refreshSize(),l.emit(ops.OdtDocument.signalParagraphChanged,{para [...]
++timeStamp:m,memberId:h}),l.getOdfCanvas().rerenderAnnotations(),!0):!1};this.spec=function(){return{optype:"SetParagraphStyle",memberid:h,timestamp:m,position:e,styleName:p}}};
 +// Input 55
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
- ops.OpUpdateParagraphStyle=function(){function e(b,a){var d,c,e=a?a.split(","):[];for(d=0;d<e.length;d+=1)c=e[d].split(":"),b.removeAttributeNS(odf.Namespaces.resolvePrefix(c[0]),c[1])}var h,f,n,m,p,c=odf.Namespaces.stylens;this.init=function(b){h=b.memberid;f=b.timestamp;n=b.styleName;m=b.setProperties;p=b.removedProperties};this.execute=function(b){var a=b.getFormatting(),d,f,g;return(d=""!==n?b.getParagraphStyleElement(n):a.getDefaultStyleElement("paragraph"))?(f=d.getElementsByTagNa [...]
- g=d.getElementsByTagNameNS(c,"text-properties")[0],m&&a.updateStyle(d,m),p&&(p["style:paragraph-properties"]&&(e(f,p["style:paragraph-properties"].attributes),0===f.attributes.length&&d.removeChild(f)),p["style:text-properties"]&&(e(g,p["style:text-properties"].attributes),0===g.attributes.length&&d.removeChild(g)),e(d,p.attributes)),b.getOdfCanvas().refreshCSS(),b.emit(ops.OdtDocument.signalParagraphStyleModified,n),b.getOdfCanvas().rerenderAnnotations(),!0):!1};this.spec=function(){re [...]
- memberid:h,timestamp:f,styleName:n,setProperties:m,removedProperties:p}}};
++ops.OpUpdateParagraphStyle=function(){function h(a,f){var b,e,c=f?f.split(","):[];for(b=0;b<c.length;b+=1)e=c[b].split(":"),a.removeAttributeNS(odf.Namespaces.resolvePrefix(e[0]),e[1])}var m,e,p,l,q,a=odf.Namespaces.stylens;this.init=function(a){m=a.memberid;e=a.timestamp;p=a.styleName;l=a.setProperties;q=a.removedProperties};this.execute=function(d){var f=d.getFormatting(),b,e,c;return(b=""!==p?d.getParagraphStyleElement(p):f.getDefaultStyleElement("paragraph"))?(e=b.getElementsByTagNa [...]
++c=b.getElementsByTagNameNS(a,"text-properties")[0],l&&f.updateStyle(b,l),q&&(q["style:paragraph-properties"]&&(h(e,q["style:paragraph-properties"].attributes),0===e.attributes.length&&b.removeChild(e)),q["style:text-properties"]&&(h(c,q["style:text-properties"].attributes),0===c.attributes.length&&b.removeChild(c)),h(b,q.attributes)),d.getOdfCanvas().refreshCSS(),d.emit(ops.OdtDocument.signalParagraphStyleModified,p),d.getOdfCanvas().rerenderAnnotations(),!0):!1};this.spec=function(){re [...]
++memberid:m,timestamp:e,styleName:p,setProperties:l,removedProperties:q}}};
 +// Input 56
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");
- ops.OpAddStyle=function(){var e,h,f,n,m,p,c=odf.Namespaces.stylens;this.init=function(b){e=b.memberid;h=b.timestamp;f=b.styleName;n=b.styleFamily;m="true"===b.isAutomaticStyle||!0===b.isAutomaticStyle;p=b.setProperties};this.execute=function(b){var a=b.getOdfCanvas().odfContainer(),d=b.getFormatting(),e=b.getDOM().createElementNS(c,"style:style");if(!e)return!1;p&&d.updateStyle(e,p);e.setAttributeNS(c,"style:family",n);e.setAttributeNS(c,"style:name",f);m?a.rootElement.automaticStyles.a [...]
- b.getOdfCanvas().refreshCSS();m||b.emit(ops.OdtDocument.signalCommonStyleCreated,{name:f,family:n});return!0};this.spec=function(){return{optype:"AddStyle",memberid:e,timestamp:h,styleName:f,styleFamily:n,isAutomaticStyle:m,setProperties:p}}};
++ops.OpAddStyle=function(){var h,m,e,p,l,q,a=odf.Namespaces.stylens;this.init=function(a){h=a.memberid;m=a.timestamp;e=a.styleName;p=a.styleFamily;l="true"===a.isAutomaticStyle||!0===a.isAutomaticStyle;q=a.setProperties};this.execute=function(d){var f=d.getOdfCanvas().odfContainer(),b=d.getFormatting(),h=d.getDOM().createElementNS(a,"style:style");if(!h)return!1;q&&b.updateStyle(h,q);h.setAttributeNS(a,"style:family",p);h.setAttributeNS(a,"style:name",e);l?f.rootElement.automaticStyles.a [...]
++d.getOdfCanvas().refreshCSS();l||d.emit(ops.OdtDocument.signalCommonStyleCreated,{name:e,family:p});return!0};this.spec=function(){return{optype:"AddStyle",memberid:h,timestamp:m,styleName:e,styleFamily:p,isAutomaticStyle:l,setProperties:q}}};
 +// Input 57
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpRemoveStyle=function(){var e,h,f,n;this.init=function(m){e=m.memberid;h=m.timestamp;f=m.styleName;n=m.styleFamily};this.execute=function(e){var h=e.getStyleElement(f,n);if(!h)return!1;h.parentNode.removeChild(h);e.getOdfCanvas().refreshCSS();e.emit(ops.OdtDocument.signalCommonStyleDeleted,{name:f,family:n});return!0};this.spec=function(){return{optype:"RemoveStyle",memberid:e,timestamp:h,styleName:f,styleFamily:n}}};
++ops.OpRemoveStyle=function(){var h,m,e,p;this.init=function(l){h=l.memberid;m=l.timestamp;e=l.styleName;p=l.styleFamily};this.execute=function(h){var m=h.getStyleElement(e,p);if(!m)return!1;m.parentNode.removeChild(m);h.getOdfCanvas().refreshCSS();h.emit(ops.OdtDocument.signalCommonStyleDeleted,{name:e,family:p});return!0};this.spec=function(){return{optype:"RemoveStyle",memberid:h,timestamp:m,styleName:e,styleFamily:p}}};
 +// Input 58
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OpAddAnnotation=function(){function e(c,b,a){var d=c.getPositionInTextNode(a,h);d&&(c=d.textNode,a=c.parentNode,d.offset!==c.length&&c.splitText(d.offset),a.insertBefore(b,c.nextSibling),0===c.length&&a.removeChild(c))}var h,f,n,m,p;this.init=function(c){h=c.memberid;f=parseInt(c.timestamp,10);n=parseInt(c.position,10);m=parseInt(c.length,10)||0;p=c.name};this.execute=function(c){var b={},a=c.getPositionFilter(),d=c.getCursor(h),k=c.getCursorPosition(h),k=n-k-1,g=new Date(f),q,l,r,t [...]
- q=w.createElementNS(odf.Namespaces.officens,"office:annotation");q.setAttributeNS(odf.Namespaces.officens,"office:name",p);l=w.createElementNS(odf.Namespaces.dcns,"dc:creator");l.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",h);r=w.createElementNS(odf.Namespaces.dcns,"dc:date");r.appendChild(w.createTextNode(g.toISOString()));g=w.createElementNS(odf.Namespaces.textns,"text:list");t=w.createElementNS(odf.Namespaces.textns,"text:list-item");w=w.createElementNS(odf.Namespa [...]
- "text:p");t.appendChild(w);g.appendChild(t);q.appendChild(l);q.appendChild(r);q.appendChild(g);b.node=q;if(!b.node)return!1;if(m){q=c.getDOM().createElementNS(odf.Namespaces.officens,"office:annotation-end");q.setAttributeNS(odf.Namespaces.officens,"office:name",p);b.end=q;if(!b.end)return!1;e(c,b.end,n+m)}e(c,b.node,n);d&&(a=d.getStepCounter().countSteps(k,a),d.move(a),d.resetSelectionType(),c.emit(ops.OdtDocument.signalCursorMoved,d));c.getOdfCanvas().addAnnotation(b);c.fixCursorPosit [...]
- this.spec=function(){return{optype:"AddAnnotation",memberid:h,timestamp:f,position:n,length:m,name:p}}};
++ops.OpAddAnnotation=function(){function h(a,d,f){var b=a.getTextNodeAtStep(f,m);b&&(a=b.textNode,f=a.parentNode,b.offset!==a.length&&a.splitText(b.offset),f.insertBefore(d,a.nextSibling),0===a.length&&f.removeChild(a))}var m,e,p,l,q;this.init=function(a){m=a.memberid;e=parseInt(a.timestamp,10);p=parseInt(a.position,10);l=parseInt(a.length,10)||0;q=a.name};this.execute=function(a){var d={},f=a.getPositionFilter(),b=a.getCursor(m),k=a.getCursorPosition(m),k=p-k-1,c=new Date(e),g,n,r,u,y;y [...]
++g=y.createElementNS(odf.Namespaces.officens,"office:annotation");g.setAttributeNS(odf.Namespaces.officens,"office:name",q);n=y.createElementNS(odf.Namespaces.dcns,"dc:creator");n.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",m);r=y.createElementNS(odf.Namespaces.dcns,"dc:date");r.appendChild(y.createTextNode(c.toISOString()));c=y.createElementNS(odf.Namespaces.textns,"text:list");u=y.createElementNS(odf.Namespaces.textns,"text:list-item");y=y.createElementNS(odf.Namespa [...]
++"text:p");u.appendChild(y);c.appendChild(u);g.appendChild(n);g.appendChild(r);g.appendChild(c);d.node=g;if(!d.node)return!1;if(l){g=a.getDOM().createElementNS(odf.Namespaces.officens,"office:annotation-end");g.setAttributeNS(odf.Namespaces.officens,"office:name",q);d.end=g;if(!d.end)return!1;h(a,d.end,p+l)}h(a,d.node,p);a.emit(ops.OdtDocument.signalStepsInserted,{position:p,length:l});b&&(f=b.getStepCounter().countSteps(k,f),b.move(f),b.resetSelectionType(),a.emit(ops.OdtDocument.signal [...]
++b));a.getOdfCanvas().addAnnotation(d);a.fixCursorPositions();return!0};this.spec=function(){return{optype:"AddAnnotation",memberid:m,timestamp:e,position:p,length:l,name:q}}};
 +// Input 59
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");runtime.loadClass("core.DomUtils");
- ops.OpRemoveAnnotation=function(){var e,h,f,n,m;this.init=function(p){e=p.memberid;h=p.timestamp;f=parseInt(p.position,10);n=parseInt(p.length,10);m=new core.DomUtils};this.execute=function(e){for(var c=e.getIteratorAtPosition(f).container(),b,a=null,d=null;c.namespaceURI!==odf.Namespaces.officens||"annotation"!==c.localName;)c=c.parentNode;if(null===c)return!1;a=c;(b=a.getAttributeNS(odf.Namespaces.officens,"name"))&&(d=m.getElementsByTagNameNS(e.getRootNode(),odf.Namespaces.officens," [...]
- a.getAttributeNS(odf.Namespaces.officens,"name")})[0]||null);e.getOdfCanvas().forgetAnnotations();for(c=m.getElementsByTagNameNS(a,"urn:webodf:names:cursor","cursor");c.length;)a.parentNode.insertBefore(c.pop(),a);a.parentNode.removeChild(a);d&&d.parentNode.removeChild(d);e.fixCursorPositions();e.getOdfCanvas().refreshAnnotations();return!0};this.spec=function(){return{optype:"RemoveAnnotation",memberid:e,timestamp:h,position:f,length:n}}};
++ops.OpRemoveAnnotation=function(){var h,m,e,p,l;this.init=function(q){h=q.memberid;m=q.timestamp;e=parseInt(q.position,10);p=parseInt(q.length,10);l=new core.DomUtils};this.execute=function(h){for(var a=h.getIteratorAtPosition(e).container(),d,f,b;a.namespaceURI!==odf.Namespaces.officens||"annotation"!==a.localName;)a=a.parentNode;if(null===a)return!1;(d=a.getAttributeNS(odf.Namespaces.officens,"name"))&&(f=l.getElementsByTagNameNS(h.getRootNode(),odf.Namespaces.officens,"annotation-end [...]
++a.getAttributeNS(odf.Namespaces.officens,"name")})[0]||null);h.getOdfCanvas().forgetAnnotations();for(b=l.getElementsByTagNameNS(a,"urn:webodf:names:cursor","cursor");b.length;)a.parentNode.insertBefore(b.pop(),a);a.parentNode.removeChild(a);f&&f.parentNode.removeChild(f);h.emit(ops.OdtDocument.signalStepsRemoved,{position:0<e?e-1:e,length:p});h.fixCursorPositions();h.getOdfCanvas().refreshAnnotations();return!0};this.spec=function(){return{optype:"RemoveAnnotation",memberid:h,timestamp [...]
++length:p}}};
 +// Input 60
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.OpAddCursor");runtime.loadClass("ops.OpApplyDirectStyling");runtime.loadClass("ops.OpRemoveCursor");runtime.loadClass("ops.OpMoveCursor");runtime.loadClass("ops.OpSetBlob");runtime.loadClass("ops.OpRemoveBlob");runtime.loadClass("ops.OpInsertImage");runtime.loadClass("ops.OpInsertTable");runtime.loadClass("ops.OpInsertText");runtime.loadClass("ops.OpRemoveText");runtime.loadClass("ops.OpSplitParagraph");runtime.loadClass("ops.OpSetParagraphStyle");runtime.loadClas [...]
 +runtime.loadClass("ops.OpAddStyle");runtime.loadClass("ops.OpRemoveStyle");runtime.loadClass("ops.OpAddAnnotation");runtime.loadClass("ops.OpRemoveAnnotation");
- ops.OperationFactory=function(){function e(e){return function(){return new e}}var h;this.register=function(e,n){h[e]=n};this.create=function(e){var n=null,m=h[e.optype];m&&(n=m(e),n.init(e));return n};h={AddCursor:e(ops.OpAddCursor),ApplyDirectStyling:e(ops.OpApplyDirectStyling),SetBlob:e(ops.OpSetBlob),RemoveBlob:e(ops.OpRemoveBlob),InsertImage:e(ops.OpInsertImage),InsertTable:e(ops.OpInsertTable),InsertText:e(ops.OpInsertText),RemoveText:e(ops.OpRemoveText),SplitParagraph:e(ops.OpSpli [...]
- SetParagraphStyle:e(ops.OpSetParagraphStyle),UpdateParagraphStyle:e(ops.OpUpdateParagraphStyle),AddStyle:e(ops.OpAddStyle),RemoveStyle:e(ops.OpRemoveStyle),MoveCursor:e(ops.OpMoveCursor),RemoveCursor:e(ops.OpRemoveCursor),AddAnnotation:e(ops.OpAddAnnotation),RemoveAnnotation:e(ops.OpRemoveAnnotation)}};
++ops.OperationFactory=function(){function h(e){return function(){return new e}}var m;this.register=function(e,h){m[e]=h};this.create=function(e){var h=null,l=m[e.optype];l&&(h=l(e),h.init(e));return h};m={AddCursor:h(ops.OpAddCursor),ApplyDirectStyling:h(ops.OpApplyDirectStyling),SetBlob:h(ops.OpSetBlob),RemoveBlob:h(ops.OpRemoveBlob),InsertImage:h(ops.OpInsertImage),InsertTable:h(ops.OpInsertTable),InsertText:h(ops.OpInsertText),RemoveText:h(ops.OpRemoveText),SplitParagraph:h(ops.OpSpli [...]
++SetParagraphStyle:h(ops.OpSetParagraphStyle),UpdateParagraphStyle:h(ops.OpUpdateParagraphStyle),AddStyle:h(ops.OpAddStyle),RemoveStyle:h(ops.OpRemoveStyle),MoveCursor:h(ops.OpMoveCursor),RemoveCursor:h(ops.OpRemoveCursor),AddAnnotation:h(ops.OpAddAnnotation),RemoveAnnotation:h(ops.OpRemoveAnnotation)}};
 +// Input 61
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.Cursor");runtime.loadClass("core.DomUtils");runtime.loadClass("core.PositionIterator");runtime.loadClass("core.PositionFilter");runtime.loadClass("core.LoopWatchDog");runtime.loadClass("odf.OdfUtils");
- gui.SelectionMover=function(e,h){function f(){v.setUnfilteredPosition(e.getNode(),0);return v}function n(a,b){var d,c=null;a&&(d=b?a[a.length-1]:a[0]);d&&(c={top:d.top,left:b?d.right:d.left,bottom:d.bottom});return c}function m(a,b,d,c){var e=a.nodeType;d.setStart(a,b);d.collapse(!c);c=n(d.getClientRects(),!0===c);!c&&0<b&&(d.setStart(a,b-1),d.setEnd(a,b),c=n(d.getClientRects(),!0));c||(e===Node.ELEMENT_NODE&&a.childNodes[b-1]?c=m(a,b-1,d,!0):a.nodeType===Node.TEXT_NODE&&0<b?c=m(a,b-1,d [...]
- c=m(a.previousSibling,a.previousSibling.nodeType===Node.TEXT_NODE?a.previousSibling.textContent.length:a.previousSibling.childNodes.length,d,!0):a.parentNode&&a.parentNode!==h?c=m(a.parentNode,0,d,!1):(d.selectNode(h),c=n(d.getClientRects(),!1)));runtime.assert(Boolean(c),"No visible rectangle found");return c}function p(a,b,d){var c=a,g=f(),k,l=h.ownerDocument.createRange(),n=e.getSelectedRange()?e.getSelectedRange().cloneRange():h.ownerDocument.createRange(),p;for(k=m(g.container(),g. [...]
- l);0<c&&d();)c-=1;b?(b=g.container(),g=g.unfilteredDomOffset(),-1===n.comparePoint(b,g)?(n.setStart(b,g),p=!1):n.setEnd(b,g)):(n.setStart(g.container(),g.unfilteredDomOffset()),n.collapse(!0));e.setSelectedRange(n,p);g=f();n=m(g.container(),g.unfilteredDomOffset(),l);if(n.top===k.top||void 0===y)y=n.left;runtime.clearTimeout(x);x=runtime.setTimeout(function(){y=void 0},2E3);l.detach();return a-c}function c(a){var b=f();return a.acceptPosition(b)===u&&(b.setUnfilteredPosition(e.getAnchor [...]
- a.acceptPosition(b)===u)?!0:!1}function b(a,b,d){for(var c=new core.LoopWatchDog(1E3),e=0,f=0,g=0<=b?1:-1,h=0<=b?a.nextPosition:a.previousPosition;0!==b&&h();)c.check(),f+=g,d.acceptPosition(a)===u&&(b-=g,e+=f,f=0);return e}function a(a,b,d){for(var c=f(),e=new core.LoopWatchDog(1E3),g=0,h=0;0<a&&c.nextPosition();)e.check(),d.acceptPosition(c)===u&&(g+=1,b.acceptPosition(c)===u&&(h+=g,g=0,a-=1));return h}function d(a,b,d){for(var c=f(),e=new core.LoopWatchDog(1E3),g=0,h=0;0<a&&c.previou [...]
- d.acceptPosition(c)===u&&(g+=1,b.acceptPosition(c)===u&&(h+=g,g=0,a-=1));return h}function k(a,d){var c=f();return b(c,a,d)}function g(a,d,c){var e=f(),g=t.getParagraphElement(e.getCurrentNode()),h=0;e.setUnfilteredPosition(a,d);c.acceptPosition(e)!==u&&(h=b(e,-1,c),0===h||g&&g!==t.getParagraphElement(e.getCurrentNode()))&&(e.setUnfilteredPosition(a,d),h=b(e,1,c));return h}function q(a,b){var d=f(),c=0,e=0,g=0>a?-1:1;for(a=Math.abs(a);0<a;){for(var k=b,l=g,n=d,p=n.container(),t=0,q=null [...]
- w=10,v=void 0,x=0,O=void 0,W=void 0,E=void 0,v=void 0,H=h.ownerDocument.createRange(),M=new core.LoopWatchDog(1E3),v=m(p,n.unfilteredDomOffset(),H),O=v.top,W=void 0===y?v.left:y,E=O;!0===(0>l?n.previousPosition():n.nextPosition());)if(M.check(),k.acceptPosition(n)===u&&(t+=1,p=n.container(),v=m(p,n.unfilteredDomOffset(),H),v.top!==O)){if(v.top!==E&&E!==O)break;E=v.top;v=Math.abs(W-v.left);if(null===q||v<w)q=p,r=n.unfilteredDomOffset(),w=v,x=t}null!==q?(n.setUnfilteredPosition(q,r),t=x): [...]
- c+=t;if(0===c)break;e+=c;a-=1}return e*g}function l(a,b){var d,c,e,g,k=f(),l=t.getParagraphElement(k.getCurrentNode()),n=0,p=h.ownerDocument.createRange();0>a?(d=k.previousPosition,c=-1):(d=k.nextPosition,c=1);for(e=m(k.container(),k.unfilteredDomOffset(),p);d.call(k);)if(b.acceptPosition(k)===u){if(t.getParagraphElement(k.getCurrentNode())!==l)break;g=m(k.container(),k.unfilteredDomOffset(),p);if(g.bottom!==e.bottom&&(e=g.top>=e.top&&g.bottom<e.bottom||g.top<=e.top&&g.bottom>e.bottom,! [...]
- c;e=g}p.detach();return n}function r(a,b,d){runtime.assert(null!==a,"SelectionMover.countStepsToPosition called with element===null");var c=f(),e=c.container(),g=c.unfilteredDomOffset(),h=0,k=new core.LoopWatchDog(1E3);for(c.setUnfilteredPosition(a,b);d.acceptPosition(c)!==u&&c.previousPosition();)k.check();a=c.container();runtime.assert(Boolean(a),"SelectionMover.countStepsToPosition: positionIterator.container() returned null");b=c.unfilteredDomOffset();for(c.setUnfilteredPosition(e,g [...]
- u&&c.previousPosition();)k.check();e=w.comparePoints(a,b,c.container(),c.unfilteredDomOffset());if(0>e)for(;c.nextPosition()&&(k.check(),d.acceptPosition(c)===u&&(h+=1),c.container()!==a||c.unfilteredDomOffset()!==b););else if(0<e)for(;c.previousPosition()&&(k.check(),d.acceptPosition(c)!==u||(h-=1,c.container()!==a||c.unfilteredDomOffset()!==b)););return h}var t,w,v,y,x,u=core.PositionFilter.FilterResult.FILTER_ACCEPT;this.movePointForward=function(a,b){return p(a,b||!1,v.nextPosition) [...]
- function(a,b){return p(a,b||!1,v.previousPosition)};this.getStepCounter=function(){return{countSteps:k,convertForwardStepsBetweenFilters:a,convertBackwardStepsBetweenFilters:d,countLinesSteps:q,countStepsToLineBoundary:l,countStepsToPosition:r,isPositionWalkable:c,countPositionsToNearestStep:g}};(function(){t=new odf.OdfUtils;w=new core.DomUtils;v=gui.SelectionMover.createPositionIterator(h);var a=h.ownerDocument.createRange();a.setStart(v.container(),v.unfilteredDomOffset());a.collapse [...]
- gui.SelectionMover.createPositionIterator=function(e){var h=new function(){this.acceptNode=function(e){return"urn:webodf:names:cursor"===e.namespaceURI||"urn:webodf:names:editinfo"===e.namespaceURI?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}};return new core.PositionIterator(e,5,h,!1)};(function(){return gui.SelectionMover})();
++gui.SelectionMover=function(h,m){function e(){x.setUnfilteredPosition(h.getNode(),0);return x}function p(a,c){var b,d=null;a&&(b=c?a[a.length-1]:a[0]);b&&(d={top:b.top,left:c?b.right:b.left,bottom:b.bottom});return d}function l(a,c,b,d){var g=a.nodeType;b.setStart(a,c);b.collapse(!d);d=p(b.getClientRects(),!0===d);!d&&0<c&&(b.setStart(a,c-1),b.setEnd(a,c),d=p(b.getClientRects(),!0));d||(g===Node.ELEMENT_NODE&&a.childNodes[c-1]?d=l(a,c-1,b,!0):a.nodeType===Node.TEXT_NODE&&0<c?d=l(a,c-1,b [...]
++d=l(a.previousSibling,a.previousSibling.nodeType===Node.TEXT_NODE?a.previousSibling.textContent.length:a.previousSibling.childNodes.length,b,!0):a.parentNode&&a.parentNode!==m?d=l(a.parentNode,0,b,!1):(b.selectNode(m),d=p(b.getClientRects(),!1)));runtime.assert(Boolean(d),"No visible rectangle found");return d}function q(a,c,b){var d=a,g=e(),f,k=m.ownerDocument.createRange(),n=h.getSelectedRange()?h.getSelectedRange().cloneRange():m.ownerDocument.createRange(),p;for(f=l(g.container(),g. [...]
++k);0<d&&b();)d-=1;c?(c=g.container(),g=g.unfilteredDomOffset(),-1===n.comparePoint(c,g)?(n.setStart(c,g),p=!1):n.setEnd(c,g)):(n.setStart(g.container(),g.unfilteredDomOffset()),n.collapse(!0));h.setSelectedRange(n,p);g=e();n=l(g.container(),g.unfilteredDomOffset(),k);if(n.top===f.top||void 0===w)w=n.left;runtime.clearTimeout(v);v=runtime.setTimeout(function(){w=void 0},2E3);k.detach();return a-d}function a(a){var c=e();return a.acceptPosition(c)===t&&(c.setUnfilteredPosition(h.getAnchor [...]
++a.acceptPosition(c)===t)?!0:!1}function d(a,c,b){for(var d=new core.LoopWatchDog(1E4),g=0,f=0,e=0<=c?1:-1,h=0<=c?a.nextPosition:a.previousPosition;0!==c&&h();)d.check(),f+=e,b.acceptPosition(a)===t&&(c-=e,g+=f,f=0);return g}function f(a,c,b){for(var d=e(),g=new core.LoopWatchDog(1E4),f=0,h=0;0<a&&d.nextPosition();)g.check(),b.acceptPosition(d)===t&&(f+=1,c.acceptPosition(d)===t&&(h+=f,f=0,a-=1));return h}function b(a,c,b){for(var d=e(),g=new core.LoopWatchDog(1E4),f=0,h=0;0<a&&d.previou [...]
++b.acceptPosition(d)===t&&(f+=1,c.acceptPosition(d)===t&&(h+=f,f=0,a-=1));return h}function k(a,c){var b=e();return d(b,a,c)}function c(a,c,b){var g=e(),f=u.getParagraphElement(g.getCurrentNode()),h=0;g.setUnfilteredPosition(a,c);b.acceptPosition(g)!==t&&(h=d(g,-1,b),0===h||f&&f!==u.getParagraphElement(g.getCurrentNode()))&&(g.setUnfilteredPosition(a,c),h=d(g,1,b));return h}function g(a,c){var b=e(),d=0,g=0,f=0>a?-1:1;for(a=Math.abs(a);0<a;){for(var h=c,k=f,n=b,p=n.container(),r=0,q=null [...]
++u=10,v=void 0,y=0,Y=void 0,V=void 0,N=void 0,v=void 0,L=m.ownerDocument.createRange(),G=new core.LoopWatchDog(1E4),v=l(p,n.unfilteredDomOffset(),L),Y=v.top,V=void 0===w?v.left:w,N=Y;!0===(0>k?n.previousPosition():n.nextPosition());)if(G.check(),h.acceptPosition(n)===t&&(r+=1,p=n.container(),v=l(p,n.unfilteredDomOffset(),L),v.top!==Y)){if(v.top!==N&&N!==Y)break;N=v.top;v=Math.abs(V-v.left);if(null===q||v<u)q=p,x=n.unfilteredDomOffset(),u=v,y=r}null!==q?(n.setUnfilteredPosition(q,x),r=y): [...]
++d+=r;if(0===d)break;g+=d;a-=1}return g*f}function n(a,c){var b,d,g,f,h=e(),k=u.getParagraphElement(h.getCurrentNode()),n=0,p=m.ownerDocument.createRange();0>a?(b=h.previousPosition,d=-1):(b=h.nextPosition,d=1);for(g=l(h.container(),h.unfilteredDomOffset(),p);b.call(h);)if(c.acceptPosition(h)===t){if(u.getParagraphElement(h.getCurrentNode())!==k)break;f=l(h.container(),h.unfilteredDomOffset(),p);if(f.bottom!==g.bottom&&(g=f.top>=g.top&&f.bottom<g.bottom||f.top<=g.top&&f.bottom>g.bottom,! [...]
++d;g=f}p.detach();return n}function r(a,c,b){runtime.assert(null!==a,"SelectionMover.countStepsToPosition called with element===null");var d=e(),g=d.container(),f=d.unfilteredDomOffset(),h=0,k=new core.LoopWatchDog(1E4);for(d.setUnfilteredPosition(a,c);b.acceptPosition(d)!==t&&d.previousPosition();)k.check();a=d.container();runtime.assert(Boolean(a),"SelectionMover.countStepsToPosition: positionIterator.container() returned null");c=d.unfilteredDomOffset();for(d.setUnfilteredPosition(g,f [...]
++t&&d.previousPosition();)k.check();g=y.comparePoints(a,c,d.container(),d.unfilteredDomOffset());if(0>g)for(;d.nextPosition()&&(k.check(),b.acceptPosition(d)===t&&(h+=1),d.container()!==a||d.unfilteredDomOffset()!==c););else if(0<g)for(;d.previousPosition()&&(k.check(),b.acceptPosition(d)!==t||(h-=1,d.container()!==a||d.unfilteredDomOffset()!==c)););return h}var u,y,x,w,v,t=core.PositionFilter.FilterResult.FILTER_ACCEPT;this.movePointForward=function(a,c){return q(a,c||!1,x.nextPosition) [...]
++function(a,c){return q(a,c||!1,x.previousPosition)};this.getStepCounter=function(){return{countSteps:k,convertForwardStepsBetweenFilters:f,convertBackwardStepsBetweenFilters:b,countLinesSteps:g,countStepsToLineBoundary:n,countStepsToPosition:r,isPositionWalkable:a,countPositionsToNearestStep:c}};(function(){u=new odf.OdfUtils;y=new core.DomUtils;x=gui.SelectionMover.createPositionIterator(m);var a=m.ownerDocument.createRange();a.setStart(x.container(),x.unfilteredDomOffset());a.collapse [...]
++gui.SelectionMover.createPositionIterator=function(h){var m=new function(){this.acceptNode=function(e){return"urn:webodf:names:cursor"===e.namespaceURI||"urn:webodf:names:editinfo"===e.namespaceURI?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}};return new core.PositionIterator(h,5,m,!1)};(function(){return gui.SelectionMover})();
 +// Input 62
 +/*
 +
++ Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
++
++ @licstart
++ The JavaScript code in this page is free software: you can redistribute it
++ and/or modify it under the terms of the GNU Affero General Public License
++ (GNU AGPL) as published by the Free Software Foundation, either version 3 of
++ the License, or (at your option) any later version.  The code is distributed
++ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
++
++ You should have received a copy of the GNU Affero General Public License
++ along with this code.  If not, see <http://www.gnu.org/licenses/>.
++
++ As additional permission under GNU AGPL version 3 section 7, you
++ may distribute non-source (e.g., minimized or compacted) forms of
++ that code without the copy of the GNU GPL normally required by
++ section 4, provided you include this license notice and a URL
++ through which recipients can access the Corresponding Source.
++
++ As a special exception to the AGPL, any HTML file which merely makes function
++ calls to this code, and for that purpose includes it by reference shall be
++ deemed a separate work for copyright law purposes. In addition, the copyright
++ holders of this code give you permission to combine this code with free
++ software libraries that are released under the GNU LGPL. You may copy and
++ distribute such a system following the terms of the GNU AGPL for this code
++ and the LGPL for the libraries. If you modify this code, you may extend this
++ exception to your version of the code, but you are not obligated to do so.
++ If you do not wish to do so, delete this exception statement from your
++ version.
++
++ This license applies to this entire compilation.
++ @licend
++ @source: http://www.webodf.org/
++ @source: https://github.com/kogmbh/WebODF/
++*/
++runtime.loadClass("core.DomUtils");runtime.loadClass("core.PositionFilter");runtime.loadClass("odf.OdfUtils");
++(function(){function h(e,h,l){function q(a,c){function b(a){for(var c=0;a&&a.previousSibling;)c+=1,a=a.previousSibling;return c}this.steps=a;this.node=c;this.setIteratorPosition=function(a){a.setUnfilteredPosition(c.parentNode,b(c));do if(h.acceptPosition(a)===u)break;while(a.nextPosition())}}function a(a){return a.nodeType===Node.ELEMENT_NODE&&a.getAttributeNS(b,"nodeId")}function d(a){var c=m;a.setAttributeNS(b,"nodeId",c.toString());m+=1;return c}function f(d,g){var f,h=null;for(d=d. [...]
++d;!h&&d&&d!==e;)(f=a(d))&&(h=c[f])&&h.node!==d&&(runtime.log("Cloned node detected. Creating new bookmark"),h=null,d.removeAttributeNS(b,"nodeId")),d=d.parentNode;return h}var b="urn:webodf:names:steps",k={},c={},g=new odf.OdfUtils,n=new core.DomUtils,r,u=core.PositionFilter.FilterResult.FILTER_ACCEPT;this.updateCache=function(b,f,e,h){var n;0===e&&g.isParagraph(f)?(n=!0,h||(b+=1)):f.hasChildNodes()&&f.childNodes[e]&&(f=f.childNodes[e],(n=g.isParagraph(f))&&(b+=1));n&&(e=a(f)||d(f),(h=c [...]
++f?h.steps=b:(runtime.log("Cloned node detected. Creating new bookmark"),e=d(f),h=c[e]=new q(b,f)):h=c[e]=new q(b,f),e=h,b=Math.ceil(e.steps/l)*l,f=k[b],!f||e.steps>f.steps)&&(k[b]=e)};this.setToClosestStep=function(a,c){for(var b=Math.floor(a/l)*l,d;!d&&0!==b;)d=k[b],b-=l;d=d||r;d.setIteratorPosition(c);return d.steps};this.setToClosestDomPoint=function(a,c,b){var d;if(a===e&&0===c)d=r;else if(a===e&&c===e.childNodes.length)d=Object.keys(k).map(function(a){return k[a]}).reduce(function( [...]
++a.steps?c:a},r);else if(d=f(a,c),!d)for(b.setUnfilteredPosition(a,c);!d&&b.previousNode();)d=f(b.container(),b.unfilteredDomOffset());d=d||r;d.setIteratorPosition(b);return d.steps};this.updateCacheAtPoint=function(b,d){var g={};Object.keys(c).map(function(a){return c[a]}).filter(function(a){return a.steps>b}).forEach(function(b){var f=Math.ceil(b.steps/l)*l,h,m;if(n.containsNode(e,b.node)){if(d(b),h=Math.ceil(b.steps/l)*l,m=g[h],!m||b.steps>m.steps)g[h]=b}else delete c[a(b.node)];k[f]= [...]
++Object.keys(g).forEach(function(a){k[a]=g[a]})};r=new function(a,c){this.steps=a;this.node=c;this.setIteratorPosition=function(a){a.setUnfilteredPosition(c,0);do if(h.acceptPosition(a)===u)break;while(a.nextPosition())}}(0,e)}var m=0;ops.StepsTranslator=function(e,m,l,q){function a(){var a=e();a!==d&&(runtime.log("Undo detected. Resetting steps cache"),d=a,f=new h(d,l,q),k=m(d))}var d=e(),f=new h(d,l,q),b=new core.DomUtils,k=m(e()),c=core.PositionFilter.FilterResult.FILTER_ACCEPT;this.c [...]
++function(b){var d,e;0>b&&(runtime.log("warn","Requested steps were negative ("+b+")"),b=0);a();for(d=f.setToClosestStep(b,k);d<b&&k.nextPosition();)(e=l.acceptPosition(k)===c)&&(d+=1),f.updateCache(d,k.container(),k.unfilteredDomOffset(),e);d!==b&&runtime.log("warn","Requested "+b+" steps but only "+d+" are available");return{node:k.container(),offset:k.unfilteredDomOffset()}};this.convertDomPointToSteps=function(g,e,h){var m,p,q=0;a();b.containsNode(d,g)||(m=0>b.comparePoints(d,0,g,e), [...]
++d.childNodes.length);k.setUnfilteredPosition(g,e);m=k.container();p=k.unfilteredDomOffset();h&&l.acceptPosition(k)!==c&&(q=1);g=f.setToClosestDomPoint(g,e,k);if(0>b.comparePoints(k.container(),k.unfilteredDomOffset(),m,p))return 0<g&&!h?g-1:g;for(;(k.container()!==m||k.unfilteredDomOffset()!==p)&&k.nextPosition();)(h=l.acceptPosition(k)===c)&&(g+=1),f.updateCache(g,k.container(),k.unfilteredDomOffset(),h);return g+q};this.prime=function(){var b,d;a();for(b=f.setToClosestStep(0,k);k.next [...]
++l.acceptPosition(k)===c)&&(b+=1),f.updateCache(b,k.container(),k.unfilteredDomOffset(),d)};this.handleStepsInserted=function(c){a();f.updateCacheAtPoint(c.position,function(a){a.steps+=c.length})};this.handleStepsRemoved=function(c){a();f.updateCacheAtPoint(c.position,function(a){a.steps-=c.length;0>a.steps&&(a.steps=0)})}};return ops.StepsTranslator})();
++// Input 63
++/*
++
++ Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
++
++ @licstart
++ The JavaScript code in this page is free software: you can redistribute it
++ and/or modify it under the terms of the GNU Affero General Public License
++ (GNU AGPL) as published by the Free Software Foundation, either version 3 of
++ the License, or (at your option) any later version.  The code is distributed
++ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
++
++ You should have received a copy of the GNU Affero General Public License
++ along with this code.  If not, see <http://www.gnu.org/licenses/>.
++
++ As additional permission under GNU AGPL version 3 section 7, you
++ may distribute non-source (e.g., minimized or compacted) forms of
++ that code without the copy of the GNU GPL normally required by
++ section 4, provided you include this license notice and a URL
++ through which recipients can access the Corresponding Source.
++
++ As a special exception to the AGPL, any HTML file which merely makes function
++ calls to this code, and for that purpose includes it by reference shall be
++ deemed a separate work for copyright law purposes. In addition, the copyright
++ holders of this code give you permission to combine this code with free
++ software libraries that are released under the GNU LGPL. You may copy and
++ distribute such a system following the terms of the GNU AGPL for this code
++ and the LGPL for the libraries. If you modify this code, you may extend this
++ exception to your version of the code, but you are not obligated to do so.
++ If you do not wish to do so, delete this exception statement from your
++ version.
++
++ This license applies to this entire compilation.
++ @licend
++ @source: http://www.webodf.org/
++ @source: https://github.com/kogmbh/WebODF/
++*/
++runtime.loadClass("core.PositionFilter");runtime.loadClass("odf.OdfUtils");
++ops.TextPositionFilter=function(h){function m(h,a,d){var f,b;if(a&&(f=e.lookLeftForCharacter(a),1===f||2===f&&(e.scanRightForAnyCharacter(d)||e.scanRightForAnyCharacter(e.nextNode(h)))))return p;f=null===a&&e.isParagraph(h);b=e.lookRightForCharacter(d);if(f)return b?p:e.scanRightForAnyCharacter(d)?l:p;if(!b)return l;a=a||e.previousNode(h);return e.scanLeftForAnyCharacter(a)?l:p}var e=new odf.OdfUtils,p=core.PositionFilter.FilterResult.FILTER_ACCEPT,l=core.PositionFilter.FilterResult.FIL [...]
++this.acceptPosition=function(q){var a=q.container(),d=a.nodeType,f,b,k;if(d!==Node.ELEMENT_NODE&&d!==Node.TEXT_NODE)return l;if(d===Node.TEXT_NODE){if(!e.isGroupingElement(a.parentNode)||e.isWithinTrackedChanges(a.parentNode,h()))return l;d=q.unfilteredDomOffset();f=a.data;runtime.assert(d!==f.length,"Unexpected offset.");if(0<d){q=f.substr(d-1,1);if(!e.isODFWhitespace(q))return p;if(1<d)if(q=f.substr(d-2,1),!e.isODFWhitespace(q))b=p;else{if(!e.isODFWhitespace(f.substr(0,d)))return l}el [...]
++e.scanLeftForNonWhitespace(k)&&(b=p);if(b===p)return e.isTrailingWhitespace(a,d)?l:p;b=f.substr(d,1);return e.isODFWhitespace(b)?l:e.scanLeftForAnyCharacter(e.previousNode(a))?l:p}k=q.leftNode();b=a;a=a.parentNode;b=m(a,k,b)}else!e.isGroupingElement(a)||e.isWithinTrackedChanges(a,h())?b=l:(k=q.leftNode(),b=q.rightNode(),b=m(a,k,b));return b}};
++// Input 64
++/*
++
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + This file is part of WebODF.
 +
 + WebODF is free software: you can redistribute it and/or modify it
 + under the terms of the GNU Affero General Public License (GNU AGPL)
 + as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.
 +
 + WebODF is distributed in the hope that it will be useful, but
 + WITHOUT ANY WARRANTY; without even the implied warranty of
 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + GNU Affero General Public License for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with WebODF.  If not, see <http://www.gnu.org/licenses/>.
 + @licend
 +
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OperationTransformMatrix=function(){function e(a,b){return{opSpecsA:[a],opSpecsB:[b]}}function h(a,b){var c=[];a&&["style:parent-style-name","style:next-style-name"].forEach(function(e){a[e]===b&&c.push(e)});return c}function f(a,b){a&&["style:parent-style-name","style:next-style-name"].forEach(function(c){a[c]===b&&delete a[c]})}function n(a,b,c,e){var f,h,m,n=e&&e.attributes?e.attributes.split(","):[];a&&(c||0<n.length)&&Object.keys(a).forEach(function(b){f=a[b];(c&&void 0!==c[b]| [...]
- "object"!==typeof f&&delete a[b]});if(b&&b.attributes&&(c||0<n.length)){m=b.attributes.split(",");for(e=0;e<m.length;e+=1)if(h=m[e],c&&void 0!==c[h]||n&&-1!==n.indexOf(h))m.splice(e,1),e-=1;0<m.length?b.attributes=m.join(","):delete b.attributes}}function m(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1}function p(a){for(var b in a)if(a.hasOwnProperty(b)&&("attributes"!==b||0<a.attributes.length))return!0;return!1}function c(a,b,c){var e=a.setProperties?a.setProperties[c]:nu [...]
- a.removedProperties[c]:null;n(e,f,b.setProperties?b.setProperties[c]:null,b.removedProperties?b.removedProperties[c]:null);e&&!m(e)&&delete a.setProperties[c];f&&!p(f)&&delete a.removedProperties[c]}var b={AddCursor:{AddCursor:e,AddStyle:e,InsertText:e,MoveCursor:e,RemoveCursor:e,RemoveStyle:e,RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateParagraphStyle:e},AddStyle:{AddStyle:e,InsertText:e,MoveCursor:e,RemoveCursor:e,RemoveStyle:function(a,b){var c,e=[a],m=[b];a.styleFamily=== [...]
- (c=h(a.setProperties,b.styleName),0<c.length&&(c={optype:"UpdateParagraphStyle",memberid:b.memberid,timestamp:b.timestamp,styleName:a.styleName,removedProperties:{attributes:c.join(",")}},m.unshift(c)),f(a.setProperties,b.styleName));return{opSpecsA:e,opSpecsB:m}},RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateParagraphStyle:e},InsertText:{InsertText:function(a,b,c){if(a.position<b.position)b.position+=a.text.length;else if(a.position>b.position)a.position+=b.text.length;else r [...]
- a.text.length:a.position+=b.text.length,null;return{opSpecsA:[a],opSpecsB:[b]}},MoveCursor:function(a,b){a.position<b.position?b.position+=a.text.length:a.position<=b.position+b.length&&(b.length+=a.text.length);return{opSpecsA:[a],opSpecsB:[b]}},RemoveCursor:e,RemoveStyle:e,RemoveText:function(a,b){var c;c=b.position+b.length;var e=[a],f=[b];c<=a.position?a.position-=b.length:a.position<=b.position?b.position+=a.text.length:(b.length=a.position-b.position,c={optype:"RemoveText",memberi [...]
- timestamp:b.timestamp,position:a.position+a.text.length,length:c-a.position},f.unshift(c),a.position=b.position);return{opSpecsA:e,opSpecsB:f}},SplitParagraph:function(a,b,c){if(a.position<b.position)b.position+=a.text.length;else if(a.position>b.position)a.position+=1;else return c?b.position+=a.text.length:a.position+=1,null;return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:e},MoveCursor:{MoveCursor:e,RemoveCursor:function(a,b){return{opSpecsA:a.memberid===b.memberid?[]:[a],opSp [...]
- RemoveStyle:e,RemoveText:function(a,b){var c=a.position+a.length,e=b.position+b.length;e<=a.position?a.position-=b.length:b.position<c&&(a.position<b.position?a.length=e<c?a.length-b.length:b.position-a.position:(a.position=b.position,a.length=e<c?c-e:0));return{opSpecsA:[a],opSpecsB:[b]}},SetParagraphStyle:e,SplitParagraph:function(a,b){b.position<a.position?a.position+=1:b.position<=a.position+a.length&&(a.length+=1);return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:e},RemoveCur [...]
- b){var c=a.memberid===b.memberid;return{opSpecsA:c?[]:[a],opSpecsB:c?[]:[b]}},RemoveStyle:e,RemoveText:e,SetParagraphStyle:e,SplitParagraph:e,UpdateParagraphStyle:e},RemoveStyle:{RemoveStyle:function(a,b){var c=a.styleName===b.styleName&&a.styleFamily===b.styleFamily;return{opSpecsA:c?[]:[a],opSpecsB:c?[]:[b]}},RemoveText:e,SetParagraphStyle:function(a,b){var c,e=[a],f=[b];"paragraph"===a.styleFamily&&a.styleName===b.styleName&&(c={optype:"SetParagraphStyle",memberid:a.memberid,timestam [...]
- position:b.position,styleName:""},e.unshift(c),b.styleName="");return{opSpecsA:e,opSpecsB:f}},SplitParagraph:e,UpdateParagraphStyle:function(a,b){var c,e=[a],m=[b];"paragraph"===a.styleFamily&&(c=h(b.setProperties,a.styleName),0<c.length&&(c={optype:"UpdateParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,styleName:b.styleName,removedProperties:{attributes:c.join(",")}},e.unshift(c)),a.styleName===b.styleName?m=[]:f(b.setProperties,a.styleName));return{opSpecsA:e,opSpecsB:m}}},R [...]
- b){var c=a.position+a.length,e=b.position+b.length,f=[a],h=[b];e<=a.position?a.position-=b.length:c<=b.position?b.position-=a.length:b.position<c&&(a.position<b.position?(a.length=e<c?a.length-b.length:b.position-a.position,c<e?(b.position=a.position,b.length=e-c):h=[]):(c<e?b.length-=a.length:b.position<a.position?b.length=a.position-b.position:h=[],e<c?(a.position=b.position,a.length=c-e):f=[]));return{opSpecsA:f,opSpecsB:h}},SplitParagraph:function(a,b){var c=a.position+a.length,e=[a [...]
- a.position?a.position+=1:b.position<c&&(a.length=b.position-a.position,c={optype:"RemoveText",memberid:a.memberid,timestamp:a.timestamp,position:b.position+1,length:c-b.position},e.unshift(c));a.position+a.length<=b.position?b.position-=a.length:a.position<b.position&&(b.position=a.position);return{opSpecsA:e,opSpecsB:f}},UpdateParagraphStyle:e},SetParagraphStyle:{UpdateParagraphStyle:e},SplitParagraph:{SplitParagraph:function(a,b,c){if(a.position<b.position)b.position+=1;else if(a.posi [...]
- 1;else if(a.position===b.position)return c?b.position+=1:a.position+=1,null;return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:e},UpdateParagraphStyle:{UpdateParagraphStyle:function(a,b,e){var f,h=[a],l=[b];a.styleName===b.styleName&&(f=e?a:b,a=e?b:a,c(a,f,"style:paragraph-properties"),c(a,f,"style:text-properties"),n(a.setProperties||null,a.removedProperties||null,f.setProperties||null,f.removedProperties||null),a.setProperties&&m(a.setProperties)||a.removedProperties&&p(a.removed [...]
- (e?l=[]:h=[]));return{opSpecsA:h,opSpecsB:l}}}};this.passUnchanged=e;this.extendTransformations=function(a){Object.keys(a).forEach(function(c){var e=a[c],f,h=b.hasOwnProperty(c);runtime.log((h?"Extending":"Adding")+" map for optypeA: "+c);h||(b[c]={});f=b[c];Object.keys(e).forEach(function(a){var b=f.hasOwnProperty(a);runtime.assert(c<=a,"Wrong order:"+c+", "+a);runtime.log("  "+(b?"Overwriting":"Adding")+" entry for optypeB: "+a);f[a]=e[a]})})};this.transformOpspecVsOpspec=function(a,c [...]
- c.optype,f;runtime.log("Crosstransforming:");runtime.log(runtime.toJson(a));runtime.log(runtime.toJson(c));e||(f=a,a=c,c=f);(f=(f=b[a.optype])&&f[c.optype])?(f=f(a,c,!e),e||null===f||(f={opSpecsA:f.opSpecsB,opSpecsB:f.opSpecsA})):f=null;runtime.log("result:");f?(runtime.log(runtime.toJson(f.opSpecsA)),runtime.log(runtime.toJson(f.opSpecsB))):runtime.log("null");return f}};
- // Input 63
++ops.OperationTransformMatrix=function(){function h(a){a.position+=a.length;a.length*=-1}function m(a){var b=0>a.length;b&&h(a);return b}function e(a,b){var d=[];a&&["style:parent-style-name","style:next-style-name"].forEach(function(f){a[f]===b&&d.push(f)});return d}function p(a,b){a&&["style:parent-style-name","style:next-style-name"].forEach(function(d){a[d]===b&&delete a[d]})}function l(a){var b={};Object.keys(a).forEach(function(d){b[d]="object"===typeof a[d]?l(a[d]):a[d]});return b [...]
++b,d,f){var e,h,k=!1,l=!1,m,p,q=f&&f.attributes?f.attributes.split(","):[];a&&(d||0<q.length)&&Object.keys(a).forEach(function(b){e=a[b];"object"!==typeof e&&(m=d&&d[b],void 0!==m?(delete a[b],l=!0,m===e&&(delete d[b],k=!0)):q&&-1!==q.indexOf(b)&&(delete a[b],l=!0))});if(b&&b.attributes&&(d||0<q.length)){p=b.attributes.split(",");for(f=0;f<p.length;f+=1)if(h=p[f],d&&void 0!==d[h]||q&&-1!==q.indexOf(h))p.splice(f,1),f-=1,l=!0;0<p.length?b.attributes=p.join(","):delete b.attributes}return{ [...]
++minorChanged:l}}function a(a){for(var b in a)if(a.hasOwnProperty(b))return!0;return!1}function d(a){for(var b in a)if(a.hasOwnProperty(b)&&("attributes"!==b||0<a.attributes.length))return!0;return!1}function f(c,b,f){var e=c.setProperties?c.setProperties[f]:null,h=c.removedProperties?c.removedProperties[f]:null,k=b.setProperties?b.setProperties[f]:null,l=b.removedProperties?b.removedProperties[f]:null,m;m=q(e,h,k,l);e&&!a(e)&&delete c.setProperties[f];h&&!d(h)&&delete c.removedPropertie [...]
++delete b.setProperties[f];l&&!d(l)&&delete b.removedProperties[f];return m}function b(a,b){return{opSpecsA:[a],opSpecsB:[b]}}var k={AddCursor:{AddCursor:b,AddStyle:b,ApplyDirectStyling:b,InsertText:b,MoveCursor:b,RemoveCursor:b,RemoveStyle:b,RemoveText:b,SetParagraphStyle:b,SplitParagraph:b,UpdateParagraphStyle:b},AddStyle:{AddStyle:b,ApplyDirectStyling:b,InsertText:b,MoveCursor:b,RemoveCursor:b,RemoveStyle:function(a,b){var d,f=[a],h=[b];a.styleFamily===b.styleFamily&&(d=e(a.setPropert [...]
++0<d.length&&(d={optype:"UpdateParagraphStyle",memberid:b.memberid,timestamp:b.timestamp,styleName:a.styleName,removedProperties:{attributes:d.join(",")}},h.unshift(d)),p(a.setProperties,b.styleName));return{opSpecsA:f,opSpecsB:h}},RemoveText:b,SetParagraphStyle:b,SplitParagraph:b,UpdateParagraphStyle:b},ApplyDirectStyling:{ApplyDirectStyling:function(c,b,d){var e,h,k,m,p,q,t,s;m=[c];k=[b];if(!(c.position+c.length<=b.position||c.position>=b.position+b.length)){e=d?c:b;h=d?b:c;if(c.positi [...]
++c.length!==b.length)q=l(e),t=l(h);b=f(h,e,"style:text-properties");if(b.majorChanged||b.minorChanged)k=[],c=[],m=e.position+e.length,p=h.position+h.length,h.position<e.position?b.minorChanged&&(s=l(t),s.length=e.position-h.position,c.push(s),h.position=e.position,h.length=p-h.position):e.position<h.position&&b.majorChanged&&(s=l(q),s.length=h.position-e.position,k.push(s),e.position=h.position,e.length=m-e.position),p>m?b.minorChanged&&(q=t,q.position=m,q.length=p-m,c.push(q),h.length=m [...]
++m>p&&b.majorChanged&&(q.position=p,q.length=m-p,k.push(q),e.length=p-e.position),e.setProperties&&a(e.setProperties)&&k.push(e),h.setProperties&&a(h.setProperties)&&c.push(h),d?(m=k,k=c):m=c}return{opSpecsA:m,opSpecsB:k}},InsertText:function(a,b){b.position<=a.position?a.position+=b.text.length:b.position<=a.position+a.length&&(a.length+=b.text.length);return{opSpecsA:[a],opSpecsB:[b]}},MoveCursor:b,RemoveCursor:b,RemoveStyle:b,RemoveText:function(a,b){var d=a.position+a.length,f=b.posi [...]
++e=[a],h=[b];f<=a.position?a.position-=b.length:b.position<d&&(a.position<b.position?a.length=f<d?a.length-b.length:b.position-a.position:(a.position=b.position,f<d?a.length=d-f:e=[]));return{opSpecsA:e,opSpecsB:h}},SetParagraphStyle:b,SplitParagraph:function(a,b){b.position<a.position?a.position+=1:b.position<a.position+a.length&&(a.length+=1);return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:b},InsertText:{InsertText:function(a,b,d){if(a.position<b.position)b.position+=a.text.len [...]
++b.position)a.position+=b.text.length;else return d?b.position+=a.text.length:a.position+=b.text.length,null;return{opSpecsA:[a],opSpecsB:[b]}},MoveCursor:function(a,b){var d=m(b);a.position<b.position?b.position+=a.text.length:a.position<b.position+b.length&&(b.length+=a.text.length);d&&h(b);return{opSpecsA:[a],opSpecsB:[b]}},RemoveCursor:b,RemoveStyle:b,RemoveText:function(a,b){var d;d=b.position+b.length;var f=[a],e=[b];d<=a.position?a.position-=b.length:a.position<=b.position?b.posit [...]
++(b.length=a.position-b.position,d={optype:"RemoveText",memberid:b.memberid,timestamp:b.timestamp,position:a.position+a.text.length,length:d-a.position},e.unshift(d),a.position=b.position);return{opSpecsA:f,opSpecsB:e}},SplitParagraph:function(a,b,d){if(a.position<b.position)b.position+=a.text.length;else if(a.position>b.position)a.position+=1;else return d?b.position+=a.text.length:a.position+=1,null;return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:b},MoveCursor:{MoveCursor:b,Rem [...]
++b){return{opSpecsA:a.memberid===b.memberid?[]:[a],opSpecsB:[b]}},RemoveStyle:b,RemoveText:function(a,b){var d=m(a),f=a.position+a.length,e=b.position+b.length;e<=a.position?a.position-=b.length:b.position<f&&(a.position<b.position?a.length=e<f?a.length-b.length:b.position-a.position:(a.position=b.position,a.length=e<f?f-e:0));d&&h(a);return{opSpecsA:[a],opSpecsB:[b]}},SetParagraphStyle:b,SplitParagraph:function(a,b){var d=m(a);b.position<a.position?a.position+=1:b.position<a.position+a. [...]
++1);d&&h(a);return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:b},RemoveCursor:{RemoveCursor:function(a,b){var d=a.memberid===b.memberid;return{opSpecsA:d?[]:[a],opSpecsB:d?[]:[b]}},RemoveStyle:b,RemoveText:b,SetParagraphStyle:b,SplitParagraph:b,UpdateParagraphStyle:b},RemoveStyle:{RemoveStyle:function(a,b){var d=a.styleName===b.styleName&&a.styleFamily===b.styleFamily;return{opSpecsA:d?[]:[a],opSpecsB:d?[]:[b]}},RemoveText:b,SetParagraphStyle:function(a,b){var d,f=[a],e=[b];"paragr [...]
++a.styleName===b.styleName&&(d={optype:"SetParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,position:b.position,styleName:""},f.unshift(d),b.styleName="");return{opSpecsA:f,opSpecsB:e}},SplitParagraph:b,UpdateParagraphStyle:function(a,b){var d,f=[a],h=[b];"paragraph"===a.styleFamily&&(d=e(b.setProperties,a.styleName),0<d.length&&(d={optype:"UpdateParagraphStyle",memberid:a.memberid,timestamp:a.timestamp,styleName:b.styleName,removedProperties:{attributes:d.join(",")}},f.unshift( [...]
++b.styleName?h=[]:p(b.setProperties,a.styleName));return{opSpecsA:f,opSpecsB:h}}},RemoveText:{RemoveText:function(a,b){var d=a.position+a.length,f=b.position+b.length,e=[a],h=[b];f<=a.position?a.position-=b.length:d<=b.position?b.position-=a.length:b.position<d&&(a.position<b.position?(a.length=f<d?a.length-b.length:b.position-a.position,d<f?(b.position=a.position,b.length=f-d):h=[]):(d<f?b.length-=a.length:b.position<a.position?b.length=a.position-b.position:h=[],f<d?(a.position=b.posit [...]
++d-f):e=[]));return{opSpecsA:e,opSpecsB:h}},SplitParagraph:function(a,b){var d=a.position+a.length,f=[a],e=[b];b.position<=a.position?a.position+=1:b.position<d&&(a.length=b.position-a.position,d={optype:"RemoveText",memberid:a.memberid,timestamp:a.timestamp,position:b.position+1,length:d-b.position},f.unshift(d));a.position+a.length<=b.position?b.position-=a.length:a.position<b.position&&(b.position=a.position);return{opSpecsA:f,opSpecsB:e}},UpdateParagraphStyle:b},SetParagraphStyle:{Up [...]
++SplitParagraph:{SplitParagraph:function(a,b,d){if(a.position<b.position)b.position+=1;else if(a.position>b.position)a.position+=1;else if(a.position===b.position)return d?b.position+=1:a.position+=1,null;return{opSpecsA:[a],opSpecsB:[b]}},UpdateParagraphStyle:b},UpdateParagraphStyle:{UpdateParagraphStyle:function(b,e,h){var k,l=[b],m=[e];b.styleName===e.styleName&&(k=h?b:e,b=h?e:b,f(b,k,"style:paragraph-properties"),f(b,k,"style:text-properties"),q(b.setProperties||null,b.removedPropert [...]
++k.setProperties||null,k.removedProperties||null),k.setProperties&&a(k.setProperties)||k.removedProperties&&d(k.removedProperties)||(h?l=[]:m=[]),b.setProperties&&a(b.setProperties)||b.removedProperties&&d(b.removedProperties)||(h?m=[]:l=[]));return{opSpecsA:l,opSpecsB:m}}}};this.passUnchanged=b;this.extendTransformations=function(a){Object.keys(a).forEach(function(b){var d=a[b],f,e=k.hasOwnProperty(b);runtime.log((e?"Extending":"Adding")+" map for optypeA: "+b);e||(k[b]={});f=k[b];Objec [...]
++f.hasOwnProperty(a);runtime.assert(b<=a,"Wrong order:"+b+", "+a);runtime.log("  "+(c?"Overwriting":"Adding")+" entry for optypeB: "+a);f[a]=d[a]})})};this.transformOpspecVsOpspec=function(a,b){var d=a.optype<=b.optype,f;runtime.log("Crosstransforming:");runtime.log(runtime.toJson(a));runtime.log(runtime.toJson(b));d||(f=a,a=b,b=f);(f=(f=k[a.optype])&&f[b.optype])?(f=f(a,b,!d),d||null===f||(f={opSpecsA:f.opSpecsB,opSpecsB:f.opSpecsA})):f=null;runtime.log("result:");f?(runtime.log(runtime [...]
++runtime.log(runtime.toJson(f.opSpecsB))):runtime.log("null");return f}};
++// Input 65
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + This file is part of WebODF.
 +
 + WebODF is free software: you can redistribute it and/or modify it
 + under the terms of the GNU Affero General Public License (GNU AGPL)
 + as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.
 +
 + WebODF is distributed in the hope that it will be useful, but
 + WITHOUT ANY WARRANTY; without even the implied warranty of
 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 + GNU Affero General Public License for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with WebODF.  If not, see <http://www.gnu.org/licenses/>.
 + @licend
 +
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.OperationFactory");runtime.loadClass("ops.OperationTransformMatrix");
- ops.OperationTransformer=function(){function e(e){var h=[];e.forEach(function(c){h.push(f.create(c))});return h}function h(e,f){for(var c,b,a=[],d=[];0<e.length&&f;){c=e.shift();c=n.transformOpspecVsOpspec(c,f);if(!c)return null;a=a.concat(c.opSpecsA);if(0===c.opSpecsB.length){a=a.concat(e);f=null;break}for(;1<c.opSpecsB.length;){b=h(e,c.opSpecsB.shift());if(!b)return null;d=d.concat(b.opSpecsB);e=b.opSpecsA}f=c.opSpecsB.pop()}f&&d.push(f);return{opSpecsA:a,opSpecsB:d}}var f,n=new ops.O [...]
- this.setOperationFactory=function(e){f=e};this.getOperationTransformMatrix=function(){return n};this.transform=function(f,n){for(var c,b=[];0<n.length;){c=h(f,n.shift());if(!c)return null;f=c.opSpecsA;b=b.concat(c.opSpecsB)}return{opsA:e(f),opsB:e(b)}}};
- // Input 64
++ops.OperationTransformer=function(){function h(h){var m=[];h.forEach(function(a){m.push(e.create(a))});return m}function m(e,h){for(var a,d,f=[],b=[];0<e.length&&h;){a=e.shift();a=p.transformOpspecVsOpspec(a,h);if(!a)return null;f=f.concat(a.opSpecsA);if(0===a.opSpecsB.length){f=f.concat(e);h=null;break}for(;1<a.opSpecsB.length;){d=m(e,a.opSpecsB.shift());if(!d)return null;b=b.concat(d.opSpecsB);e=d.opSpecsA}h=a.opSpecsB.pop()}h&&b.push(h);return{opSpecsA:f,opSpecsB:b}}var e,p=new ops.O [...]
++this.setOperationFactory=function(h){e=h};this.getOperationTransformMatrix=function(){return p};this.transform=function(e,p){for(var a,d=[];0<p.length;){a=m(e,p.shift());if(!a)return null;e=a.opSpecsA;d=d.concat(a.opSpecsB)}return{opsA:h(e),opsB:h(d)}}};
++// Input 66
 +runtime.loadClass("core.Cursor");runtime.loadClass("gui.SelectionMover");
- ops.OdtCursor=function(e,h){var f=this,n={},m,p,c;this.removeFromOdtDocument=function(){c.remove()};this.move=function(b,a){var c=0;0<b?c=p.movePointForward(b,a):0>=b&&(c=-p.movePointBackward(-b,a));f.handleUpdate();return c};this.handleUpdate=function(){};this.getStepCounter=function(){return p.getStepCounter()};this.getMemberId=function(){return e};this.getNode=function(){return c.getNode()};this.getAnchorNode=function(){return c.getAnchorNode()};this.getSelectedRange=function(){retur [...]
- this.setSelectedRange=function(b,a){c.setSelectedRange(b,a)};this.hasForwardSelection=function(){return c.hasForwardSelection()};this.getOdtDocument=function(){return h};this.getSelectionType=function(){return m};this.setSelectionType=function(b){n.hasOwnProperty(b)?m=b:runtime.log("Invalid selection type: "+b)};this.resetSelectionType=function(){f.setSelectionType(ops.OdtCursor.RangeSelection)};c=new core.Cursor(h.getDOM(),e);p=new gui.SelectionMover(c,h.getRootNode());n[ops.OdtCursor. [...]
- !0;n[ops.OdtCursor.RegionSelection]=!0;f.resetSelectionType()};ops.OdtCursor.RangeSelection="Range";ops.OdtCursor.RegionSelection="Region";(function(){return ops.OdtCursor})();
- // Input 65
++ops.OdtCursor=function(h,m){var e=this,p={},l,q,a;this.removeFromOdtDocument=function(){a.remove()};this.move=function(a,f){var b=0;0<a?b=q.movePointForward(a,f):0>=a&&(b=-q.movePointBackward(-a,f));e.handleUpdate();return b};this.handleUpdate=function(){};this.getStepCounter=function(){return q.getStepCounter()};this.getMemberId=function(){return h};this.getNode=function(){return a.getNode()};this.getAnchorNode=function(){return a.getAnchorNode()};this.getSelectedRange=function(){retur [...]
++this.setSelectedRange=function(d,f){a.setSelectedRange(d,f);e.handleUpdate()};this.hasForwardSelection=function(){return a.hasForwardSelection()};this.getOdtDocument=function(){return m};this.getSelectionType=function(){return l};this.setSelectionType=function(a){p.hasOwnProperty(a)?l=a:runtime.log("Invalid selection type: "+a)};this.resetSelectionType=function(){e.setSelectionType(ops.OdtCursor.RangeSelection)};a=new core.Cursor(m.getDOM(),h);q=new gui.SelectionMover(a,m.getRootNode()) [...]
++!0;p[ops.OdtCursor.RegionSelection]=!0;e.resetSelectionType()};ops.OdtCursor.RangeSelection="Range";ops.OdtCursor.RegionSelection="Region";(function(){return ops.OdtCursor})();
++// Input 67
 +/*
 +
 + Copyright (C) 2012 KO GmbH <aditya.bhatt at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.EditInfo=function(e,h){function f(){var e=[],c;for(c in m)m.hasOwnProperty(c)&&e.push({memberid:c,time:m[c].time});e.sort(function(b,a){return b.time-a.time});return e}var n,m={};this.getNode=function(){return n};this.getOdtDocument=function(){return h};this.getEdits=function(){return m};this.getSortedEdits=function(){return f()};this.addEdit=function(e,c){m[e]={time:c}};this.clearEdits=function(){m={}};this.destroy=function(f){e.parentNode&&e.removeChild(n);f()};n=h.getDOM().create [...]
- "editinfo");e.insertBefore(n,e.firstChild)};
- // Input 66
- runtime.loadClass("gui.SelectionMover");gui.ShadowCursor=function(e){var h=e.getDOM().createRange(),f=!0;this.removeFromOdtDocument=function(){};this.getMemberId=function(){return gui.ShadowCursor.ShadowCursorMemberId};this.getSelectedRange=function(){return h};this.setSelectedRange=function(e,m){h=e;f=!1!==m};this.hasForwardSelection=function(){return f};this.getOdtDocument=function(){return e};this.getSelectionType=function(){return ops.OdtCursor.RangeSelection};h.setStart(e.getRootNo [...]
- gui.ShadowCursor.ShadowCursorMemberId="";(function(){return gui.ShadowCursor})();
- // Input 67
- gui.Avatar=function(e,h){var f=this,n,m,p;this.setColor=function(c){m.style.borderColor=c};this.setImageUrl=function(c){f.isVisible()?m.src=c:p=c};this.isVisible=function(){return"block"===n.style.display};this.show=function(){p&&(m.src=p,p=void 0);n.style.display="block"};this.hide=function(){n.style.display="none"};this.markAsFocussed=function(c){n.className=c?"active":""};this.destroy=function(c){e.removeChild(n);c()};(function(){var c=e.ownerDocument,b=c.documentElement.namespaceURI [...]
- "div");m=c.createElementNS(b,"img");m.width=64;m.height=64;n.appendChild(m);n.style.width="64px";n.style.height="70px";n.style.position="absolute";n.style.top="-80px";n.style.left="-34px";n.style.display=h?"block":"none";e.appendChild(n)})()};
++ops.EditInfo=function(h,m){function e(){var e=[],a;for(a in l)l.hasOwnProperty(a)&&e.push({memberid:a,time:l[a].time});e.sort(function(a,f){return a.time-f.time});return e}var p,l={};this.getNode=function(){return p};this.getOdtDocument=function(){return m};this.getEdits=function(){return l};this.getSortedEdits=function(){return e()};this.addEdit=function(e,a){l[e]={time:a}};this.clearEdits=function(){l={}};this.destroy=function(e){h.parentNode&&h.removeChild(p);e()};p=m.getDOM().create [...]
++"editinfo");h.insertBefore(p,h.firstChild)};
 +// Input 68
- runtime.loadClass("core.DomUtils");runtime.loadClass("gui.Avatar");runtime.loadClass("ops.OdtCursor");
- gui.Caret=function(e,h,f){function n(b){k&&a.parentNode&&(!g||b)&&(b&&void 0!==q&&runtime.clearTimeout(q),g=!0,c.style.opacity=b||"0"===c.style.opacity?"1":"0",q=runtime.setTimeout(function(){g=!1;n(!1)},500))}function m(a,b){var c=a.getBoundingClientRect(),d=0,e=0;c&&b&&(d=Math.max(c.top,b.top),e=Math.min(c.bottom,b.bottom));return e-d}function p(){var a;a=e.getSelectedRange().cloneRange();var b=e.getNode(),f,g=null;b.previousSibling&&(f=b.previousSibling.nodeType===Node.TEXT_NODE?b.pr [...]
- b.previousSibling.childNodes.length,a.setStart(b.previousSibling,0<f?f-1:0),a.setEnd(b.previousSibling,f),(f=a.getBoundingClientRect())&&f.height&&(g=f));b.nextSibling&&(a.setStart(b.nextSibling,0),a.setEnd(b.nextSibling,0<(b.nextSibling.nodeType===Node.TEXT_NODE?b.nextSibling.textContent.length:b.nextSibling.childNodes.length)?1:0),(f=a.getBoundingClientRect())&&f.height&&(!g||m(b,f)>m(b,g))&&(g=f));a=g;b=e.getOdtDocument().getOdfCanvas().getZoomLevel();d&&e.getSelectionType()===ops.Od [...]
- c.style.visibility="visible":c.style.visibility="hidden";a?(c.style.top="0",g=c.ownerDocument.createRange(),g.selectNode(c),f=g.getBoundingClientRect(),g.detach(),8>a.height&&(a={top:a.top-(8-a.height)/2,height:8}),c.style.height=l.adaptRangeDifferenceToZoomLevel(a.height,b)+"px",c.style.top=l.adaptRangeDifferenceToZoomLevel(a.top-f.top,b)+"px"):(c.style.height="1em",c.style.top="5%")}var c,b,a,d=!0,k=!1,g=!1,q,l=new core.DomUtils;this.handleUpdate=p;this.refreshCursorBlinking=function( [...]
- (k=!0,n(!0)):(k=!1,c.style.opacity="0")};this.setFocus=function(){k=!0;b.markAsFocussed(!0);n(!0)};this.removeFocus=function(){k=!1;b.markAsFocussed(!1);c.style.opacity="1"};this.show=function(){d=!0;p();b.markAsFocussed(!0)};this.hide=function(){d=!1;p();b.markAsFocussed(!1)};this.setAvatarImageUrl=function(a){b.setImageUrl(a)};this.setColor=function(a){c.style.borderColor=a;b.setColor(a)};this.getCursor=function(){return e};this.getFocusElement=function(){return c};this.toggleHandleVi [...]
- b.hide():b.show()};this.showHandle=function(){b.show()};this.hideHandle=function(){b.hide()};this.ensureVisible=function(){var a,b,d,f,g=e.getOdtDocument().getOdfCanvas().getElement().parentNode,h;d=g.offsetWidth-g.clientWidth+5;f=g.offsetHeight-g.clientHeight+5;h=c.getBoundingClientRect();a=h.left-d;b=h.top-f;d=h.right+d;f=h.bottom+f;h=g.getBoundingClientRect();b<h.top?g.scrollTop-=h.top-b:f>h.bottom&&(g.scrollTop+=f-h.bottom);a<h.left?g.scrollLeft-=h.left-a:d>h.right&&(g.scrollLeft+=d [...]
- p()};this.destroy=function(d){b.destroy(function(b){b?d(b):(a.removeChild(c),d())})};(function(){var d=e.getOdtDocument().getDOM();c=d.createElementNS(d.documentElement.namespaceURI,"span");c.style.top="5%";a=e.getNode();a.appendChild(c);b=new gui.Avatar(a,h);p()})()};
++runtime.loadClass("gui.SelectionMover");gui.ShadowCursor=function(h){var m=h.getDOM().createRange(),e=!0;this.removeFromOdtDocument=function(){};this.getMemberId=function(){return gui.ShadowCursor.ShadowCursorMemberId};this.getSelectedRange=function(){return m};this.setSelectedRange=function(h,l){m=h;e=!1!==l};this.hasForwardSelection=function(){return e};this.getOdtDocument=function(){return h};this.getSelectionType=function(){return ops.OdtCursor.RangeSelection};m.setStart(h.getRootNo [...]
++gui.ShadowCursor.ShadowCursorMemberId="";(function(){return gui.ShadowCursor})();
 +// Input 69
++gui.Avatar=function(h,m){var e=this,p,l,q;this.setColor=function(a){l.style.borderColor=a};this.setImageUrl=function(a){e.isVisible()?l.src=a:q=a};this.isVisible=function(){return"block"===p.style.display};this.show=function(){q&&(l.src=q,q=void 0);p.style.display="block"};this.hide=function(){p.style.display="none"};this.markAsFocussed=function(a){p.className=a?"active":""};this.destroy=function(a){h.removeChild(p);a()};(function(){var a=h.ownerDocument,d=a.documentElement.namespaceURI [...]
++"div");l=a.createElementNS(d,"img");l.width=64;l.height=64;p.appendChild(l);p.style.width="64px";p.style.height="70px";p.style.position="absolute";p.style.top="-80px";p.style.left="-34px";p.style.display=m?"block":"none";h.appendChild(p)})()};
++// Input 70
++runtime.loadClass("core.DomUtils");runtime.loadClass("gui.Avatar");runtime.loadClass("ops.OdtCursor");
++gui.Caret=function(h,m,e){function p(b){k&&f.parentNode&&(!c||b)&&(b&&void 0!==g&&runtime.clearTimeout(g),c=!0,a.style.opacity=b||"0"===a.style.opacity?"1":"0",g=runtime.setTimeout(function(){c=!1;p(!1)},500))}function l(a,b){var c=a.getBoundingClientRect(),d=0,f=0;c&&b&&(d=Math.max(c.top,b.top),f=Math.min(c.bottom,b.bottom));return f-d}function q(){var c;c=h.getSelectedRange().cloneRange();var d=h.getNode(),f,e=null;d.previousSibling&&(f=d.previousSibling.nodeType===Node.TEXT_NODE?d.pr [...]
++d.previousSibling.childNodes.length,c.setStart(d.previousSibling,0<f?f-1:0),c.setEnd(d.previousSibling,f),(f=c.getBoundingClientRect())&&f.height&&(e=f));d.nextSibling&&(c.setStart(d.nextSibling,0),c.setEnd(d.nextSibling,0<(d.nextSibling.nodeType===Node.TEXT_NODE?d.nextSibling.textContent.length:d.nextSibling.childNodes.length)?1:0),(f=c.getBoundingClientRect())&&f.height&&(!e||l(d,f)>l(d,e))&&(e=f));c=e;d=h.getOdtDocument().getOdfCanvas().getZoomLevel();b&&h.getSelectionType()===ops.Od [...]
++a.style.visibility="visible":a.style.visibility="hidden";c?(a.style.top="0",e=a.ownerDocument.createRange(),e.selectNode(a),f=e.getBoundingClientRect(),e.detach(),8>c.height&&(c={top:c.top-(8-c.height)/2,height:8}),a.style.height=n.adaptRangeDifferenceToZoomLevel(c.height,d)+"px",a.style.top=n.adaptRangeDifferenceToZoomLevel(c.top-f.top,d)+"px"):(a.style.height="1em",a.style.top="5%")}var a,d,f,b=!0,k=!1,c=!1,g,n=new core.DomUtils;this.handleUpdate=q;this.refreshCursorBlinking=function( [...]
++(k=!0,p(!0)):(k=!1,a.style.opacity="0")};this.setFocus=function(){k=!0;d.markAsFocussed(!0);p(!0)};this.removeFocus=function(){k=!1;d.markAsFocussed(!1);a.style.opacity="1"};this.show=function(){b=!0;q();d.markAsFocussed(!0)};this.hide=function(){b=!1;q();d.markAsFocussed(!1)};this.setAvatarImageUrl=function(a){d.setImageUrl(a)};this.setColor=function(b){a.style.borderColor=b;d.setColor(b)};this.getCursor=function(){return h};this.getFocusElement=function(){return a};this.toggleHandleVi [...]
++d.hide():d.show()};this.showHandle=function(){d.show()};this.hideHandle=function(){d.hide()};this.ensureVisible=function(){var b,c,d,f,e=h.getOdtDocument().getOdfCanvas().getElement().parentNode,g;d=e.offsetWidth-e.clientWidth+5;f=e.offsetHeight-e.clientHeight+5;g=a.getBoundingClientRect();b=g.left-d;c=g.top-f;d=g.right+d;f=g.bottom+f;g=e.getBoundingClientRect();c<g.top?e.scrollTop-=g.top-c:f>g.bottom&&(e.scrollTop+=f-g.bottom);b<g.left?e.scrollLeft-=g.left-b:d>g.right&&(e.scrollLeft+=d [...]
++q()};this.destroy=function(b){d.destroy(function(c){c?b(c):(f.removeChild(a),b())})};(function(){var b=h.getOdtDocument().getDOM();a=b.createElementNS(b.documentElement.namespaceURI,"span");a.style.top="5%";f=h.getNode();f.appendChild(a);d=new gui.Avatar(f,m);q()})()};
++// Input 71
++/*
++
++ Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
++
++ @licstart
++ The JavaScript code in this page is free software: you can redistribute it
++ and/or modify it under the terms of the GNU Affero General Public License
++ (GNU AGPL) as published by the Free Software Foundation, either version 3 of
++ the License, or (at your option) any later version.  The code is distributed
++ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
++
++ You should have received a copy of the GNU Affero General Public License
++ along with this code.  If not, see <http://www.gnu.org/licenses/>.
++
++ As additional permission under GNU AGPL version 3 section 7, you
++ may distribute non-source (e.g., minimized or compacted) forms of
++ that code without the copy of the GNU GPL normally required by
++ section 4, provided you include this license notice and a URL
++ through which recipients can access the Corresponding Source.
++
++ As a special exception to the AGPL, any HTML file which merely makes function
++ calls to this code, and for that purpose includes it by reference shall be
++ deemed a separate work for copyright law purposes. In addition, the copyright
++ holders of this code give you permission to combine this code with free
++ software libraries that are released under the GNU LGPL. You may copy and
++ distribute such a system following the terms of the GNU AGPL for this code
++ and the LGPL for the libraries. If you modify this code, you may extend this
++ exception to your version of the code, but you are not obligated to do so.
++ If you do not wish to do so, delete this exception statement from your
++ version.
++
++ This license applies to this entire compilation.
++ @licend
++ @source: http://www.webodf.org/
++ @source: https://github.com/kogmbh/WebODF/
++*/
++gui.PlainTextPasteboard=function(h,m){function e(e,h){e.init(h);return e}this.createPasteOps=function(p){var l=h.getCursorPosition(m),q=l,a=[];p.replace(/\r/g,"").split("\n").forEach(function(d){a.push(e(new ops.OpSplitParagraph,{memberid:m,position:q}));q+=1;a.push(e(new ops.OpInsertText,{memberid:m,position:q,text:d}));q+=d.length});a.push(e(new ops.OpRemoveText,{memberid:m,position:l,length:1}));return a}};
++// Input 72
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("odf.Namespaces");runtime.loadClass("xmldom.LSSerializer");runtime.loadClass("odf.OdfNodeFilter");runtime.loadClass("odf.TextSerializer");
- gui.Clipboard=function(){var e,h,f;this.setDataFromRange=function(f,m){var p=!0,c,b=f.clipboardData;c=runtime.getWindow();var a=m.startContainer.ownerDocument;!b&&c&&(b=c.clipboardData);b?(a=a.createElement("span"),a.appendChild(m.cloneContents()),c=b.setData("text/plain",h.writeToString(a)),p=p&&c,c=b.setData("text/html",e.writeToString(a,odf.Namespaces.namespaceMap)),p=p&&c,f.preventDefault()):p=!1;return p};e=new xmldom.LSSerializer;h=new odf.TextSerializer;f=new odf.OdfNodeFilter;e. [...]
- f};
- // Input 70
++gui.Clipboard=function(){var h,m,e;this.setDataFromRange=function(e,l){var q=!0,a,d=e.clipboardData;a=runtime.getWindow();var f=l.startContainer.ownerDocument;!d&&a&&(d=a.clipboardData);d?(f=f.createElement("span"),f.appendChild(l.cloneContents()),a=d.setData("text/plain",m.writeToString(f)),q=q&&a,a=d.setData("text/html",h.writeToString(f,odf.Namespaces.namespaceMap)),q=q&&a,e.preventDefault()):q=!1;return q};h=new xmldom.LSSerializer;m=new odf.TextSerializer;e=new odf.OdfNodeFilter;h. [...]
++e};
++// Input 73
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");runtime.loadClass("core.Utils");runtime.loadClass("ops.OpApplyDirectStyling");runtime.loadClass("gui.StyleHelper");
- gui.DirectTextStyler=function(e,h){function f(a,b){for(var c=0,d=b[c];d&&a;)a=a[d],c+=1,d=b[c];return b.length===c?a:void 0}function n(a,b){var c=f(a[0],b);return a.every(function(a){return c===f(a,b)})?c:void 0}function m(){var a=u.getCursor(h),a=(a=a&&a.getSelectedRange())&&s.getAppliedStyles(a)||[];a[0]&&B&&(a[0]=x.mergeObjects(a[0],B));return a}function p(){function a(b,d,e){b!==d&&(void 0===c&&(c={}),c[e]=d);return d}var b,c;A=m();I=a(I,A?s.isBold(A):!1,"isBold");z=a(z,A?s.isItalic [...]
- N=a(N,A?s.hasUnderline(A):!1,"hasUnderline");G=a(G,A?s.hasStrikeThrough(A):!1,"hasStrikeThrough");b=A&&n(A,["style:text-properties","fo:font-size"]);R=a(R,b&&parseFloat(b),"fontSize");Z=a(Z,A&&n(A,["style:text-properties","style:font-name"]),"fontName");c&&C.emit(gui.DirectTextStyler.textStylingChanged,c)}function c(a){a.getMemberId()===h&&p()}function b(a){a===h&&p()}function a(a){a.getMemberId()===h&&p()}function d(){p()}function k(a){var b=u.getCursor(h);b&&u.getParagraphElement(b.ge [...]
- a.paragraphElement&&p()}function g(a,b){var c=u.getCursor(h);if(!c)return!1;c=s.getAppliedStyles(c.getSelectedRange());b(!a(c));return!0}function q(a){var b=u.getCursorSelection(h),c={"style:text-properties":a};0!==b.length?(a=new ops.OpApplyDirectStyling,a.init({memberid:h,position:b.position,length:b.length,setProperties:c}),e.enqueue([a])):(B=x.mergeObjects(B||{},c),p())}function l(a,b){var c={};c[a]=b;q(c)}function r(a){a=a.spec();B&&a.memberid===h&&"SplitParagraph"!==a.optype&&(B=n [...]
- a?"bold":"normal")}function w(a){l("fo:font-style",a?"italic":"normal")}function v(a){l("style:text-underline-style",a?"solid":"none")}function y(a){l("style:text-line-through-style",a?"solid":"none")}var x=new core.Utils,u=e.getOdtDocument(),s=new gui.StyleHelper(u.getFormatting()),C=new core.EventNotifier([gui.DirectTextStyler.textStylingChanged]),B,A=[],I=!1,z=!1,N=!1,G=!1,R,Z;this.formatTextSelection=q;this.createCursorStyleOp=function(a,b){var c=null;B&&(c=new ops.OpApplyDirectStyl [...]
- position:a,length:b,setProperties:B}),B=null,p());return c};this.setBold=t;this.setItalic=w;this.setHasUnderline=v;this.setHasStrikethrough=y;this.setFontSize=function(a){l("fo:font-size",a+"pt")};this.setFontName=function(a){l("style:font-name",a)};this.getAppliedStyles=function(){return A};this.toggleBold=g.bind(this,s.isBold,t);this.toggleItalic=g.bind(this,s.isItalic,w);this.toggleUnderline=g.bind(this,s.hasUnderline,v);this.toggleStrikethrough=g.bind(this,s.hasStrikeThrough,y);this [...]
- this.isItalic=function(){return z};this.hasUnderline=function(){return N};this.hasStrikeThrough=function(){return G};this.fontSize=function(){return R};this.fontName=function(){return Z};this.subscribe=function(a,b){C.subscribe(a,b)};this.unsubscribe=function(a,b){C.unsubscribe(a,b)};this.destroy=function(e){u.unsubscribe(ops.OdtDocument.signalCursorAdded,c);u.unsubscribe(ops.OdtDocument.signalCursorRemoved,b);u.unsubscribe(ops.OdtDocument.signalCursorMoved,a);u.unsubscribe(ops.OdtDocum [...]
- d);u.unsubscribe(ops.OdtDocument.signalParagraphChanged,k);u.unsubscribe(ops.OdtDocument.signalOperationExecuted,r);e()};u.subscribe(ops.OdtDocument.signalCursorAdded,c);u.subscribe(ops.OdtDocument.signalCursorRemoved,b);u.subscribe(ops.OdtDocument.signalCursorMoved,a);u.subscribe(ops.OdtDocument.signalParagraphStyleModified,d);u.subscribe(ops.OdtDocument.signalParagraphChanged,k);u.subscribe(ops.OdtDocument.signalOperationExecuted,r);p()};gui.DirectTextStyler.textStylingChanged="textSt [...]
++gui.DirectTextStyler=function(h,m){function e(a,b){for(var c=0,d=b[c];d&&a;)a=a[d],c+=1,d=b[c];return b.length===c?a:void 0}function p(a,b){var c=e(a[0],b);return a.every(function(a){return c===e(a,b)})?c:void 0}function l(){var a=t.getCursor(m),a=(a=a&&a.getSelectedRange())&&s.getAppliedStyles(a)||[];a[0]&&A&&(a[0]=v.mergeObjects(a[0],A));return a}function q(){function a(b,d,f){b!==d&&(void 0===c&&(c={}),c[f]=d);return d}var b,c;C=l();I=a(I,C?s.isBold(C):!1,"isBold");z=a(z,C?s.isItalic [...]
++M=a(M,C?s.hasUnderline(C):!1,"hasUnderline");H=a(H,C?s.hasStrikeThrough(C):!1,"hasStrikeThrough");b=C&&p(C,["style:text-properties","fo:font-size"]);R=a(R,b&&parseFloat(b),"fontSize");Z=a(Z,C&&p(C,["style:text-properties","style:font-name"]),"fontName");c&&D.emit(gui.DirectTextStyler.textStylingChanged,c)}function a(a){a.getMemberId()===m&&q()}function d(a){a===m&&q()}function f(a){a.getMemberId()===m&&q()}function b(){q()}function k(a){var b=t.getCursor(m);b&&t.getParagraphElement(b.ge [...]
++a.paragraphElement&&q()}function c(a,b){var c=t.getCursor(m);if(!c)return!1;c=s.getAppliedStyles(c.getSelectedRange());b(!a(c));return!0}function g(a){var b=t.getCursorSelection(m),c={"style:text-properties":a};0!==b.length?(a=new ops.OpApplyDirectStyling,a.init({memberid:m,position:b.position,length:b.length,setProperties:c}),h.enqueue([a])):(A=v.mergeObjects(A||{},c),q())}function n(a,b){var c={};c[a]=b;g(c)}function r(a){a=a.spec();A&&a.memberid===m&&"SplitParagraph"!==a.optype&&(A=n [...]
++a?"bold":"normal")}function y(a){n("fo:font-style",a?"italic":"normal")}function x(a){n("style:text-underline-style",a?"solid":"none")}function w(a){n("style:text-line-through-style",a?"solid":"none")}var v=new core.Utils,t=h.getOdtDocument(),s=new gui.StyleHelper(t.getFormatting()),D=new core.EventNotifier([gui.DirectTextStyler.textStylingChanged]),A,C=[],I=!1,z=!1,M=!1,H=!1,R,Z;this.formatTextSelection=g;this.createCursorStyleOp=function(a,b){var c=null;A&&(c=new ops.OpApplyDirectStyl [...]
++position:a,length:b,setProperties:A}),A=null,q());return c};this.setBold=u;this.setItalic=y;this.setHasUnderline=x;this.setHasStrikethrough=w;this.setFontSize=function(a){n("fo:font-size",a+"pt")};this.setFontName=function(a){n("style:font-name",a)};this.getAppliedStyles=function(){return C};this.toggleBold=c.bind(this,s.isBold,u);this.toggleItalic=c.bind(this,s.isItalic,y);this.toggleUnderline=c.bind(this,s.hasUnderline,x);this.toggleStrikethrough=c.bind(this,s.hasStrikeThrough,w);this [...]
++this.isItalic=function(){return z};this.hasUnderline=function(){return M};this.hasStrikeThrough=function(){return H};this.fontSize=function(){return R};this.fontName=function(){return Z};this.subscribe=function(a,b){D.subscribe(a,b)};this.unsubscribe=function(a,b){D.unsubscribe(a,b)};this.destroy=function(c){t.unsubscribe(ops.OdtDocument.signalCursorAdded,a);t.unsubscribe(ops.OdtDocument.signalCursorRemoved,d);t.unsubscribe(ops.OdtDocument.signalCursorMoved,f);t.unsubscribe(ops.OdtDocum [...]
++b);t.unsubscribe(ops.OdtDocument.signalParagraphChanged,k);t.unsubscribe(ops.OdtDocument.signalOperationExecuted,r);c()};t.subscribe(ops.OdtDocument.signalCursorAdded,a);t.subscribe(ops.OdtDocument.signalCursorRemoved,d);t.subscribe(ops.OdtDocument.signalCursorMoved,f);t.subscribe(ops.OdtDocument.signalParagraphStyleModified,b);t.subscribe(ops.OdtDocument.signalParagraphChanged,k);t.subscribe(ops.OdtDocument.signalOperationExecuted,r);q()};gui.DirectTextStyler.textStylingChanged="textSt [...]
 +(function(){return gui.DirectTextStyler})();
- // Input 71
++// Input 74
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");runtime.loadClass("core.Utils");runtime.loadClass("odf.OdfUtils");runtime.loadClass("ops.OpAddStyle");runtime.loadClass("ops.OpSetParagraphStyle");runtime.loadClass("gui.StyleHelper");
- gui.DirectParagraphStyler=function(e,h,f){function n(){function a(b,d,e){b!==d&&(void 0===c&&(c={}),c[e]=d);return d}var b=l.getCursor(h),b=b&&b.getSelectedRange(),c;y=a(y,b?w.isAlignedLeft(b):!1,"isAlignedLeft");x=a(x,b?w.isAlignedCenter(b):!1,"isAlignedCenter");u=a(u,b?w.isAlignedRight(b):!1,"isAlignedRight");s=a(s,b?w.isAlignedJustified(b):!1,"isAlignedJustified");c&&v.emit(gui.DirectParagraphStyler.paragraphStylingChanged,c)}function m(a){a.getMemberId()===h&&n()}function p(a){a===h [...]
- h&&n()}function b(){n()}function a(a){var b=l.getCursor(h);b&&l.getParagraphElement(b.getNode())===a.paragraphElement&&n()}function d(a){var b=l.getCursor(h).getSelectedRange(),c=l.getCursorPosition(h),b=t.getParagraphElements(b),d=l.getFormatting();b.forEach(function(b){var g=c+l.getDistanceFromCursor(h,b,0),k=b.getAttributeNS(odf.Namespaces.textns,"style-name");b=f.generateStyleName();var m,g=g+1;k&&(m=d.createDerivedStyleObject(k,"paragraph",{}));m=a(m||{});k=new ops.OpAddStyle;k.ini [...]
- styleName:b,styleFamily:"paragraph",isAutomaticStyle:!0,setProperties:m});m=new ops.OpSetParagraphStyle;m.init({memberid:h,styleName:b,position:g});e.enqueue([k,m])})}function k(a){d(function(b){return r.mergeObjects(b,a)})}function g(a){k({"style:paragraph-properties":{"fo:text-align":a}})}function q(a,b){var c=l.getFormatting().getDefaultTabStopDistance(),d=b["style:paragraph-properties"],d=(d=d&&d["fo:margin-left"])&&t.parseLength(d);return r.mergeObjects(b,{"style:paragraph-properti [...]
- d.unit===c.unit?d.value+a*c.value+d.unit:a*c.value+c.unit}})}var l=e.getOdtDocument(),r=new core.Utils,t=new odf.OdfUtils,w=new gui.StyleHelper(l.getFormatting()),v=new core.EventNotifier([gui.DirectParagraphStyler.paragraphStylingChanged]),y,x,u,s;this.isAlignedLeft=function(){return y};this.isAlignedCenter=function(){return x};this.isAlignedRight=function(){return u};this.isAlignedJustified=function(){return s};this.alignParagraphLeft=function(){g("left");return!0};this.alignParagraph [...]
- return!0};this.alignParagraphRight=function(){g("right");return!0};this.alignParagraphJustified=function(){g("justify");return!0};this.indent=function(){d(q.bind(null,1));return!0};this.outdent=function(){d(q.bind(null,-1));return!0};this.subscribe=function(a,b){v.subscribe(a,b)};this.unsubscribe=function(a,b){v.unsubscribe(a,b)};this.destroy=function(d){l.unsubscribe(ops.OdtDocument.signalCursorAdded,m);l.unsubscribe(ops.OdtDocument.signalCursorRemoved,p);l.unsubscribe(ops.OdtDocument. [...]
- c);l.unsubscribe(ops.OdtDocument.signalParagraphStyleModified,b);l.unsubscribe(ops.OdtDocument.signalParagraphChanged,a);d()};l.subscribe(ops.OdtDocument.signalCursorAdded,m);l.subscribe(ops.OdtDocument.signalCursorRemoved,p);l.subscribe(ops.OdtDocument.signalCursorMoved,c);l.subscribe(ops.OdtDocument.signalParagraphStyleModified,b);l.subscribe(ops.OdtDocument.signalParagraphChanged,a);n()};gui.DirectParagraphStyler.paragraphStylingChanged="paragraphStyling/changed";(function(){return g [...]
- // Input 72
++gui.DirectParagraphStyler=function(h,m,e){function p(){function a(b,d,f){b!==d&&(void 0===c&&(c={}),c[f]=d);return d}var b=n.getCursor(m),b=b&&b.getSelectedRange(),c;w=a(w,b?y.isAlignedLeft(b):!1,"isAlignedLeft");v=a(v,b?y.isAlignedCenter(b):!1,"isAlignedCenter");t=a(t,b?y.isAlignedRight(b):!1,"isAlignedRight");s=a(s,b?y.isAlignedJustified(b):!1,"isAlignedJustified");c&&x.emit(gui.DirectParagraphStyler.paragraphStylingChanged,c)}function l(a){a.getMemberId()===m&&p()}function q(a){a===m [...]
++m&&p()}function d(){p()}function f(a){var b=n.getCursor(m);b&&n.getParagraphElement(b.getNode())===a.paragraphElement&&p()}function b(a){var b=n.getCursor(m).getSelectedRange(),c=n.getCursorPosition(m),b=u.getParagraphElements(b),d=n.getFormatting();b.forEach(function(b){var f=c+n.getDistanceFromCursor(m,b,0),g=b.getAttributeNS(odf.Namespaces.textns,"style-name");b=e.generateStyleName();var k,f=f+1;g&&(k=d.createDerivedStyleObject(g,"paragraph",{}));k=a(k||{});g=new ops.OpAddStyle;g.ini [...]
++styleName:b,styleFamily:"paragraph",isAutomaticStyle:!0,setProperties:k});k=new ops.OpSetParagraphStyle;k.init({memberid:m,styleName:b,position:f});h.enqueue([g,k])})}function k(a){b(function(b){return r.mergeObjects(b,a)})}function c(a){k({"style:paragraph-properties":{"fo:text-align":a}})}function g(a,b){var c=n.getFormatting().getDefaultTabStopDistance(),d=b["style:paragraph-properties"],d=(d=d&&d["fo:margin-left"])&&u.parseLength(d);return r.mergeObjects(b,{"style:paragraph-properti [...]
++d.unit===c.unit?d.value+a*c.value+d.unit:a*c.value+c.unit}})}var n=h.getOdtDocument(),r=new core.Utils,u=new odf.OdfUtils,y=new gui.StyleHelper(n.getFormatting()),x=new core.EventNotifier([gui.DirectParagraphStyler.paragraphStylingChanged]),w,v,t,s;this.isAlignedLeft=function(){return w};this.isAlignedCenter=function(){return v};this.isAlignedRight=function(){return t};this.isAlignedJustified=function(){return s};this.alignParagraphLeft=function(){c("left");return!0};this.alignParagraph [...]
++return!0};this.alignParagraphRight=function(){c("right");return!0};this.alignParagraphJustified=function(){c("justify");return!0};this.indent=function(){b(g.bind(null,1));return!0};this.outdent=function(){b(g.bind(null,-1));return!0};this.subscribe=function(a,b){x.subscribe(a,b)};this.unsubscribe=function(a,b){x.unsubscribe(a,b)};this.destroy=function(b){n.unsubscribe(ops.OdtDocument.signalCursorAdded,l);n.unsubscribe(ops.OdtDocument.signalCursorRemoved,q);n.unsubscribe(ops.OdtDocument. [...]
++a);n.unsubscribe(ops.OdtDocument.signalParagraphStyleModified,d);n.unsubscribe(ops.OdtDocument.signalParagraphChanged,f);b()};n.subscribe(ops.OdtDocument.signalCursorAdded,l);n.subscribe(ops.OdtDocument.signalCursorRemoved,q);n.subscribe(ops.OdtDocument.signalCursorMoved,a);n.subscribe(ops.OdtDocument.signalParagraphStyleModified,d);n.subscribe(ops.OdtDocument.signalParagraphChanged,f);p()};gui.DirectParagraphStyler.paragraphStylingChanged="paragraphStyling/changed";(function(){return g [...]
++// Input 75
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- gui.KeyboardHandler=function(){function e(e,f){f||(f=h.None);return e+":"+f}var h=gui.KeyboardHandler.Modifier,f=null,n={};this.setDefault=function(e){f=e};this.bind=function(f,h,c){f=e(f,h);runtime.assert(!1===n.hasOwnProperty(f),"tried to overwrite the callback handler of key combo: "+f);n[f]=c};this.unbind=function(f,h){var c=e(f,h);delete n[c]};this.reset=function(){f=null;n={}};this.handleEvent=function(m){var p=m.keyCode,c=h.None;m.metaKey&&(c|=h.Meta);m.ctrlKey&&(c|=h.Ctrl);m.alt [...]
- m.shiftKey&&(c|=h.Shift);p=e(p,c);p=n[p];c=!1;p?c=p():null!==f&&(c=f(m));c&&(m.preventDefault?m.preventDefault():m.returnValue=!1)}};gui.KeyboardHandler.Modifier={None:0,Meta:1,Ctrl:2,Alt:4,CtrlAlt:6,Shift:8,MetaShift:9,CtrlShift:10,AltShift:12};gui.KeyboardHandler.KeyCode={Backspace:8,Tab:9,Clear:12,Enter:13,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Delete:46,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89 [...]
- // Input 73
++gui.KeyboardHandler=function(){function h(e,h){h||(h=m.None);return e+":"+h}var m=gui.KeyboardHandler.Modifier,e=null,p={};this.setDefault=function(h){e=h};this.bind=function(e,m,a){e=h(e,m);runtime.assert(!1===p.hasOwnProperty(e),"tried to overwrite the callback handler of key combo: "+e);p[e]=a};this.unbind=function(e,m){var a=h(e,m);delete p[a]};this.reset=function(){e=null;p={}};this.handleEvent=function(l){var q=l.keyCode,a=m.None;l.metaKey&&(a|=m.Meta);l.ctrlKey&&(a|=m.Ctrl);l.alt [...]
++l.shiftKey&&(a|=m.Shift);q=h(q,a);q=p[q];a=!1;q?a=q():null!==e&&(a=e(l));a&&(l.preventDefault?l.preventDefault():l.returnValue=!1)}};gui.KeyboardHandler.Modifier={None:0,Meta:1,Ctrl:2,Alt:4,CtrlAlt:6,Shift:8,MetaShift:9,CtrlShift:10,AltShift:12};gui.KeyboardHandler.KeyCode={Backspace:8,Tab:9,Clear:12,Enter:13,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Delete:46,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89 [...]
++// Input 76
 +runtime.loadClass("odf.Namespaces");runtime.loadClass("odf.ObjectNameGenerator");
- gui.ImageManager=function(e,h,f){var n={"image/gif":".gif","image/jpeg":".jpg","image/png":".png"},m=odf.Namespaces.textns,p=e.getOdtDocument(),c=p.getFormatting(),b={};this.insertImage=function(a,d,k,g){var q;runtime.assert(0<k&&0<g,"Both width and height of the image should be greater than 0px.");q=p.getParagraphElement(p.getCursor(h).getNode()).getAttributeNS(m,"style-name");b.hasOwnProperty(q)||(b[q]=c.getContentSize(q,"paragraph"));q=b[q];k*=0.0264583333333334;g*=0.0264583333333334 [...]
- 1;k>q.width&&(l=q.width/k);g>q.height&&(r=q.height/g);l=Math.min(l,r);q=k*l;k=g*l;r=p.getOdfCanvas().odfContainer().rootElement.styles;g=a.toLowerCase();var l=n.hasOwnProperty(g)?n[g]:null,t;g=[];runtime.assert(null!==l,"Image type is not supported: "+a);l="Pictures/"+f.generateImageName()+l;t=new ops.OpSetBlob;t.init({memberid:h,filename:l,mimetype:a,content:d});g.push(t);c.getStyleElement("Graphics","graphic",[r])||(a=new ops.OpAddStyle,a.init({memberid:h,styleName:"Graphics",styleFam [...]
- isAutomaticStyle:!1,setProperties:{"style:graphic-properties":{"text:anchor-type":"paragraph","svg:x":"0cm","svg:y":"0cm","style:wrap":"dynamic","style:number-wrapped-paragraphs":"no-limit","style:wrap-contour":"false","style:vertical-pos":"top","style:vertical-rel":"paragraph","style:horizontal-pos":"center","style:horizontal-rel":"paragraph"}}}),g.push(a));a=f.generateStyleName();d=new ops.OpAddStyle;d.init({memberid:h,styleName:a,styleFamily:"graphic",isAutomaticStyle:!0,setPropertie [...]
++gui.ImageManager=function(h,m,e){var p={"image/gif":".gif","image/jpeg":".jpg","image/png":".png"},l=odf.Namespaces.textns,q=h.getOdtDocument(),a=q.getFormatting(),d={};this.insertImage=function(f,b,k,c){var g;runtime.assert(0<k&&0<c,"Both width and height of the image should be greater than 0px.");g=q.getParagraphElement(q.getCursor(m).getNode()).getAttributeNS(l,"style-name");d.hasOwnProperty(g)||(d[g]=a.getContentSize(g,"paragraph"));g=d[g];k*=0.0264583333333334;c*=0.0264583333333334 [...]
++1;k>g.width&&(n=g.width/k);c>g.height&&(r=g.height/c);n=Math.min(n,r);g=k*n;k=c*n;r=q.getOdfCanvas().odfContainer().rootElement.styles;c=f.toLowerCase();var n=p.hasOwnProperty(c)?p[c]:null,u;c=[];runtime.assert(null!==n,"Image type is not supported: "+f);n="Pictures/"+e.generateImageName()+n;u=new ops.OpSetBlob;u.init({memberid:m,filename:n,mimetype:f,content:b});c.push(u);a.getStyleElement("Graphics","graphic",[r])||(f=new ops.OpAddStyle,f.init({memberid:m,styleName:"Graphics",styleFam [...]
++isAutomaticStyle:!1,setProperties:{"style:graphic-properties":{"text:anchor-type":"paragraph","svg:x":"0cm","svg:y":"0cm","style:wrap":"dynamic","style:number-wrapped-paragraphs":"no-limit","style:wrap-contour":"false","style:vertical-pos":"top","style:vertical-rel":"paragraph","style:horizontal-pos":"center","style:horizontal-rel":"paragraph"}}}),c.push(f));f=e.generateStyleName();b=new ops.OpAddStyle;b.init({memberid:m,styleName:f,styleFamily:"graphic",isAutomaticStyle:!0,setPropertie [...]
 +"style:graphic-properties":{"style:vertical-pos":"top","style:vertical-rel":"baseline","style:horizontal-pos":"center","style:horizontal-rel":"paragraph","fo:background-color":"transparent","style:background-transparency":"100%","style:shadow":"none","style:mirror":"none","fo:clip":"rect(0cm, 0cm, 0cm, 0cm)","draw:luminance":"0%","draw:contrast":"0%","draw:red":"0%","draw:green":"0%","draw:blue":"0%","draw:gamma":"100%","draw:color-inversion":"false","draw:image-opacity":"100%","draw:co [...]
- g.push(d);t=new ops.OpInsertImage;t.init({memberid:h,position:p.getCursorPosition(h),filename:l,frameWidth:q+"cm",frameHeight:k+"cm",frameStyleName:a,frameName:f.generateFrameName()});g.push(t);e.enqueue(g)}};
- // Input 74
++c.push(b);u=new ops.OpInsertImage;u.init({memberid:m,position:q.getCursorPosition(m),filename:n,frameWidth:g+"cm",frameHeight:k+"cm",frameStyleName:f,frameName:e.generateFrameName()});c.push(u);h.enqueue(c)}};
++// Input 77
 +runtime.loadClass("odf.Namespaces");
- gui.ImageSelector=function(e){function h(){var c=e.getSizer(),b,a;b=m.createElement("div");b.id="imageSelector";b.style.borderWidth="1px";c.appendChild(b);n.forEach(function(c){a=m.createElement("div");a.className=c;b.appendChild(a)});return b}var f=odf.Namespaces.svgns,n="topLeft topRight bottomRight bottomLeft topMiddle rightMiddle bottomMiddle leftMiddle".split(" "),m=e.getElement().ownerDocument,p=!1;this.select=function(c){var b,a,d=m.getElementById("imageSelector");d||(d=h());p=!0 [...]
- a=c.getBoundingClientRect();var k=b.getBoundingClientRect(),g=e.getZoomLevel();b=(a.left-k.left)/g-1;a=(a.top-k.top)/g-1;d.style.display="block";d.style.left=b+"px";d.style.top=a+"px";d.style.width=c.getAttributeNS(f,"width");d.style.height=c.getAttributeNS(f,"height")};this.clearSelection=function(){var c;p&&(c=m.getElementById("imageSelector"))&&(c.style.display="none");p=!1};this.isSelectorElement=function(c){var b=m.getElementById("imageSelector");return b?c===b||c.parentNode===b:!1}};
- // Input 75
++gui.ImageSelector=function(h){function m(){var a=h.getSizer(),d,f;d=l.createElement("div");d.id="imageSelector";d.style.borderWidth="1px";a.appendChild(d);p.forEach(function(a){f=l.createElement("div");f.className=a;d.appendChild(f)});return d}var e=odf.Namespaces.svgns,p="topLeft topRight bottomRight bottomLeft topMiddle rightMiddle bottomMiddle leftMiddle".split(" "),l=h.getElement().ownerDocument,q=!1;this.select=function(a){var d,f,b=l.getElementById("imageSelector");b||(b=m());q=!0 [...]
++f=a.getBoundingClientRect();var k=d.getBoundingClientRect(),c=h.getZoomLevel();d=(f.left-k.left)/c-1;f=(f.top-k.top)/c-1;b.style.display="block";b.style.left=d+"px";b.style.top=f+"px";b.style.width=a.getAttributeNS(e,"width");b.style.height=a.getAttributeNS(e,"height")};this.clearSelection=function(){var a;q&&(a=l.getElementById("imageSelector"))&&(a.style.display="none");q=!1};this.isSelectorElement=function(a){var d=l.getElementById("imageSelector");return d?a===d||a.parentNode===d:!1}};
++// Input 78
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- gui.TextManipulator=function(e,h,f){function n(c){var b=new ops.OpRemoveText;b.init({memberid:h,position:c.position,length:c.length});return b}function m(c){0>c.length&&(c.position+=c.length,c.length=-c.length);return c}var p=e.getOdtDocument();this.enqueueParagraphSplittingOps=function(){var c=m(p.getCursorSelection(h)),b,a=[];0<c.length&&(b=n(c),a.push(b));b=new ops.OpSplitParagraph;b.init({memberid:h,position:c.position});a.push(b);e.enqueue(a);return!0};this.removeTextByBackspaceKey [...]
- m(p.getCursorSelection(h)),b=null;0===c.length?0<c.position&&p.getPositionInTextNode(c.position-1)&&(b=new ops.OpRemoveText,b.init({memberid:h,position:c.position-1,length:1}),e.enqueue([b])):(b=n(c),e.enqueue([b]));return null!==b};this.removeTextByDeleteKey=function(){var c=m(p.getCursorSelection(h)),b=null;0===c.length?p.getPositionInTextNode(c.position+1)&&(b=new ops.OpRemoveText,b.init({memberid:h,position:c.position,length:1}),e.enqueue([b])):(b=n(c),e.enqueue([b]));return null!== [...]
- function(){var c=m(p.getCursorSelection(h));0!==c.length&&(c=n(c),e.enqueue([c]));return!0};this.insertText=function(c){var b=m(p.getCursorSelection(h)),a,d=[];0<b.length&&(a=n(b),d.push(a));a=new ops.OpInsertText;a.init({memberid:h,position:b.position,text:c});d.push(a);f&&(c=f(b.position,c.length))&&d.push(c);e.enqueue(d)}};(function(){return gui.TextManipulator})();
- // Input 76
++runtime.loadClass("core.PositionFilter");
++gui.TextManipulator=function(h,m,e){function p(a){var b=new ops.OpRemoveText;b.init({memberid:m,position:a.position,length:a.length});return b}function l(a){0>a.length&&(a.position+=a.length,a.length=-a.length);return a}function q(f,b){var e=new core.PositionFilterChain,c=gui.SelectionMover.createPositionIterator(a.getRootElement(f)),g=b?c.nextPosition:c.previousPosition;e.addFilter("BaseFilter",a.getPositionFilter());e.addFilter("RootFilter",a.createRootFilter(m));for(c.setUnfilteredPo [...]
++d)return!0;return!1}var a=h.getOdtDocument(),d=core.PositionFilter.FilterResult.FILTER_ACCEPT;this.enqueueParagraphSplittingOps=function(){var d=l(a.getCursorSelection(m)),b,e=[];0<d.length&&(b=p(d),e.push(b));b=new ops.OpSplitParagraph;b.init({memberid:m,position:d.position});e.push(b);h.enqueue(e);return!0};this.removeTextByBackspaceKey=function(){var d=a.getCursor(m),b=l(a.getCursorSelection(m)),e=null;0===b.length?q(d.getNode(),!1)&&(e=new ops.OpRemoveText,e.init({memberid:m,positio [...]
++1,length:1}),h.enqueue([e])):(e=p(b),h.enqueue([e]));return null!==e};this.removeTextByDeleteKey=function(){var d=a.getCursor(m),b=l(a.getCursorSelection(m)),e=null;0===b.length?q(d.getNode(),!0)&&(e=new ops.OpRemoveText,e.init({memberid:m,position:b.position,length:1}),h.enqueue([e])):(e=p(b),h.enqueue([e]));return null!==e};this.removeCurrentSelection=function(){var d=l(a.getCursorSelection(m));0!==d.length&&(d=p(d),h.enqueue([d]));return!0};this.insertText=function(d){var b=l(a.getCu [...]
++k,c=[];0<b.length&&(k=p(b),c.push(k));k=new ops.OpInsertText;k.init({memberid:m,position:b.position,text:d});c.push(k);e&&(d=e(b.position,d.length))&&c.push(d);h.enqueue(c)}};(function(){return gui.TextManipulator})();
++// Input 79
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.EventNotifier");runtime.loadClass("core.PositionFilter");runtime.loadClass("ops.OpAddAnnotation");runtime.loadClass("ops.OpRemoveAnnotation");runtime.loadClass("gui.SelectionMover");
- gui.AnnotationManager=function(e,h){function f(){var b=c.getCursor(h),b=b&&b.getNode(),e;if(e=b){a:{for(e=c.getRootNode();b&&b!==e;){if(b.namespaceURI===k&&"annotation"===b.localName){b=!0;break a}b=b.parentNode}b=!1}e=!b}b=e;b!==a&&(a=b,d.emit(gui.AnnotationManager.annotatableChanged,a))}function n(a){a.getMemberId()===h&&f()}function m(a){a===h&&f()}function p(a){a.getMemberId()===h&&f()}var c=e.getOdtDocument(),b=c.getPositionFilter(),a=!1,d=new core.EventNotifier([gui.AnnotationMana [...]
- k=odf.Namespaces.officens,g=core.PositionFilter.FilterResult.FILTER_ACCEPT;this.isAnnotatable=function(){return a};this.addAnnotation=function(){var b=new ops.OpAddAnnotation,d=c.getCursorSelection(h),f=d.length,d=d.position;a&&(d=0<=f?d:d+f,f=Math.abs(f),b.init({memberid:h,position:d,length:f,name:h+Date.now()}),e.enqueue([b]))};this.removeAnnotation=function(a){var d,f;d=0;f=gui.SelectionMover.createPositionIterator(c.getRootNode());for(var k=new core.LoopWatchDog(1E3),m=!1;f.nextPosi [...]
- m=Boolean(a.compareDocumentPosition(f.container())&Node.DOCUMENT_POSITION_CONTAINED_BY),b.acceptPosition(f)===g){if(m)break;d+=1}f=0;k=gui.SelectionMover.createPositionIterator(c.getRootNode());m=!1;k.setUnfilteredPosition(a,0);do{m=Boolean(a.compareDocumentPosition(k.container())&Node.DOCUMENT_POSITION_CONTAINED_BY);if(!m&&a!==k.container())break;b.acceptPosition(k)===g&&(f+=1)}while(k.nextPosition());a=new ops.OpRemoveAnnotation;a.init({memberid:h,position:d,length:f});f=new ops.OpMov [...]
- position:d-1,length:0});e.enqueue([a,f])};this.subscribe=function(a,b){d.subscribe(a,b)};this.unsubscribe=function(a,b){d.unsubscribe(a,b)};this.destroy=function(a){c.unsubscribe(ops.OdtDocument.signalCursorAdded,n);c.unsubscribe(ops.OdtDocument.signalCursorRemoved,m);c.unsubscribe(ops.OdtDocument.signalCursorMoved,p);a()};c.subscribe(ops.OdtDocument.signalCursorAdded,n);c.subscribe(ops.OdtDocument.signalCursorRemoved,m);c.subscribe(ops.OdtDocument.signalCursorMoved,p);f()};
++gui.AnnotationManager=function(h,m){function e(){var e=a.getCursor(m),e=e&&e.getNode(),c;if(c=e){a:{for(c=a.getRootNode();e&&e!==c;){if(e.namespaceURI===b&&"annotation"===e.localName){e=!0;break a}e=e.parentNode}e=!1}c=!e}e=c;e!==d&&(d=e,f.emit(gui.AnnotationManager.annotatableChanged,d))}function p(a){a.getMemberId()===m&&e()}function l(a){a===m&&e()}function q(a){a.getMemberId()===m&&e()}var a=h.getOdtDocument(),d=!1,f=new core.EventNotifier([gui.AnnotationManager.annotatableChanged]) [...]
++this.isAnnotatable=function(){return d};this.addAnnotation=function(){var b=new ops.OpAddAnnotation,c=a.getCursorSelection(m),f=c.length,c=c.position;d&&(c=0<=f?c:c+f,f=Math.abs(f),b.init({memberid:m,position:c,length:f,name:m+Date.now()}),h.enqueue([b]))};this.removeAnnotation=function(b){var c,d;c=a.convertDomPointToCursorStep(b,0)+1;d=a.convertDomPointToCursorStep(b,b.childNodes.length);b=new ops.OpRemoveAnnotation;b.init({memberid:m,position:c,length:d-c});d=new ops.OpMoveCursor;d.i [...]
++position:0<c?c-1:c,length:0});h.enqueue([b,d])};this.subscribe=function(a,b){f.subscribe(a,b)};this.unsubscribe=function(a,b){f.unsubscribe(a,b)};this.destroy=function(b){a.unsubscribe(ops.OdtDocument.signalCursorAdded,p);a.unsubscribe(ops.OdtDocument.signalCursorRemoved,l);a.unsubscribe(ops.OdtDocument.signalCursorMoved,q);b()};a.subscribe(ops.OdtDocument.signalCursorAdded,p);a.subscribe(ops.OdtDocument.signalCursorRemoved,l);a.subscribe(ops.OdtDocument.signalCursorMoved,q);e()};
 +gui.AnnotationManager.annotatableChanged="annotatable/changed";(function(){return gui.AnnotationManager})();
- // Input 77
- gui.EventManager=function(e){function h(a){var b=a.scrollX,c=a.scrollY;this.restore=function(){a.scrollX===b&&a.scrollY===c||a.scrollTo(b,c)}}function f(a){var b=a.scrollTop,c=a.scrollLeft;this.restore=function(){if(a.scrollTop!==b||a.scrollLeft!==c)a.scrollTop=b,a.scrollLeft=c}}function n(){return e.getDOM().activeElement===m}var m=e.getOdfCanvas().getElement(),p=runtime.getWindow(),c={beforecut:!0,beforepaste:!0},b={mousedown:!0,mouseup:!0};this.subscribe=function(a,d){var e=m;b[a]&&p [...]
- "on"+a,h=!1;e.attachEvent&&(h=e.attachEvent(f,d));!h&&e.addEventListener&&(e.addEventListener(a,d,!1),h=!0);h&&!c[a]||!e.hasOwnProperty(f)||(e[f]=d)};this.unsubscribe=function(a,c){var e=m;b[a]&&p&&(e=p);var f="on"+a;e.detachEvent&&e.detachEvent(f,c);e.removeEventListener&&e.removeEventListener(a,c,!1);e[f]===c&&(e[f]=null)};this.hasFocus=n;this.focus=function(){var a;if(!n()){for(a=m;a&&!a.scrollTop&&!a.scrollLeft;)a=a.parentNode;a=a?new f(a):p?new h(p):null;m.focus();a&&a.restore()}}};
- // Input 78
++// Input 80
++gui.EventManager=function(h){function m(a){var b=a.scrollX,d=a.scrollY;this.restore=function(){a.scrollX===b&&a.scrollY===d||a.scrollTo(b,d)}}function e(a){var b=a.scrollTop,d=a.scrollLeft;this.restore=function(){if(a.scrollTop!==b||a.scrollLeft!==d)a.scrollTop=b,a.scrollLeft=d}}function p(){return h.getDOM().activeElement===l}var l=h.getOdfCanvas().getElement(),q=runtime.getWindow(),a={beforecut:!0,beforepaste:!0},d={mousedown:!0,mouseup:!0};this.subscribe=function(f,b){var e=l;d[f]&&q [...]
++"on"+f,g=!1;e.attachEvent&&(g=e.attachEvent(c,b));!g&&e.addEventListener&&(e.addEventListener(f,b,!1),g=!0);g&&!a[f]||!e.hasOwnProperty(c)||(e[c]=b)};this.unsubscribe=function(a,b){var e=l;d[a]&&q&&(e=q);var c="on"+a;e.detachEvent&&e.detachEvent(c,b);e.removeEventListener&&e.removeEventListener(a,b,!1);e[c]===b&&(e[c]=null)};this.hasFocus=p;this.focus=function(){var a;if(!p()){for(a=l;a&&!a.scrollTop&&!a.scrollLeft;)a=a.parentNode;a=a?new e(a):q?new m(q):null;l.focus();a&&a.restore()}}};
++// Input 81
 +runtime.loadClass("core.DomUtils");runtime.loadClass("core.Async");runtime.loadClass("core.ScheduledTask");runtime.loadClass("odf.OdfUtils");runtime.loadClass("odf.ObjectNameGenerator");runtime.loadClass("ops.OdtCursor");runtime.loadClass("ops.OpAddCursor");runtime.loadClass("ops.OpRemoveCursor");runtime.loadClass("gui.Clipboard");runtime.loadClass("gui.DirectTextStyler");runtime.loadClass("gui.DirectParagraphStyler");runtime.loadClass("gui.KeyboardHandler");runtime.loadClass("gui.Image [...]
- runtime.loadClass("gui.ImageSelector");runtime.loadClass("gui.TextManipulator");runtime.loadClass("gui.AnnotationManager");runtime.loadClass("gui.EventManager");
- gui.SessionController=function(){var e=core.PositionFilter.FilterResult.FILTER_ACCEPT;gui.SessionController=function(h,f,n,m){function p(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function c(a,b,c){var d=new ops.OpMoveCursor;d.init({memberid:f,position:a,length:b||0,selectionType:c});return d}function b(a){var b=F.getOdfCanvas().getElement(),c=F.getRootNode(),d=0;b.compareDocumentPosition(a)&Node.DOCUMENT_POSITION_PRECEDING||(a=gui.SelectionMover.createPositionIterator(c),a [...]
- c=a.container(),d=a.unfilteredDomOffset());return{node:c,offset:d}}function a(a){a=F.getDistanceFromCursor(f,a,0);var b=null!==a?a+1:null,d;if(b||a)d=F.getCursorPosition(f),a=c(d+a,b-a,ops.OdtCursor.RegionSelection),h.enqueue([a]);X.focus()}function d(a,d){var e,g,k,l;g=F.getOdfCanvas().getElement();e=d.detail;if(a){if(!a.anchorNode&&!a.focusNode){k=d.clientX;l=d.clientY;var m=F.getDOM();m.caretRangeFromPoint?(k=m.caretRangeFromPoint(k,l),k={container:k.startContainer,offset:k.startOffs [...]
- (k=m.caretPositionFromPoint(k,l),k={container:k.offsetNode,offset:k.offset}):k=null;if(!k)return;a.anchorNode=k.container;a.anchorOffset=k.offset;a.focusNode=a.anchorNode;a.focusOffset=a.anchorOffset}runtime.assert(null!==a.anchorNode&&null!==a.focusNode,"anchorNode or focusNode is null");k=Y.containsNode(g,a.anchorNode);g=Y.containsNode(g,a.focusNode);if(k||g){k||(k=b(a.anchorNode),a.anchorNode=k.node,a.anchorOffset=k.offset);g||(k=b(a.focusNode),a.focusNode=k.node,a.focusOffset=k.offs [...]
- e){var m=/[A-Za-z0-9]/,n=gui.SelectionMover.createPositionIterator(F.getRootNode()),p=0<Y.comparePoints(a.anchorNode,a.anchorOffset,a.focusNode,a.focusOffset),t;p?(k=a.anchorNode,l=a.anchorOffset,e=a.focusNode,g=a.focusOffset):(k=a.focusNode,l=a.focusOffset,e=a.anchorNode,g=a.anchorOffset);for(n.setUnfilteredPosition(k,l);n.previousPosition();){t=n.getCurrentNode();if(t.nodeType===Node.TEXT_NODE){if(t=t.data[n.unfilteredDomOffset()],!m.test(t))break}else if(!ba.isTextSpan(t))break;k=n.c [...]
- l=n.unfilteredDomOffset()}n.setUnfilteredPosition(e,g);do if(t=n.getCurrentNode(),t.nodeType===Node.TEXT_NODE){if(t=t.data[n.unfilteredDomOffset()],!m.test(t))break}else if(!ba.isTextSpan(t))break;while(n.nextPosition());e=n.container();g=n.unfilteredDomOffset();p?(a.anchorNode=k,a.anchorOffset=l,a.focusNode=e,a.focusOffset=g):(a.focusNode=k,a.focusOffset=l,a.anchorNode=e,a.anchorOffset=g)}else 3===e&&(e=F.getParagraphElement(a.anchorNode),g=F.getParagraphElement(a.focusNode),e&&(a.anch [...]
- 0),g&&(a.focusNode=g,a.focusOffset=g.childNodes.length));e=F.getDistanceFromCursor(f,a.anchorNode,a.anchorOffset);if((g=a.focusNode===a.anchorNode&&a.focusOffset===a.anchorOffset?e:F.getDistanceFromCursor(f,a.focusNode,a.focusOffset))||e)k=F.getCursorPosition(f),e=c(k+e,g-e,ops.OdtCursor.RangeSelection),h.enqueue([e]);X.focus()}}}function k(a){var b=F.getCursorSelection(f),d=F.getCursor(f).getStepCounter();0!==a&&(a=0<a?d.convertForwardStepsBetweenFilters(a,pa,ma):-d.convertBackwardStep [...]
- pa,ma),a=b.length+a,h.enqueue([c(b.position,a)]))}function g(a){var b=F.getCursorPosition(f),d=F.getCursor(f).getStepCounter();0!==a&&(a=0<a?d.convertForwardStepsBetweenFilters(a,pa,ma):-d.convertBackwardStepsBetweenFilters(-a,pa,ma),h.enqueue([c(b+a,0)]))}function q(){g(-1);return!0}function l(){g(1);return!0}function r(){k(-1);return!0}function t(){k(1);return!0}function w(a,b){var c=F.getParagraphElement(F.getCursor(f).getNode());runtime.assert(Boolean(c),"SessionController: Cursor o [...]
- c=F.getCursor(f).getStepCounter().countLinesSteps(a,pa);b?k(c):g(c)}function v(){w(-1,!1);return!0}function y(){w(1,!1);return!0}function x(){w(-1,!0);return!0}function u(){w(1,!0);return!0}function s(a,b){var c=F.getCursor(f).getStepCounter().countStepsToLineBoundary(a,pa);b?k(c):g(c)}function C(){s(-1,!1);return!0}function B(){s(1,!1);return!0}function A(){s(-1,!0);return!0}function I(){s(1,!0);return!0}function z(){var a=F.getParagraphElement(F.getCursor(f).getNode()),b,c;runtime.ass [...]
- "SessionController: Cursor outside paragraph");c=F.getDistanceFromCursor(f,a,0);b=gui.SelectionMover.createPositionIterator(F.getRootNode());for(b.setUnfilteredPosition(a,0);0===c&&b.previousPosition();)a=b.getCurrentNode(),ba.isParagraph(a)&&(c=F.getDistanceFromCursor(f,a,0));k(c);return!0}function N(){var a=F.getParagraphElement(F.getCursor(f).getNode()),b,c;runtime.assert(Boolean(a),"SessionController: Cursor outside paragraph");b=gui.SelectionMover.createPositionIterator(F.getRootNo [...]
- for(c=F.getDistanceFromCursor(f,b.container(),b.unfilteredDomOffset());0===c&&b.nextPosition();)a=b.getCurrentNode(),ba.isParagraph(a)&&(b.moveToEndOfNode(a),c=F.getDistanceFromCursor(f,b.container(),b.unfilteredDomOffset()));k(c);return!0}function G(a,b){var c=gui.SelectionMover.createPositionIterator(F.getRootNode());0<a&&c.moveToEnd();c=F.getDistanceFromCursor(f,c.container(),c.unfilteredDomOffset());b?k(c):g(c)}function R(){G(-1,!1);return!0}function Z(){G(1,!1);return!0}function ka [...]
- return!0}function T(){G(1,!0);return!0}function ra(){var a=gui.SelectionMover.createPositionIterator(F.getRootNode()),b;b=-F.getDistanceFromCursor(f,a.container(),a.unfilteredDomOffset());a.moveToEnd();b+=F.getDistanceFromCursor(f,a.container(),a.unfilteredDomOffset());h.enqueue([c(0,b)]);return!0}function $(){var a=F.getCursor(f),b=fa.getSelection(),c;a?(va.clearSelection(),a.getSelectionType()===ops.OdtCursor.RegionSelection&&(c=ba.getImageElements(a.getSelectedRange())[0])&&va.select [...]
- X.hasFocus()&&(c=a.getSelectedRange(),b.extend?a.hasForwardSelection()?(b.collapse(c.startContainer,c.startOffset),b.extend(c.endContainer,c.endOffset)):(b.collapse(c.endContainer,c.endOffset),b.extend(c.startContainer,c.startOffset)):(b.removeAllRanges(),b.addRange(c.cloneRange())))):va.clearSelection()}function ha(){runtime.setTimeout($,0)}function U(a){var b=F.getCursor(f);b.getSelectedRange().collapsed||(la.setDataFromRange(a,b.getSelectedRange())?qa.removeCurrentSelection():runtime [...]
- function O(){return!1!==F.getCursor(f).getSelectedRange().collapsed}function W(a){var b=F.getCursor(f);b.getSelectedRange().collapsed||la.setDataFromRange(a,b.getSelectedRange())||runtime.log("Cut operation failed")}function E(a){var b;fa.clipboardData&&fa.clipboardData.getData?b=fa.clipboardData.getData("Text"):a.clipboardData&&a.clipboardData.getData&&(b=a.clipboardData.getData("text/plain"));b&&(qa.insertText(b),a.preventDefault?a.preventDefault():a.returnValue=!1)}function H(){retur [...]
- function S(a){F.emit(ops.OdtDocument.signalUndoStackChanged,a)}function P(){return ca?(ca.moveBackward(1),$(),!0):!1}function aa(){return ca?(ca.moveForward(1),$(),!0):!1}function na(a){if(ya=(a=a.target||a.srcElement)&&Y.containsNode(F.getOdfCanvas().getElement(),a))ta=!1,xa=F.createRootFilter(a)}function da(a){var b=a.getSelectedRange();return a.hasForwardSelection()?{anchorNode:b.startContainer,anchorOffset:b.startOffset,focusNode:b.endContainer,focusOffset:b.endOffset}:{anchorNode:b [...]
- anchorOffset:b.endOffset,focusNode:b.startContainer,focusOffset:b.startOffset}}function V(b){var c=b.target||b.srcElement,e={detail:b.detail,clientX:b.clientX,clientY:b.clientY,target:c};ua.processRequests();ba.isImage(c)&&ba.isCharacterFrame(c.parentNode)?a(c.parentNode):ya&&!va.isSelectorElement(c)&&(ta?d(da(n),b):runtime.setTimeout(function(){var a;a=(a=fa.getSelection())?{anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}:null;d(a,e) [...]
- !1}function Q(a){V(a)}function J(a){var b=a.target||a.srcElement,c=null;"annotationRemoveButton"===b.className?(c=Y.getElementsByTagNameNS(b.parentNode,odf.Namespaces.officens,"annotation")[0],ga.removeAnnotation(c)):V(a)}function ea(){var a=fa.getSelection(),b;ya&&0<a.rangeCount&&(ta=!0,va.clearSelection(),wa.setUnfilteredPosition(a.focusNode,a.focusOffset),xa.acceptPosition(wa)===e&&(b=a.getRangeAt(0).cloneRange(),a=a.anchorNode===b.startContainer&&a.anchorOffset===b.startOffset,n.set [...]
- a),F.emit(ops.OdtDocument.signalCursorMoved,n)))}function oa(a){return function(){a();return!0}}function D(a){return function(b){return F.getCursor(f).getSelectionType()===ops.OdtCursor.RangeSelection?a(b):!0}}var fa=runtime.getWindow(),F=h.getOdtDocument(),ia=new core.Async,Y=new core.DomUtils,ba=new odf.OdfUtils,la=new gui.Clipboard,L=new gui.KeyboardHandler,sa=new gui.KeyboardHandler,pa=new core.PositionFilterChain,ma=F.getPositionFilter(),ya=!1,za=new odf.ObjectNameGenerator(F.getOd [...]
- f),ta=!1,xa=null,ca=null,X=new gui.EventManager(F),ga=new gui.AnnotationManager(h,f),K=m&&m.directStylingEnabled?new gui.DirectTextStyler(h,f):null,ja=m&&m.directStylingEnabled?new gui.DirectParagraphStyler(h,f,za):null,qa=new gui.TextManipulator(h,f,K&&K.createCursorStyleOp),Aa=new gui.ImageManager(h,f,za),va=new gui.ImageSelector(F.getOdfCanvas()),wa=gui.SelectionMover.createPositionIterator(F.getRootNode()),ua;runtime.assert(null!==fa,"Expected to be run in an environment which has a [...]
- pa.addFilter("BaseFilter",ma);pa.addFilter("RootFilter",F.createRootFilter(f));this.startEditing=function(){var a;F.getOdfCanvas().getElement().classList.add("virtualSelections");X.subscribe("keydown",L.handleEvent);X.subscribe("keypress",sa.handleEvent);X.subscribe("keyup",p);X.subscribe("beforecut",O);X.subscribe("cut",U);X.subscribe("copy",W);X.subscribe("beforepaste",H);X.subscribe("paste",E);X.subscribe("mousedown",na);X.subscribe("mousemove",ua.trigger);X.subscribe("mouseup",J);X. [...]
- Q);X.subscribe("focus",ha);F.subscribe(ops.OdtDocument.signalOperationExecuted,$);F.subscribe(ops.OdtDocument.signalOperationExecuted,M);a=new ops.OpAddCursor;a.init({memberid:f});h.enqueue([a]);ca&&ca.saveInitialState()};this.endEditing=function(){var a;a=new ops.OpRemoveCursor;a.init({memberid:f});h.enqueue([a]);ca&&ca.resetInitialState();F.unsubscribe(ops.OdtDocument.signalOperationExecuted,M);F.unsubscribe(ops.OdtDocument.signalOperationExecuted,$);X.unsubscribe("keydown",L.handleEv [...]
- sa.handleEvent);X.unsubscribe("keyup",p);X.unsubscribe("cut",U);X.unsubscribe("beforecut",O);X.unsubscribe("copy",W);X.unsubscribe("paste",E);X.unsubscribe("beforepaste",H);X.unsubscribe("mousemove",ua.trigger);X.unsubscribe("mousedown",na);X.unsubscribe("mouseup",J);X.unsubscribe("contextmenu",Q);X.unsubscribe("focus",ha);F.getOdfCanvas().getElement().classList.remove("virtualSelections")};this.getInputMemberId=function(){return f};this.getSession=function(){return h};this.setUndoManag [...]
- ca.unsubscribe(gui.UndoManager.signalUndoStackChanged,S);if(ca=a)ca.setOdtDocument(F),ca.setPlaybackFunction(function(a){a.execute(F)}),ca.subscribe(gui.UndoManager.signalUndoStackChanged,S)};this.getUndoManager=function(){return ca};this.getAnnotationManager=function(){return ga};this.getDirectTextStyler=function(){return K};this.getDirectParagraphStyler=function(){return ja};this.getImageManager=function(){return Aa};this.getTextManipulator=function(){return qa};this.getEventManager=f [...]
- this.getKeyboardHandlers=function(){return{keydown:L,keypress:sa}};this.destroy=function(a){var b=[ua.destroy];K&&b.push(K.destroy);ja&&b.push(ja.destroy);ia.destroyAll(b,a)};(function(){var a=-1!==fa.navigator.appVersion.toLowerCase().indexOf("mac"),b=gui.KeyboardHandler.Modifier,c=gui.KeyboardHandler.KeyCode;ua=new core.ScheduledTask(ea,0);L.bind(c.Tab,b.None,D(function(){qa.insertText("\t");return!0}));L.bind(c.Left,b.None,D(q));L.bind(c.Right,b.None,D(l));L.bind(c.Up,b.None,D(v));L. [...]
- b.None,D(y));L.bind(c.Backspace,b.None,oa(qa.removeTextByBackspaceKey));L.bind(c.Delete,b.None,qa.removeTextByDeleteKey);L.bind(c.Left,b.Shift,D(r));L.bind(c.Right,b.Shift,D(t));L.bind(c.Up,b.Shift,D(x));L.bind(c.Down,b.Shift,D(u));L.bind(c.Home,b.None,D(C));L.bind(c.End,b.None,D(B));L.bind(c.Home,b.Ctrl,D(R));L.bind(c.End,b.Ctrl,D(Z));L.bind(c.Home,b.Shift,D(A));L.bind(c.End,b.Shift,D(I));L.bind(c.Up,b.CtrlShift,D(z));L.bind(c.Down,b.CtrlShift,D(N));L.bind(c.Home,b.CtrlShift,D(ka));L.b [...]
- b.CtrlShift,D(T));a?(L.bind(c.Clear,b.None,qa.removeCurrentSelection),L.bind(c.Left,b.Meta,D(C)),L.bind(c.Right,b.Meta,D(B)),L.bind(c.Home,b.Meta,D(R)),L.bind(c.End,b.Meta,D(Z)),L.bind(c.Left,b.MetaShift,D(A)),L.bind(c.Right,b.MetaShift,D(I)),L.bind(c.Up,b.AltShift,D(z)),L.bind(c.Down,b.AltShift,D(N)),L.bind(c.Up,b.MetaShift,D(ka)),L.bind(c.Down,b.MetaShift,D(T)),L.bind(c.A,b.Meta,D(ra)),K&&(L.bind(c.B,b.Meta,D(K.toggleBold)),L.bind(c.I,b.Meta,D(K.toggleItalic)),L.bind(c.U,b.Meta,D(K.to [...]
- ja&&(L.bind(c.L,b.MetaShift,D(ja.alignParagraphLeft)),L.bind(c.E,b.MetaShift,D(ja.alignParagraphCenter)),L.bind(c.R,b.MetaShift,D(ja.alignParagraphRight)),L.bind(c.J,b.MetaShift,D(ja.alignParagraphJustified))),ga&&L.bind(c.C,b.MetaShift,ga.addAnnotation),L.bind(c.Z,b.Meta,P),L.bind(c.Z,b.MetaShift,aa)):(L.bind(c.A,b.Ctrl,D(ra)),K&&(L.bind(c.B,b.Ctrl,D(K.toggleBold)),L.bind(c.I,b.Ctrl,D(K.toggleItalic)),L.bind(c.U,b.Ctrl,D(K.toggleUnderline))),ja&&(L.bind(c.L,b.CtrlShift,D(ja.alignParagr [...]
- L.bind(c.E,b.CtrlShift,D(ja.alignParagraphCenter)),L.bind(c.R,b.CtrlShift,D(ja.alignParagraphRight)),L.bind(c.J,b.CtrlShift,D(ja.alignParagraphJustified))),ga&&L.bind(c.C,b.CtrlAlt,ga.addAnnotation),L.bind(c.Z,b.Ctrl,P),L.bind(c.Z,b.CtrlShift,aa));sa.setDefault(D(function(a){var b;b=null===a.which||void 0===a.which?String.fromCharCode(a.keyCode):0!==a.which&&0!==a.charCode?String.fromCharCode(a.which):null;return!b||a.altKey||a.ctrlKey||a.metaKey?!1:(qa.insertText(b),!0)}));sa.bind(c.En [...]
- D(qa.enqueueParagraphSplittingOps))})()};return gui.SessionController}();
- // Input 79
++runtime.loadClass("gui.ImageSelector");runtime.loadClass("gui.TextManipulator");runtime.loadClass("gui.AnnotationManager");runtime.loadClass("gui.EventManager");runtime.loadClass("gui.PlainTextPasteboard");
++gui.SessionController=function(){var h=core.PositionFilter.FilterResult.FILTER_ACCEPT;gui.SessionController=function(m,e,p,l){function q(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function a(a,b,c){var d=new ops.OpMoveCursor;d.init({memberid:e,position:a,length:b||0,selectionType:c});return d}function d(b){b=J.getDistanceFromCursor(e,b,0);var c=null!==b?b+1:null,d;if(c||b)d=J.getCursorPosition(e),b=a(d+b,c-b,ops.OdtCursor.RegionSelection),m.enqueue([b]);X.focus()}function f [...]
++f,g,h;f=J.getOdfCanvas().getElement();d=c.detail;if(b){if(!b.anchorNode&&!b.focusNode){g=c.clientX;h=c.clientY;var k=J.getDOM();k.caretRangeFromPoint?(g=k.caretRangeFromPoint(g,h),g={container:g.startContainer,offset:g.startOffset}):k.caretPositionFromPoint?(g=k.caretPositionFromPoint(g,h),g={container:g.offsetNode,offset:g.offset}):g=null;if(!g)return;b.anchorNode=g.container;b.anchorOffset=g.offset;b.focusNode=b.anchorNode;b.focusOffset=b.anchorOffset}runtime.assert(null!==b.anchorNod [...]
++b.focusNode,"anchorNode or focusNode is null");g=fa.containsNode(f,b.anchorNode);f=fa.containsNode(f,b.focusNode);if(g||f){if(g&&f)if(2===d){var k=/[A-Za-z0-9]/,l=gui.SelectionMover.createPositionIterator(J.getRootNode()),n=0<fa.comparePoints(b.anchorNode,b.anchorOffset,b.focusNode,b.focusOffset),p;n?(g=b.anchorNode,h=b.anchorOffset,d=b.focusNode,f=b.focusOffset):(g=b.focusNode,h=b.focusOffset,d=b.anchorNode,f=b.anchorOffset);for(l.setUnfilteredPosition(g,h);l.previousPosition();){p=l.g [...]
++if(p.nodeType===Node.TEXT_NODE){if(p=p.data[l.unfilteredDomOffset()],!k.test(p))break}else if(!W.isTextSpan(p))break;g=l.container();h=l.unfilteredDomOffset()}l.setUnfilteredPosition(d,f);do if(p=l.getCurrentNode(),p.nodeType===Node.TEXT_NODE){if(p=p.data[l.unfilteredDomOffset()],!k.test(p))break}else if(!W.isTextSpan(p))break;while(l.nextPosition());d=l.container();f=l.unfilteredDomOffset();n?(b.anchorNode=g,b.anchorOffset=h,b.focusNode=d,b.focusOffset=f):(b.focusNode=g,b.focusOffset=h [...]
++d,b.anchorOffset=f)}else 3<=d&&(d=J.getParagraphElement(b.anchorNode),f=J.getParagraphElement(b.focusNode),d&&(b.anchorNode=d,b.anchorOffset=0),f&&(b.focusNode=f,b.focusOffset=f.childNodes.length));f=J.convertDomToCursorRange(b.anchorNode,b.anchorOffset,b.focusNode,b.focusOffset);d=J.getCursorSelection(e);if(f.position!==d.position||f.length!==d.length)d=a(f.position,f.length,ops.OdtCursor.RangeSelection),m.enqueue([d]);X.focus()}}}function b(b){var c=J.getCursorSelection(e),d=J.getCurs [...]
++0!==b&&(b=0<b?d.convertForwardStepsBetweenFilters(b,la,ta):-d.convertBackwardStepsBetweenFilters(-b,la,ta),b=c.length+b,m.enqueue([a(c.position,b)]))}function k(b){var c=J.getCursorPosition(e),d=J.getCursor(e).getStepCounter();0!==b&&(b=0<b?d.convertForwardStepsBetweenFilters(b,la,ta):-d.convertBackwardStepsBetweenFilters(-b,la,ta),m.enqueue([a(c+b,0)]))}function c(){k(-1);return!0}function g(){k(1);return!0}function n(){b(-1);return!0}function r(){b(1);return!0}function u(a,c){var d=J. [...]
++runtime.assert(Boolean(d),"SessionController: Cursor outside paragraph");d=J.getCursor(e).getStepCounter().countLinesSteps(a,la);c?b(d):k(d)}function y(){u(-1,!1);return!0}function x(){u(1,!1);return!0}function w(){u(-1,!0);return!0}function v(){u(1,!0);return!0}function t(a,c){var d=J.getCursor(e).getStepCounter().countStepsToLineBoundary(a,la);c?b(d):k(d)}function s(){t(-1,!1);return!0}function D(){t(1,!1);return!0}function A(){t(-1,!0);return!0}function C(){t(1,!0);return!0}function  [...]
++J.getParagraphElement(J.getCursor(e).getNode()),c,d;runtime.assert(Boolean(a),"SessionController: Cursor outside paragraph");d=J.getDistanceFromCursor(e,a,0);c=gui.SelectionMover.createPositionIterator(J.getRootNode());for(c.setUnfilteredPosition(a,0);0===d&&c.previousPosition();)a=c.getCurrentNode(),W.isParagraph(a)&&(d=J.getDistanceFromCursor(e,a,0));b(d);return!0}function z(){var a=J.getParagraphElement(J.getCursor(e).getNode()),c,d;runtime.assert(Boolean(a),"SessionController: Curso [...]
++c=gui.SelectionMover.createPositionIterator(J.getRootNode());c.moveToEndOfNode(a);for(d=J.getDistanceFromCursor(e,c.container(),c.unfilteredDomOffset());0===d&&c.nextPosition();)a=c.getCurrentNode(),W.isParagraph(a)&&(c.moveToEndOfNode(a),d=J.getDistanceFromCursor(e,c.container(),c.unfilteredDomOffset()));b(d);return!0}function M(a,c){var d=gui.SelectionMover.createPositionIterator(J.getRootNode());0<a&&d.moveToEnd();d=J.getDistanceFromCursor(e,d.container(),d.unfilteredDomOffset());c?b [...]
++!1);return!0}function R(){M(1,!1);return!0}function Z(){M(-1,!0);return!0}function ja(){M(1,!0);return!0}function E(){var b=J.getRootNode(),b=J.convertDomPointToCursorStep(b,b.childNodes.length);m.enqueue([a(0,b)]);return!0}function ka(){var a=J.getCursor(e),b=U.getSelection(),c;a?(ua.clearSelection(),a.getSelectionType()===ops.OdtCursor.RegionSelection&&(c=W.getImageElements(a.getSelectedRange())[0])&&ua.select(c.parentNode),X.hasFocus()&&(c=a.getSelectedRange(),b.extend?a.hasForwardSe [...]
++(b.collapse(c.startContainer,c.startOffset),b.extend(c.endContainer,c.endOffset)):(b.collapse(c.endContainer,c.endOffset),b.extend(c.startContainer,c.startOffset)):(b.removeAllRanges(),b.addRange(c.cloneRange())))):ua.clearSelection()}function ba(){runtime.setTimeout(ka,0)}function ga(a){var b=J.getCursor(e);b.getSelectedRange().collapsed||(ha.setDataFromRange(a,b.getSelectedRange())?na.removeCurrentSelection():runtime.log("Cut operation failed"))}function S(){return!1!==J.getCursor(e). [...]
++function Y(a){var b=J.getCursor(e);b.getSelectedRange().collapsed||ha.setDataFromRange(a,b.getSelectedRange())||runtime.log("Cut operation failed")}function V(a){var b;U.clipboardData&&U.clipboardData.getData?b=U.clipboardData.getData("Text"):a.clipboardData&&a.clipboardData.getData&&(b=a.clipboardData.getData("text/plain"));b&&(na.removeCurrentSelection(),m.enqueue(ya.createPasteOps(b)),a.preventDefault?a.preventDefault():a.returnValue=!1)}function N(){return!1}function L(a){if(ea)ea.o [...]
++function G(a){J.emit(ops.OdtDocument.signalUndoStackChanged,a)}function Q(){return ea?(ea.moveBackward(1),ka(),!0):!1}function O(){return ea?(ea.moveForward(1),ka(),!0):!1}function ca(a){if(ma=(a=a.target||a.srcElement)&&fa.containsNode(J.getOdfCanvas().getElement(),a))va=!1,wa=J.createRootFilter(a)}function oa(a){var b=a.getSelectedRange();return a.hasForwardSelection()?{anchorNode:b.startContainer,anchorOffset:b.startOffset,focusNode:b.endContainer,focusOffset:b.endOffset}:{anchorNode [...]
++anchorOffset:b.endOffset,focusNode:b.startContainer,focusOffset:b.startOffset}}function da(a){var b=a.target||a.srcElement,c={detail:a.detail,clientX:a.clientX,clientY:a.clientY,target:b};qa.processRequests();W.isImage(b)&&W.isCharacterFrame(b.parentNode)?d(b.parentNode):ma&&!ua.isSelectorElement(b)&&(va?f(oa(p),a):runtime.setTimeout(function(){var a;a=(a=U.getSelection())?{anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}:null;f(a,c)}, [...]
++!1}function T(a){da(a)}function P(a){var b=a.target||a.srcElement,c=null;"annotationRemoveButton"===b.className?(c=fa.getElementsByTagNameNS(b.parentNode,odf.Namespaces.officens,"annotation")[0],pa.removeAnnotation(c)):da(a)}function ra(){var a=U.getSelection(),b;ma&&0<a.rangeCount&&(va=!0,ua.clearSelection(),xa.setUnfilteredPosition(a.focusNode,a.focusOffset),wa.acceptPosition(xa)===h&&(b=a.getRangeAt(0).cloneRange(),a=a.anchorNode===b.startContainer&&a.anchorOffset===b.startOffset,p.s [...]
++a),J.emit(ops.OdtDocument.signalCursorMoved,p)))}function $(a){return function(){a();return!0}}function F(a){return function(b){return J.getCursor(e).getSelectionType()===ops.OdtCursor.RangeSelection?a(b):!0}}var U=runtime.getWindow(),J=m.getOdtDocument(),ia=new core.Async,fa=new core.DomUtils,W=new odf.OdfUtils,ha=new gui.Clipboard,B=new gui.KeyboardHandler,sa=new gui.KeyboardHandler,la=new core.PositionFilterChain,ta=J.getPositionFilter(),ma=!1,za=new odf.ObjectNameGenerator(J.getOdfC [...]
++e),va=!1,wa=null,ea=null,X=new gui.EventManager(J),pa=new gui.AnnotationManager(m,e),aa=new gui.DirectTextStyler(m,e),K=l&&l.directParagraphStylingEnabled?new gui.DirectParagraphStyler(m,e,za):null,na=new gui.TextManipulator(m,e,aa.createCursorStyleOp),Aa=new gui.ImageManager(m,e,za),ua=new gui.ImageSelector(J.getOdfCanvas()),xa=gui.SelectionMover.createPositionIterator(J.getRootNode()),qa,ya=new gui.PlainTextPasteboard(J,e);runtime.assert(null!==U,"Expected to be run in an environment  [...]
++la.addFilter("BaseFilter",ta);la.addFilter("RootFilter",J.createRootFilter(e));this.selectRange=f;this.moveCursorToLeft=c;this.moveCursorToDocumentBoundary=M;this.extendSelectionToEntireDocument=E;this.startEditing=function(){var a;J.getOdfCanvas().getElement().classList.add("virtualSelections");X.subscribe("keydown",B.handleEvent);X.subscribe("keypress",sa.handleEvent);X.subscribe("keyup",q);X.subscribe("beforecut",S);X.subscribe("cut",ga);X.subscribe("copy",Y);X.subscribe("beforepaste [...]
++V);X.subscribe("mousedown",ca);X.subscribe("mousemove",qa.trigger);X.subscribe("mouseup",P);X.subscribe("contextmenu",T);X.subscribe("focus",ba);J.subscribe(ops.OdtDocument.signalOperationExecuted,ka);J.subscribe(ops.OdtDocument.signalOperationExecuted,L);a=new ops.OpAddCursor;a.init({memberid:e});m.enqueue([a]);ea&&ea.saveInitialState()};this.endEditing=function(){var a;a=new ops.OpRemoveCursor;a.init({memberid:e});m.enqueue([a]);ea&&ea.resetInitialState();J.unsubscribe(ops.OdtDocument [...]
++L);J.unsubscribe(ops.OdtDocument.signalOperationExecuted,ka);X.unsubscribe("keydown",B.handleEvent);X.unsubscribe("keypress",sa.handleEvent);X.unsubscribe("keyup",q);X.unsubscribe("cut",ga);X.unsubscribe("beforecut",S);X.unsubscribe("copy",Y);X.unsubscribe("paste",V);X.unsubscribe("beforepaste",N);X.unsubscribe("mousemove",qa.trigger);X.unsubscribe("mousedown",ca);X.unsubscribe("mouseup",P);X.unsubscribe("contextmenu",T);X.unsubscribe("focus",ba);J.getOdfCanvas().getElement().classList. [...]
++this.getInputMemberId=function(){return e};this.getSession=function(){return m};this.setUndoManager=function(a){ea&&ea.unsubscribe(gui.UndoManager.signalUndoStackChanged,G);if(ea=a)ea.setOdtDocument(J),ea.setPlaybackFunction(function(a){a.execute(J)}),ea.subscribe(gui.UndoManager.signalUndoStackChanged,G)};this.getUndoManager=function(){return ea};this.getAnnotationManager=function(){return pa};this.getDirectTextStyler=function(){return aa};this.getDirectParagraphStyler=function(){retur [...]
++function(){return Aa};this.getTextManipulator=function(){return na};this.getEventManager=function(){return X};this.getKeyboardHandlers=function(){return{keydown:B,keypress:sa}};this.destroy=function(a){var b=[qa.destroy,aa.destroy];K&&b.push(K.destroy);ia.destroyAll(b,a)};(function(){var a=-1!==U.navigator.appVersion.toLowerCase().indexOf("mac"),b=gui.KeyboardHandler.Modifier,d=gui.KeyboardHandler.KeyCode;qa=new core.ScheduledTask(ra,0);B.bind(d.Tab,b.None,F(function(){na.insertText("\t [...]
++B.bind(d.Left,b.None,F(c));B.bind(d.Right,b.None,F(g));B.bind(d.Up,b.None,F(y));B.bind(d.Down,b.None,F(x));B.bind(d.Backspace,b.None,$(na.removeTextByBackspaceKey));B.bind(d.Delete,b.None,na.removeTextByDeleteKey);B.bind(d.Left,b.Shift,F(n));B.bind(d.Right,b.Shift,F(r));B.bind(d.Up,b.Shift,F(w));B.bind(d.Down,b.Shift,F(v));B.bind(d.Home,b.None,F(s));B.bind(d.End,b.None,F(D));B.bind(d.Home,b.Ctrl,F(H));B.bind(d.End,b.Ctrl,F(R));B.bind(d.Home,b.Shift,F(A));B.bind(d.End,b.Shift,F(C));B.bin [...]
++F(I));B.bind(d.Down,b.CtrlShift,F(z));B.bind(d.Home,b.CtrlShift,F(Z));B.bind(d.End,b.CtrlShift,F(ja));a?(B.bind(d.Clear,b.None,na.removeCurrentSelection),B.bind(d.Left,b.Meta,F(s)),B.bind(d.Right,b.Meta,F(D)),B.bind(d.Home,b.Meta,F(H)),B.bind(d.End,b.Meta,F(R)),B.bind(d.Left,b.MetaShift,F(A)),B.bind(d.Right,b.MetaShift,F(C)),B.bind(d.Up,b.AltShift,F(I)),B.bind(d.Down,b.AltShift,F(z)),B.bind(d.Up,b.MetaShift,F(Z)),B.bind(d.Down,b.MetaShift,F(ja)),B.bind(d.A,b.Meta,F(E)),B.bind(d.B,b.Meta [...]
++B.bind(d.I,b.Meta,F(aa.toggleItalic)),B.bind(d.U,b.Meta,F(aa.toggleUnderline)),K&&(B.bind(d.L,b.MetaShift,F(K.alignParagraphLeft)),B.bind(d.E,b.MetaShift,F(K.alignParagraphCenter)),B.bind(d.R,b.MetaShift,F(K.alignParagraphRight)),B.bind(d.J,b.MetaShift,F(K.alignParagraphJustified))),pa&&B.bind(d.C,b.MetaShift,pa.addAnnotation),B.bind(d.Z,b.Meta,Q),B.bind(d.Z,b.MetaShift,O)):(B.bind(d.A,b.Ctrl,F(E)),B.bind(d.B,b.Ctrl,F(aa.toggleBold)),B.bind(d.I,b.Ctrl,F(aa.toggleItalic)),B.bind(d.U,b.Ct [...]
++K&&(B.bind(d.L,b.CtrlShift,F(K.alignParagraphLeft)),B.bind(d.E,b.CtrlShift,F(K.alignParagraphCenter)),B.bind(d.R,b.CtrlShift,F(K.alignParagraphRight)),B.bind(d.J,b.CtrlShift,F(K.alignParagraphJustified))),pa&&B.bind(d.C,b.CtrlAlt,pa.addAnnotation),B.bind(d.Z,b.Ctrl,Q),B.bind(d.Z,b.CtrlShift,O));sa.setDefault(F(function(a){var b;b=null===a.which||void 0===a.which?String.fromCharCode(a.keyCode):0!==a.which&&0!==a.charCode?String.fromCharCode(a.which):null;return!b||a.altKey||a.ctrlKey||a. [...]
++(na.insertText(b),!0)}));sa.bind(d.Enter,b.None,F(na.enqueueParagraphSplittingOps))})()};return gui.SessionController}();
++// Input 82
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdates=function(e,h){};ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates=function(e,h){};ops.MemberModel.prototype.close=function(e){};
- // Input 80
++ops.MemberModel=function(){};ops.MemberModel.prototype.getMemberDetailsAndUpdates=function(h,m){};ops.MemberModel.prototype.unsubscribeMemberDetailsUpdates=function(h,m){};ops.MemberModel.prototype.close=function(h){};
++// Input 83
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(e,h){h(e,{memberid:e,fullname:runtime.tr("Unknown Author"),color:"black",imageurl:"avatar-joe.png"})};this.unsubscribeMemberDetailsUpdates=function(e,h){};this.close=function(e){e()}};
- // Input 81
++ops.TrivialMemberModel=function(){this.getMemberDetailsAndUpdates=function(h,m){m(h,{memberid:h,fullname:runtime.tr("Unknown Author"),color:"black",imageurl:"avatar-joe.png"})};this.unsubscribeMemberDetailsUpdates=function(h,m){};this.close=function(h){h()}};
++// Input 84
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.OperationRouter=function(){};ops.OperationRouter.prototype.setOperationFactory=function(e){};ops.OperationRouter.prototype.setPlaybackFunction=function(e){};ops.OperationRouter.prototype.push=function(e){};ops.OperationRouter.prototype.close=function(e){};
- // Input 82
++ops.OperationRouter=function(){};ops.OperationRouter.prototype.setOperationFactory=function(h){};ops.OperationRouter.prototype.setPlaybackFunction=function(h){};ops.OperationRouter.prototype.push=function(h){};ops.OperationRouter.prototype.close=function(h){};
++// Input 85
 +/*
 +
 + Copyright (C) 2012 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- ops.TrivialOperationRouter=function(){var e,h;this.setOperationFactory=function(f){e=f};this.setPlaybackFunction=function(e){h=e};this.push=function(f){f.forEach(function(f){f=f.spec();f.timestamp=(new Date).getTime();f=e.create(f);h(f)})};this.close=function(e){e()}};
- // Input 83
- gui.EditInfoHandle=function(e){var h=[],f,n=e.ownerDocument,m=n.documentElement.namespaceURI;this.setEdits=function(e){h=e;var c,b,a,d;f.innerHTML="";for(e=0;e<h.length;e+=1)c=n.createElementNS(m,"div"),c.className="editInfo",b=n.createElementNS(m,"span"),b.className="editInfoColor",b.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",h[e].memberid),a=n.createElementNS(m,"span"),a.className="editInfoAuthor",a.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",h[e [...]
- d=n.createElementNS(m,"span"),d.className="editInfoTime",d.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",h[e].memberid),d.innerHTML=h[e].time,c.appendChild(b),c.appendChild(a),c.appendChild(d),f.appendChild(c)};this.show=function(){f.style.display="block"};this.hide=function(){f.style.display="none"};this.destroy=function(h){e.removeChild(f);h()};f=n.createElementNS(m,"div");f.setAttribute("class","editInfoHandle");f.style.display="none";e.appendChild(f)};
- // Input 84
++ops.TrivialOperationRouter=function(){var h,m;this.setOperationFactory=function(e){h=e};this.setPlaybackFunction=function(e){m=e};this.push=function(e){e.forEach(function(e){e=e.spec();e.timestamp=(new Date).getTime();e=h.create(e);m(e)})};this.close=function(e){e()}};
++// Input 86
++gui.EditInfoHandle=function(h){var m=[],e,p=h.ownerDocument,l=p.documentElement.namespaceURI;this.setEdits=function(h){m=h;var a,d,f,b;e.innerHTML="";for(h=0;h<m.length;h+=1)a=p.createElementNS(l,"div"),a.className="editInfo",d=p.createElementNS(l,"span"),d.className="editInfoColor",d.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",m[h].memberid),f=p.createElementNS(l,"span"),f.className="editInfoAuthor",f.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",m[h [...]
++b=p.createElementNS(l,"span"),b.className="editInfoTime",b.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",m[h].memberid),b.innerHTML=m[h].time,a.appendChild(d),a.appendChild(f),a.appendChild(b),e.appendChild(a)};this.show=function(){e.style.display="block"};this.hide=function(){e.style.display="none"};this.destroy=function(l){h.removeChild(e);l()};e=p.createElementNS(l,"div");e.setAttribute("class","editInfoHandle");e.style.display="none";h.appendChild(e)};
++// Input 87
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.EditInfo");runtime.loadClass("gui.EditInfoHandle");
- gui.EditInfoMarker=function(e,h){function f(a,b){return runtime.setTimeout(function(){c.style.opacity=a},b)}var n=this,m,p,c,b,a;this.addEdit=function(d,h){var g=Date.now()-h;e.addEdit(d,h);p.setEdits(e.getSortedEdits());c.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",d);b&&runtime.clearTimeout(b);a&&runtime.clearTimeout(a);1E4>g?(f(1,0),b=f(0.5,1E4-g),a=f(0.2,2E4-g)):1E4<=g&&2E4>g?(f(0.5,0),a=f(0.2,2E4-g)):f(0.2,0)};this.getEdits=function(){return e.getEdits()};this.cl [...]
- p.setEdits([]);c.hasAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")&&c.removeAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")};this.getEditInfo=function(){return e};this.show=function(){c.style.display="block"};this.hide=function(){n.hideHandle();c.style.display="none"};this.showHandle=function(){p.show()};this.hideHandle=function(){p.hide()};this.destroy=function(a){m.removeChild(c);p.destroy(function(b){b?a(b):e.destroy(a)})};(function(){var a=e.getOdtDocument [...]
- c=a.createElementNS(a.documentElement.namespaceURI,"div");c.setAttribute("class","editInfoMarker");c.onmouseover=function(){n.showHandle()};c.onmouseout=function(){n.hideHandle()};m=e.getNode();m.appendChild(c);p=new gui.EditInfoHandle(m);h||n.hide()})()};
- // Input 85
++gui.EditInfoMarker=function(h,m){function e(b,d){return runtime.setTimeout(function(){a.style.opacity=b},d)}var p=this,l,q,a,d,f;this.addEdit=function(b,k){var c=Date.now()-k;h.addEdit(b,k);q.setEdits(h.getSortedEdits());a.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",b);d&&runtime.clearTimeout(d);f&&runtime.clearTimeout(f);1E4>c?(e(1,0),d=e(0.5,1E4-c),f=e(0.2,2E4-c)):1E4<=c&&2E4>c?(e(0.5,0),f=e(0.2,2E4-c)):e(0.2,0)};this.getEdits=function(){return h.getEdits()};this.cl [...]
++q.setEdits([]);a.hasAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")&&a.removeAttributeNS("urn:webodf:names:editinfo","editinfo:memberid")};this.getEditInfo=function(){return h};this.show=function(){a.style.display="block"};this.hide=function(){p.hideHandle();a.style.display="none"};this.showHandle=function(){q.show()};this.hideHandle=function(){q.hide()};this.destroy=function(b){l.removeChild(a);q.destroy(function(a){a?b(a):h.destroy(b)})};(function(){var b=h.getOdtDocument [...]
++a=b.createElementNS(b.documentElement.namespaceURI,"div");a.setAttribute("class","editInfoMarker");a.onmouseover=function(){p.showHandle()};a.onmouseout=function(){p.hideHandle()};l=h.getNode();l.appendChild(a);q=new gui.EditInfoHandle(l);m||p.hide()})()};
++// Input 88
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.Caret");runtime.loadClass("ops.TrivialMemberModel");runtime.loadClass("ops.EditInfo");runtime.loadClass("gui.EditInfoMarker");gui.SessionViewOptions=function(){this.caretBlinksOnRangeSelect=this.caretAvatarsInitiallyVisible=this.editInfoMarkersInitiallyVisible=!0};
- gui.SessionView=function(){return function(e,h,f,n,m){function p(a,b,c){function d(b,c,e){c=b+'[editinfo|memberid="'+a+'"]'+e+c;a:{var f=t.firstChild;for(b=b+'[editinfo|memberid="'+a+'"]'+e+"{";f;){if(f.nodeType===Node.TEXT_NODE&&0===f.data.indexOf(b)){b=f;break a}f=f.nextSibling}b=null}b?b.data=c:t.appendChild(document.createTextNode(c))}d("div.editInfoMarker","{ background-color: "+c+"; }","");d("span.editInfoColor","{ background-color: "+c+"; }","");d("span.editInfoAuthor",'{ content [...]
- ":before");d("dc|creator",'{ content: "'+b+'"; display: none;}',":before");d("dc|creator","{ background-color: "+c+"; }","");d("div.selectionOverlay","{ background-color: "+c+";}","")}function c(a){var b,c;for(c in v)v.hasOwnProperty(c)&&(b=v[c],a?b.show():b.hide())}function b(a){n.getCarets().forEach(function(b){a?b.showHandle():b.hideHandle()})}function a(a,b){var c=n.getCaret(a);b?(c&&(c.setAvatarImageUrl(b.imageurl),c.setColor(b.color)),p(a,b.fullname,b.color),h===a&&p("",b.fullname [...]
- runtime.log('MemberModel sent undefined data for member "'+a+'".')}function d(b){var c=b.getMemberId(),d=f.getMemberModel();n.registerCursor(b,x,u);m.registerCursor(b,!0);a(c,null);d.getMemberDetailsAndUpdates(c,a);runtime.log("+++ View here +++ eagerly created an Caret for '"+c+"'! +++")}function k(a){a=a.getMemberId();var b=m.getSelectionView(h),c=m.getSelectionView(gui.ShadowCursor.ShadowCursorMemberId),d=n.getCaret(h);a===h?(c.hide(),b.show(),d&&d.show()):a===gui.ShadowCursor.Shadow [...]
- (c.show(),b.hide(),d&&d.hide())}function g(b){var c=!1,d;for(d in v)if(v.hasOwnProperty(d)&&v[d].getEditInfo().getEdits().hasOwnProperty(b)){c=!0;break}m.removeSelectionView(b);c||f.getMemberModel().unsubscribeMemberDetailsUpdates(b,a)}function q(a){var b=a.paragraphElement,c=a.memberId;a=a.timeStamp;var d,e="",g=b.getElementsByTagNameNS(w,"editinfo")[0];g?(e=g.getAttributeNS(w,"id"),d=v[e]):(e=Math.random().toString(),d=new ops.EditInfo(b,f.getOdtDocument()),d=new gui.EditInfoMarker(d, [...]
- "editinfo")[0],g.setAttributeNS(w,"id",e),v[e]=d);d.addEdit(c,new Date(a))}function l(){C=!0}function r(){s=runtime.getWindow().setInterval(function(){C&&(m.rerenderSelectionViews(),C=!1)},200)}var t,w="urn:webodf:names:editinfo",v={},y=void 0!==e.editInfoMarkersInitiallyVisible?Boolean(e.editInfoMarkersInitiallyVisible):!0,x=void 0!==e.caretAvatarsInitiallyVisible?Boolean(e.caretAvatarsInitiallyVisible):!0,u=void 0!==e.caretBlinksOnRangeSelect?Boolean(e.caretBlinksOnRangeSelect):!0,s,C [...]
- function(){y||(y=!0,c(y))};this.hideEditInfoMarkers=function(){y&&(y=!1,c(y))};this.showCaretAvatars=function(){x||(x=!0,b(x))};this.hideCaretAvatars=function(){x&&(x=!1,b(x))};this.getSession=function(){return f};this.getCaret=function(a){return n.getCaret(a)};this.destroy=function(b){var c=f.getOdtDocument(),e=f.getMemberModel(),h=Object.keys(v).map(function(a){return v[a]});c.unsubscribe(ops.OdtDocument.signalCursorAdded,d);c.unsubscribe(ops.OdtDocument.signalCursorRemoved,g);c.unsub [...]
- q);c.unsubscribe(ops.OdtDocument.signalCursorMoved,k);c.unsubscribe(ops.OdtDocument.signalParagraphChanged,l);c.unsubscribe(ops.OdtDocument.signalTableAdded,l);c.unsubscribe(ops.OdtDocument.signalParagraphStyleModified,l);runtime.getWindow().clearInterval(s);n.getCarets().forEach(function(b){e.unsubscribeMemberDetailsUpdates(b.getCursor().getMemberId(),a)});t.parentNode.removeChild(t);(function G(a,c){c?b(c):a<h.length?h[a].destroy(function(b){G(a+1,b)}):b()})(0,void 0)};(function(){var [...]
- b=document.getElementsByTagName("head")[0];a.subscribe(ops.OdtDocument.signalCursorAdded,d);a.subscribe(ops.OdtDocument.signalCursorRemoved,g);a.subscribe(ops.OdtDocument.signalParagraphChanged,q);a.subscribe(ops.OdtDocument.signalCursorMoved,k);r();a.subscribe(ops.OdtDocument.signalParagraphChanged,l);a.subscribe(ops.OdtDocument.signalTableAdded,l);a.subscribe(ops.OdtDocument.signalParagraphStyleModified,l);t=document.createElementNS(b.namespaceURI,"style");t.type="text/css";t.media="s [...]
- t.appendChild(document.createTextNode("@namespace editinfo url(urn:webodf:names:editinfo);"));t.appendChild(document.createTextNode("@namespace dc url(http://purl.org/dc/elements/1.1/);"));b.appendChild(t)})()}}();
- // Input 86
++gui.SessionView=function(){return function(h,m,e,p,l){function q(a,b,c){function d(b,c,e){c=b+'[editinfo|memberid="'+a+'"]'+e+c;a:{var f=u.firstChild;for(b=b+'[editinfo|memberid="'+a+'"]'+e+"{";f;){if(f.nodeType===Node.TEXT_NODE&&0===f.data.indexOf(b)){b=f;break a}f=f.nextSibling}b=null}b?b.data=c:u.appendChild(document.createTextNode(c))}d("div.editInfoMarker","{ background-color: "+c+"; }","");d("span.editInfoColor","{ background-color: "+c+"; }","");d("span.editInfoAuthor",'{ content [...]
++":before");d("dc|creator",'{ content: "'+b+'"; display: none;}',":before");d("dc|creator","{ background-color: "+c+"; }","");d("div.selectionOverlay","{ background-color: "+c+";}","")}function a(a){var b,c;for(c in x)x.hasOwnProperty(c)&&(b=x[c],a?b.show():b.hide())}function d(a){p.getCarets().forEach(function(b){a?b.showHandle():b.hideHandle()})}function f(a,b){var c=p.getCaret(a);b?(c&&(c.setAvatarImageUrl(b.imageurl),c.setColor(b.color)),q(a,b.fullname,b.color),m===a&&q("",b.fullname [...]
++runtime.log('MemberModel sent undefined data for member "'+a+'".')}function b(a){var b=a.getMemberId(),c=e.getMemberModel();p.registerCursor(a,v,t);l.registerCursor(a,!0);f(b,null);c.getMemberDetailsAndUpdates(b,f);runtime.log("+++ View here +++ eagerly created an Caret for '"+b+"'! +++")}function k(a){a=a.getMemberId();var b=l.getSelectionView(m),c=l.getSelectionView(gui.ShadowCursor.ShadowCursorMemberId),d=p.getCaret(m);a===m?(c.hide(),b.show(),d&&d.show()):a===gui.ShadowCursor.Shadow [...]
++(c.show(),b.hide(),d&&d.hide())}function c(a){var b=!1,c;for(c in x)if(x.hasOwnProperty(c)&&x[c].getEditInfo().getEdits().hasOwnProperty(a)){b=!0;break}l.removeSelectionView(a);b||e.getMemberModel().unsubscribeMemberDetailsUpdates(a,f)}function g(a){var b=a.paragraphElement,c=a.memberId;a=a.timeStamp;var d,f="",g=b.getElementsByTagNameNS(y,"editinfo")[0];g?(f=g.getAttributeNS(y,"id"),d=x[f]):(f=Math.random().toString(),d=new ops.EditInfo(b,e.getOdtDocument()),d=new gui.EditInfoMarker(d, [...]
++"editinfo")[0],g.setAttributeNS(y,"id",f),x[f]=d);d.addEdit(c,new Date(a))}function n(){D=!0}function r(){s=runtime.getWindow().setInterval(function(){D&&(l.rerenderSelectionViews(),D=!1)},200)}var u,y="urn:webodf:names:editinfo",x={},w=void 0!==h.editInfoMarkersInitiallyVisible?Boolean(h.editInfoMarkersInitiallyVisible):!0,v=void 0!==h.caretAvatarsInitiallyVisible?Boolean(h.caretAvatarsInitiallyVisible):!0,t=void 0!==h.caretBlinksOnRangeSelect?Boolean(h.caretBlinksOnRangeSelect):!0,s,D [...]
++function(){w||(w=!0,a(w))};this.hideEditInfoMarkers=function(){w&&(w=!1,a(w))};this.showCaretAvatars=function(){v||(v=!0,d(v))};this.hideCaretAvatars=function(){v&&(v=!1,d(v))};this.getSession=function(){return e};this.getCaret=function(a){return p.getCaret(a)};this.destroy=function(a){var d=e.getOdtDocument(),h=e.getMemberModel(),l=Object.keys(x).map(function(a){return x[a]});d.unsubscribe(ops.OdtDocument.signalCursorAdded,b);d.unsubscribe(ops.OdtDocument.signalCursorRemoved,c);d.unsub [...]
++g);d.unsubscribe(ops.OdtDocument.signalCursorMoved,k);d.unsubscribe(ops.OdtDocument.signalParagraphChanged,n);d.unsubscribe(ops.OdtDocument.signalTableAdded,n);d.unsubscribe(ops.OdtDocument.signalParagraphStyleModified,n);runtime.getWindow().clearInterval(s);p.getCarets().forEach(function(a){h.unsubscribeMemberDetailsUpdates(a.getCursor().getMemberId(),f)});u.parentNode.removeChild(u);(function H(b,c){c?a(c):b<l.length?l[b].destroy(function(a){H(b+1,a)}):a()})(0,void 0)};(function(){var [...]
++d=document.getElementsByTagName("head")[0];a.subscribe(ops.OdtDocument.signalCursorAdded,b);a.subscribe(ops.OdtDocument.signalCursorRemoved,c);a.subscribe(ops.OdtDocument.signalParagraphChanged,g);a.subscribe(ops.OdtDocument.signalCursorMoved,k);r();a.subscribe(ops.OdtDocument.signalParagraphChanged,n);a.subscribe(ops.OdtDocument.signalTableAdded,n);a.subscribe(ops.OdtDocument.signalParagraphStyleModified,n);u=document.createElementNS(d.namespaceURI,"style");u.type="text/css";u.media="s [...]
++u.appendChild(document.createTextNode("@namespace editinfo url(urn:webodf:names:editinfo);"));u.appendChild(document.createTextNode("@namespace dc url(http://purl.org/dc/elements/1.1/);"));d.appendChild(u)})()}}();
++// Input 89
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.Caret");
- gui.CaretManager=function(e){function h(a){return q.hasOwnProperty(a)?q[a]:null}function f(){return Object.keys(q).map(function(a){return q[a]})}function n(a){a===e.getInputMemberId()&&e.getSession().getOdtDocument().getOdfCanvas().getElement().removeAttribute("tabindex");delete q[a]}function m(a){a=a.getMemberId();a===e.getInputMemberId()&&(a=h(a))&&a.refreshCursorBlinking()}function p(){var a=h(e.getInputMemberId());r=!1;a&&a.ensureVisible()}function c(){var a=h(e.getInputMemberId()); [...]
- r||(r=!0,runtime.setTimeout(p,50)))}function b(a){a.memberId===e.getInputMemberId()&&c()}function a(){var a=h(e.getInputMemberId());a&&a.setFocus()}function d(){var a=h(e.getInputMemberId());a&&a.removeFocus()}function k(){var a=h(e.getInputMemberId());a&&a.show()}function g(){var a=h(e.getInputMemberId());a&&a.hide()}var q={},l=runtime.getWindow(),r=!1;this.registerCursor=function(a,b,d){var f=a.getMemberId();b=new gui.Caret(a,b,d);q[f]=b;f===e.getInputMemberId()?(runtime.log("Starting [...]
- f),a.handleUpdate=c,e.getSession().getOdtDocument().getOdfCanvas().getElement().setAttribute("tabindex",-1),e.getEventManager().focus()):a.handleUpdate=b.handleUpdate;return b};this.getCaret=h;this.getCarets=f;this.destroy=function(c){var h=e.getSession().getOdtDocument(),p=e.getEventManager(),r=f();h.unsubscribe(ops.OdtDocument.signalParagraphChanged,b);h.unsubscribe(ops.OdtDocument.signalCursorMoved,m);h.unsubscribe(ops.OdtDocument.signalCursorRemoved,n);p.unsubscribe("focus",a);p.uns [...]
- d);l.removeEventListener("focus",k,!1);l.removeEventListener("blur",g,!1);(function u(a,b){b?c(b):a<r.length?r[a].destroy(function(b){u(a+1,b)}):c()})(0,void 0);q={}};(function(){var c=e.getSession().getOdtDocument(),f=e.getEventManager();c.subscribe(ops.OdtDocument.signalParagraphChanged,b);c.subscribe(ops.OdtDocument.signalCursorMoved,m);c.subscribe(ops.OdtDocument.signalCursorRemoved,n);f.subscribe("focus",a);f.subscribe("blur",d);l.addEventListener("focus",k,!1);l.addEventListener(" [...]
- // Input 87
++gui.CaretManager=function(h){function m(a){return g.hasOwnProperty(a)?g[a]:null}function e(){return Object.keys(g).map(function(a){return g[a]})}function p(a){a===h.getInputMemberId()&&h.getSession().getOdtDocument().getOdfCanvas().getElement().removeAttribute("tabindex");delete g[a]}function l(a){a=a.getMemberId();a===h.getInputMemberId()&&(a=m(a))&&a.refreshCursorBlinking()}function q(){var a=m(h.getInputMemberId());r=!1;a&&a.ensureVisible()}function a(){var a=m(h.getInputMemberId()); [...]
++r||(r=!0,runtime.setTimeout(q,50)))}function d(b){b.memberId===h.getInputMemberId()&&a()}function f(){var a=m(h.getInputMemberId());a&&a.setFocus()}function b(){var a=m(h.getInputMemberId());a&&a.removeFocus()}function k(){var a=m(h.getInputMemberId());a&&a.show()}function c(){var a=m(h.getInputMemberId());a&&a.hide()}var g={},n=runtime.getWindow(),r=!1;this.registerCursor=function(b,c,d){var e=b.getMemberId();c=new gui.Caret(b,c,d);g[e]=c;e===h.getInputMemberId()?(runtime.log("Starting [...]
++e),b.handleUpdate=a,h.getSession().getOdtDocument().getOdfCanvas().getElement().setAttribute("tabindex",-1),h.getEventManager().focus()):b.handleUpdate=c.handleUpdate;return c};this.getCaret=m;this.getCarets=e;this.destroy=function(a){var m=h.getSession().getOdtDocument(),q=h.getEventManager(),r=e();m.unsubscribe(ops.OdtDocument.signalParagraphChanged,d);m.unsubscribe(ops.OdtDocument.signalCursorMoved,l);m.unsubscribe(ops.OdtDocument.signalCursorRemoved,p);q.unsubscribe("focus",f);q.uns [...]
++b);n.removeEventListener("focus",k,!1);n.removeEventListener("blur",c,!1);(function t(b,c){c?a(c):b<r.length?r[b].destroy(function(a){t(b+1,a)}):a()})(0,void 0);g={}};(function(){var a=h.getSession().getOdtDocument(),e=h.getEventManager();a.subscribe(ops.OdtDocument.signalParagraphChanged,d);a.subscribe(ops.OdtDocument.signalCursorMoved,l);a.subscribe(ops.OdtDocument.signalCursorRemoved,p);e.subscribe("focus",f);e.subscribe("blur",b);n.addEventListener("focus",k,!1);n.addEventListener(" [...]
++// Input 90
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- gui.UndoManager=function(){};gui.UndoManager.prototype.subscribe=function(e,h){};gui.UndoManager.prototype.unsubscribe=function(e,h){};gui.UndoManager.prototype.setOdtDocument=function(e){};gui.UndoManager.prototype.saveInitialState=function(){};gui.UndoManager.prototype.resetInitialState=function(){};gui.UndoManager.prototype.setPlaybackFunction=function(e){};gui.UndoManager.prototype.hasUndoStates=function(){};gui.UndoManager.prototype.hasRedoStates=function(){};
- gui.UndoManager.prototype.moveForward=function(e){};gui.UndoManager.prototype.moveBackward=function(e){};gui.UndoManager.prototype.onOperationExecuted=function(e){};gui.UndoManager.signalUndoStackChanged="undoStackChanged";gui.UndoManager.signalUndoStateCreated="undoStateCreated";gui.UndoManager.signalUndoStateModified="undoStateModified";(function(){return gui.UndoManager})();
- // Input 88
++gui.UndoManager=function(){};gui.UndoManager.prototype.subscribe=function(h,m){};gui.UndoManager.prototype.unsubscribe=function(h,m){};gui.UndoManager.prototype.setOdtDocument=function(h){};gui.UndoManager.prototype.saveInitialState=function(){};gui.UndoManager.prototype.resetInitialState=function(){};gui.UndoManager.prototype.setPlaybackFunction=function(h){};gui.UndoManager.prototype.hasUndoStates=function(){};gui.UndoManager.prototype.hasRedoStates=function(){};
++gui.UndoManager.prototype.moveForward=function(h){};gui.UndoManager.prototype.moveBackward=function(h){};gui.UndoManager.prototype.onOperationExecuted=function(h){};gui.UndoManager.signalUndoStackChanged="undoStackChanged";gui.UndoManager.signalUndoStateCreated="undoStateCreated";gui.UndoManager.signalUndoStateModified="undoStateModified";(function(){return gui.UndoManager})();
++// Input 91
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- gui.UndoStateRules=function(){function e(e){return e.spec().optype}function h(f){switch(e(f)){case "MoveCursor":case "AddCursor":case "RemoveCursor":return!1;default:return!0}}this.getOpType=e;this.isEditOperation=h;this.isPartOfOperationSet=function(f,n){if(h(f)){if(0===n.length)return!0;var m;if(m=h(n[n.length-1]))a:{m=n.filter(h);var p=e(f),c;b:switch(p){case "RemoveText":case "InsertText":c=!0;break b;default:c=!1}if(c&&p===e(m[0])){if(1===m.length){m=!0;break a}p=m[m.length-2].spec [...]
- m=m[m.length-1].spec().position;c=f.spec().position;if(m===c-(m-p)){m=!0;break a}}m=!1}return m}return!0}};
- // Input 89
++gui.UndoStateRules=function(){function h(e){return e.spec().optype}function m(e){switch(h(e)){case "MoveCursor":case "AddCursor":case "RemoveCursor":return!1;default:return!0}}this.getOpType=h;this.isEditOperation=m;this.isPartOfOperationSet=function(e,p){if(m(e)){if(0===p.length)return!0;var l;if(l=m(p[p.length-1]))a:{l=p.filter(m);var q=h(e),a;b:switch(q){case "RemoveText":case "InsertText":a=!0;break b;default:a=!1}if(a&&q===h(l[0])){if(1===l.length){l=!0;break a}q=l[l.length-2].spec [...]
++l=l[l.length-1].spec().position;a=e.spec().position;if(l===a-(l-q)){l=!0;break a}}l=!1}return l}return!0}};
++// Input 92
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("core.DomUtils");runtime.loadClass("gui.UndoManager");runtime.loadClass("gui.UndoStateRules");
- gui.TrivialUndoManager=function(e){function h(){t.emit(gui.UndoManager.signalUndoStackChanged,{undoAvailable:c.hasUndoStates(),redoAvailable:c.hasRedoStates()})}function f(){q!==d&&q!==l[l.length-1]&&l.push(q)}function n(a){var c=a.previousSibling||a.nextSibling;a.parentNode.removeChild(a);b.normalizeTextNodes(c)}function m(a){return Object.keys(a).map(function(b){return a[b]})}function p(a){function b(a){var g=a.spec();if(e[g.memberid])switch(g.optype){case "AddCursor":c[g.memberid]||( [...]
- a,delete e[g.memberid],f-=1);break;case "MoveCursor":d[g.memberid]||(d[g.memberid]=a)}}var c={},d={},e={},f,h=a.pop();g.getCursors().forEach(function(a){e[a.getMemberId()]=!0});for(f=Object.keys(e).length;h&&0<f;)h.reverse(),h.forEach(b),h=a.pop();return m(c).concat(m(d))}var c=this,b=new core.DomUtils,a,d=[],k,g,q=[],l=[],r=[],t=new core.EventNotifier([gui.UndoManager.signalUndoStackChanged,gui.UndoManager.signalUndoStateCreated,gui.UndoManager.signalUndoStateModified,gui.TrivialUndoMa [...]
- w=e||new gui.UndoStateRules;this.subscribe=function(a,b){t.subscribe(a,b)};this.unsubscribe=function(a,b){t.unsubscribe(a,b)};this.hasUndoStates=function(){return 0<l.length};this.hasRedoStates=function(){return 0<r.length};this.setOdtDocument=function(a){g=a};this.resetInitialState=function(){l.length=0;r.length=0;d.length=0;q.length=0;a=null;h()};this.saveInitialState=function(){var c=g.getOdfCanvas().odfContainer(),e=g.getOdfCanvas().getAnnotationManager();e&&e.forgetAnnotations();a= [...]
- g.getOdfCanvas().refreshAnnotations();c=a;b.getElementsByTagNameNS(c,"urn:webodf:names:cursor","cursor").forEach(n);b.getElementsByTagNameNS(c,"urn:webodf:names:cursor","anchor").forEach(n);f();l.unshift(d);q=d=p(l);l.length=0;r.length=0;h()};this.setPlaybackFunction=function(a){k=a};this.onOperationExecuted=function(a){r.length=0;w.isEditOperation(a)&&q===d||!w.isPartOfOperationSet(a,q)?(f(),q=[a],l.push(q),t.emit(gui.UndoManager.signalUndoStateCreated,{operations:q}),h()):(q.push(a),t [...]
- {operations:q}))};this.moveForward=function(a){for(var b=0,c;a&&r.length;)c=r.pop(),l.push(c),c.forEach(k),a-=1,b+=1;b&&(q=l[l.length-1],h());return b};this.moveBackward=function(b){for(var c=g.getOdfCanvas(),e=c.odfContainer(),f=0;b&&l.length;)r.push(l.pop()),b-=1,f+=1;f&&(e.setRootElement(a.cloneNode(!0)),c.setOdfContainer(e,!0),t.emit(gui.TrivialUndoManager.signalDocumentRootReplaced,{}),g.getCursors().forEach(function(a){g.removeCursor(a.getMemberId())}),d.forEach(k),l.forEach(funct [...]
- c.refreshCSS(),q=l[l.length-1]||d,h());return f}};gui.TrivialUndoManager.signalDocumentRootReplaced="documentRootReplaced";(function(){return gui.TrivialUndoManager})();
- // Input 90
++gui.TrivialUndoManager=function(h){function m(){u.emit(gui.UndoManager.signalUndoStackChanged,{undoAvailable:a.hasUndoStates(),redoAvailable:a.hasRedoStates()})}function e(){g!==b&&g!==n[n.length-1]&&n.push(g)}function p(a){var b=a.previousSibling||a.nextSibling;a.parentNode.removeChild(a);d.normalizeTextNodes(b)}function l(a){return Object.keys(a).map(function(b){return a[b]})}function q(a){function b(a){var c=a.spec();if(f[c.memberid])switch(c.optype){case "AddCursor":d[c.memberid]||( [...]
++a,delete f[c.memberid],g-=1);break;case "MoveCursor":e[c.memberid]||(e[c.memberid]=a)}}var d={},e={},f={},g,h=a.pop();c.getCursors().forEach(function(a){f[a.getMemberId()]=!0});for(g=Object.keys(f).length;h&&0<g;)h.reverse(),h.forEach(b),h=a.pop();return l(d).concat(l(e))}var a=this,d=new core.DomUtils,f,b=[],k,c,g=[],n=[],r=[],u=new core.EventNotifier([gui.UndoManager.signalUndoStackChanged,gui.UndoManager.signalUndoStateCreated,gui.UndoManager.signalUndoStateModified,gui.TrivialUndoMa [...]
++y=h||new gui.UndoStateRules;this.subscribe=function(a,b){u.subscribe(a,b)};this.unsubscribe=function(a,b){u.unsubscribe(a,b)};this.hasUndoStates=function(){return 0<n.length};this.hasRedoStates=function(){return 0<r.length};this.setOdtDocument=function(a){c=a};this.resetInitialState=function(){n.length=0;r.length=0;b.length=0;g.length=0;f=null;m()};this.saveInitialState=function(){var a=c.getOdfCanvas().odfContainer(),h=c.getOdfCanvas().getAnnotationManager();h&&h.forgetAnnotations();f= [...]
++c.getOdfCanvas().refreshAnnotations();a=f;d.getElementsByTagNameNS(a,"urn:webodf:names:cursor","cursor").forEach(p);d.getElementsByTagNameNS(a,"urn:webodf:names:cursor","anchor").forEach(p);e();n.unshift(b);g=b=q(n);n.length=0;r.length=0;m()};this.setPlaybackFunction=function(a){k=a};this.onOperationExecuted=function(a){r.length=0;y.isEditOperation(a)&&g===b||!y.isPartOfOperationSet(a,g)?(e(),g=[a],n.push(g),u.emit(gui.UndoManager.signalUndoStateCreated,{operations:g}),m()):(g.push(a),u [...]
++{operations:g}))};this.moveForward=function(a){for(var b=0,c;a&&r.length;)c=r.pop(),n.push(c),c.forEach(k),a-=1,b+=1;b&&(g=n[n.length-1],m());return b};this.moveBackward=function(a){for(var d=c.getOdfCanvas(),e=d.odfContainer(),h=0;a&&n.length;)r.push(n.pop()),a-=1,h+=1;h&&(e.setRootElement(f.cloneNode(!0)),d.setOdfContainer(e,!0),u.emit(gui.TrivialUndoManager.signalDocumentRootReplaced,{}),c.getCursors().forEach(function(a){c.removeCursor(a.getMemberId())}),b.forEach(k),n.forEach(funct [...]
++d.refreshCSS(),g=n[n.length-1]||b,m());return h}};gui.TrivialUndoManager.signalDocumentRootReplaced="documentRootReplaced";(function(){return gui.TrivialUndoManager})();
++// Input 93
 +runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfUtils");runtime.loadClass("odf.OdfNodeFilter");runtime.loadClass("gui.SelectionMover");
- gui.SelectionView=function(e){function h(a){if(A&&a.nodeType===Node.ELEMENT_NODE)return a.getBoundingClientRect();C.selectNode(a);return C.getBoundingClientRect()}function f(a,b){a.style.left=b.left+"px";a.style.top=b.top+"px";a.style.width=b.width+"px";a.style.height=b.height+"px"}function n(a){s=a;w.style.display=v.style.display=y.style.display=!0===a?"block":"none"}function m(a){var b=h(r),c=l.getOdfCanvas().getZoomLevel(),d={};d.top=u.adaptRangeDifferenceToZoomLevel(a.top-b.top,c);d [...]
- b.left,c);d.bottom=u.adaptRangeDifferenceToZoomLevel(a.bottom-b.top,c);d.right=u.adaptRangeDifferenceToZoomLevel(a.right-b.left,c);d.width=u.adaptRangeDifferenceToZoomLevel(a.width,c);d.height=u.adaptRangeDifferenceToZoomLevel(a.height,c);return d}function p(a){a=a.getBoundingClientRect();return Boolean(a&&0!==a.height)}function c(a){var b=x.getTextElements(a,!0,!1),c=a.cloneRange(),d=a.cloneRange();a=a.cloneRange();if(!b.length)return null;var e;a:{e=0;var f=b[e],g=c.startContainer===f [...]
- 0,h=g;c.setStart(f,g);for(c.setEnd(f,h);!p(c);){if(f.nodeType===Node.ELEMENT_NODE&&h<f.childNodes.length)h=f.childNodes.length;else if(f.nodeType===Node.TEXT_NODE&&h<f.length)h+=1;else if(b[e])f=b[e],e+=1,g=h=0;else{e=!1;break a}c.setStart(f,g);c.setEnd(f,h)}e=!0}if(!e)return null;a:{e=b.length-1;f=b[e];h=g=d.endContainer===f?d.endOffset:f.length||f.childNodes.length;d.setStart(f,g);for(d.setEnd(f,h);!p(d);){if(f.nodeType===Node.ELEMENT_NODE&&0<g)g=0;else if(f.nodeType===Node.TEXT_NODE& [...]
- else if(b[e])f=b[e],e-=1,g=h=f.length||f.childNodes.length;else{b=!1;break a}d.setStart(f,g);d.setEnd(f,h)}b=!0}if(!b)return null;a.setStart(c.startContainer,c.startOffset);a.setEnd(d.endContainer,d.endOffset);return{firstRange:c,lastRange:d,fillerRange:a}}function b(a,b){var c={};c.top=Math.min(a.top,b.top);c.left=Math.min(a.left,b.left);c.right=Math.max(a.right,b.right);c.bottom=Math.max(a.bottom,b.bottom);c.width=c.right-c.left;c.height=c.bottom-c.top;return c}function a(a,c){c&&0<c. [...]
- (a=a?b(a,c):c);return a}function d(b){function c(a){B.setUnfilteredPosition(a,0);return w.acceptNode(a)===I&&u.acceptPosition(B)===I?I:z}function d(a){var b=null;c(a)===I&&(b=h(a));return b}var e=b.commonAncestorContainer,f=b.startContainer,g=b.endContainer,k=b.startOffset,m=b.endOffset,n,p,q=null,r,s=t.createRange(),u,w=new odf.OdfNodeFilter,v;if(f===e||g===e)return s=b.cloneRange(),q=s.getBoundingClientRect(),s.detach(),q;for(b=f;b.parentNode!==e;)b=b.parentNode;for(p=g;p.parentNode!= [...]
- u=l.createRootFilter(f);for(e=b.nextSibling;e&&e!==p;)r=d(e),q=a(q,r),e=e.nextSibling;if(x.isParagraph(b))q=a(q,h(b));else for(v=t.createTreeWalker(b,NodeFilter.SHOW_TEXT,c),e=v.currentNode=f;e&&e!==g;)s.setStart(e,k),s.setEnd(e,e.length),r=s.getBoundingClientRect(),q=a(q,r),n=e,k=0,e=v.nextNode();n||(n=f);if(x.isParagraph(p))q=a(q,h(b));else for(v=t.createTreeWalker(p,NodeFilter.SHOW_TEXT,c),e=v.currentNode=g;e&&e!==n;)if(s.setStart(e,0),s.setEnd(e,m),r=s.getBoundingClientRect(),q=a(q, [...]
- e.length;return q}function k(a,b){var c=a.getBoundingClientRect(),d={width:0};d.top=c.top;d.bottom=c.bottom;d.height=c.height;d.left=d.right=b?c.right:c.left;return d}function g(){if(e.getSelectionType()===ops.OdtCursor.RangeSelection){n(!0);var a=e.getSelectedRange(),g=c(a),h,l,p,t;a.collapsed||!g?n(!1):(n(!0),a=g.firstRange,h=g.lastRange,g=g.fillerRange,l=m(k(a,!1)),t=m(k(h,!0)),p=(p=d(g))?m(p):b(l,t),f(w,{left:l.left,top:l.top,width:Math.max(0,p.width-(l.left-p.left)),height:l.height [...]
- l.top||t.bottom===l.bottom?v.style.display=y.style.display="none":(f(y,{left:p.left,top:t.top,width:Math.max(0,t.right-p.left),height:t.height}),f(v,{left:p.left,top:l.top+l.height,width:Math.max(0,parseFloat(w.style.left)+parseFloat(w.style.width)-parseFloat(y.style.left)),height:Math.max(0,t.top-l.bottom)})),a.detach(),h.detach(),g.detach())}else n(!1)}function q(a){a===e&&g()}var l=e.getOdtDocument(),r=l.getRootNode().parentNode.parentNode,t=l.getDOM(),w=t.createElement("div"),v=t.cr [...]
- y=t.createElement("div"),x=new odf.OdfUtils,u=new core.DomUtils,s=!0,C=t.createRange(),B=gui.SelectionMover.createPositionIterator(l.getRootNode()),A=u.areRangeRectanglesTransformed(t),I=NodeFilter.FILTER_ACCEPT,z=NodeFilter.FILTER_REJECT;this.show=this.rerender=g;this.hide=function(){n(!1)};this.visible=function(){return s};this.destroy=function(a){r.removeChild(w);r.removeChild(v);r.removeChild(y);e.getOdtDocument().unsubscribe(ops.OdtDocument.signalCursorMoved,q);a()};(function(){var [...]
- r.appendChild(w);r.appendChild(v);r.appendChild(y);w.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);v.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);y.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);w.className=v.className=y.className="selectionOverlay";e.getOdtDocument().subscribe(ops.OdtDocument.signalCursorMoved,q)})()};
- // Input 91
++gui.SelectionView=function(h){function m(a){if(C&&a.nodeType===Node.ELEMENT_NODE)return a.getBoundingClientRect();D.selectNode(a);return D.getBoundingClientRect()}function e(a,b){a.style.left=b.left+"px";a.style.top=b.top+"px";a.style.width=b.width+"px";a.style.height=b.height+"px"}function p(a){s=a;y.style.display=x.style.display=w.style.display=!0===a?"block":"none"}function l(a){var b=m(r),c=n.getOdfCanvas().getZoomLevel(),d={};d.top=t.adaptRangeDifferenceToZoomLevel(a.top-b.top,c);d [...]
++b.left,c);d.bottom=t.adaptRangeDifferenceToZoomLevel(a.bottom-b.top,c);d.right=t.adaptRangeDifferenceToZoomLevel(a.right-b.left,c);d.width=t.adaptRangeDifferenceToZoomLevel(a.width,c);d.height=t.adaptRangeDifferenceToZoomLevel(a.height,c);return d}function q(a){a=a.getBoundingClientRect();return Boolean(a&&0!==a.height)}function a(a){var b=v.getTextElements(a,!0,!1),c=a.cloneRange(),d=a.cloneRange();a=a.cloneRange();if(!b.length)return null;var e;a:{e=0;var f=b[e],g=c.startContainer===f [...]
++0,h=g;c.setStart(f,g);for(c.setEnd(f,h);!q(c);){if(f.nodeType===Node.ELEMENT_NODE&&h<f.childNodes.length)h=f.childNodes.length;else if(f.nodeType===Node.TEXT_NODE&&h<f.length)h+=1;else if(b[e])f=b[e],e+=1,g=h=0;else{e=!1;break a}c.setStart(f,g);c.setEnd(f,h)}e=!0}if(!e)return null;a:{e=b.length-1;f=b[e];h=g=d.endContainer===f?d.endOffset:f.length||f.childNodes.length;d.setStart(f,g);for(d.setEnd(f,h);!q(d);){if(f.nodeType===Node.ELEMENT_NODE&&0<g)g=0;else if(f.nodeType===Node.TEXT_NODE& [...]
++else if(b[e])f=b[e],e-=1,g=h=f.length||f.childNodes.length;else{b=!1;break a}d.setStart(f,g);d.setEnd(f,h)}b=!0}if(!b)return null;a.setStart(c.startContainer,c.startOffset);a.setEnd(d.endContainer,d.endOffset);return{firstRange:c,lastRange:d,fillerRange:a}}function d(a,b){var c={};c.top=Math.min(a.top,b.top);c.left=Math.min(a.left,b.left);c.right=Math.max(a.right,b.right);c.bottom=Math.max(a.bottom,b.bottom);c.width=c.right-c.left;c.height=c.bottom-c.top;return c}function f(a,b){b&&0<b. [...]
++(a=a?d(a,b):b);return a}function b(a){function b(a){A.setUnfilteredPosition(a,0);return x.acceptNode(a)===I&&t.acceptPosition(A)===I?I:z}function c(a){var d=null;b(a)===I&&(d=m(a));return d}var d=a.commonAncestorContainer,e=a.startContainer,g=a.endContainer,h=a.startOffset,k=a.endOffset,l,p,q=null,r,s=u.createRange(),t,x=new odf.OdfNodeFilter,w;if(e===d||g===d)return s=a.cloneRange(),q=s.getBoundingClientRect(),s.detach(),q;for(a=e;a.parentNode!==d;)a=a.parentNode;for(p=g;p.parentNode!= [...]
++t=n.createRootFilter(e);for(d=a.nextSibling;d&&d!==p;)r=c(d),q=f(q,r),d=d.nextSibling;if(v.isParagraph(a))q=f(q,m(a));else for(w=u.createTreeWalker(a,NodeFilter.SHOW_TEXT,b),d=w.currentNode=e;d&&d!==g;)s.setStart(d,h),s.setEnd(d,d.length),r=s.getBoundingClientRect(),q=f(q,r),l=d,h=0,d=w.nextNode();l||(l=e);if(v.isParagraph(p))q=f(q,m(a));else for(w=u.createTreeWalker(p,NodeFilter.SHOW_TEXT,b),d=w.currentNode=g;d&&d!==l;)if(s.setStart(d,0),s.setEnd(d,k),r=s.getBoundingClientRect(),q=f(q, [...]
++d.length;return q}function k(a,b){var c=a.getBoundingClientRect(),d={width:0};d.top=c.top;d.bottom=c.bottom;d.height=c.height;d.left=d.right=b?c.right:c.left;return d}function c(){if(h.getSelectionType()===ops.OdtCursor.RangeSelection){p(!0);var c=h.getSelectedRange(),f=a(c),g,m,n,q;c.collapsed||!f?p(!1):(p(!0),c=f.firstRange,g=f.lastRange,f=f.fillerRange,m=l(k(c,!1)),q=l(k(g,!0)),n=(n=b(f))?l(n):d(m,q),e(y,{left:m.left,top:m.top,width:Math.max(0,n.width-(m.left-n.left)),height:m.height [...]
++m.top||q.bottom===m.bottom?x.style.display=w.style.display="none":(e(w,{left:n.left,top:q.top,width:Math.max(0,q.right-n.left),height:q.height}),e(x,{left:n.left,top:m.top+m.height,width:Math.max(0,parseFloat(y.style.left)+parseFloat(y.style.width)-parseFloat(w.style.left)),height:Math.max(0,q.top-m.bottom)})),c.detach(),g.detach(),f.detach())}else p(!1)}function g(a){a===h&&c()}var n=h.getOdtDocument(),r=n.getRootNode().parentNode.parentNode,u=n.getDOM(),y=u.createElement("div"),x=u.cr [...]
++w=u.createElement("div"),v=new odf.OdfUtils,t=new core.DomUtils,s=!0,D=u.createRange(),A=gui.SelectionMover.createPositionIterator(n.getRootNode()),C=t.areRangeRectanglesTransformed(u),I=NodeFilter.FILTER_ACCEPT,z=NodeFilter.FILTER_REJECT;this.show=this.rerender=c;this.hide=function(){p(!1)};this.visible=function(){return s};this.destroy=function(a){r.removeChild(y);r.removeChild(x);r.removeChild(w);h.getOdtDocument().unsubscribe(ops.OdtDocument.signalCursorMoved,g);a()};(function(){var [...]
++r.appendChild(y);r.appendChild(x);r.appendChild(w);y.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);x.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);w.setAttributeNS("urn:webodf:names:editinfo","editinfo:memberid",a);y.className=x.className=w.className="selectionOverlay";h.getOdtDocument().subscribe(ops.OdtDocument.signalCursorMoved,g)})()};
++// Input 94
 +/*
 +
 + Copyright (C) 2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("gui.SelectionView");
- gui.SelectionViewManager=function(){function e(){return Object.keys(h).map(function(e){return h[e]})}var h={};this.getSelectionView=function(e){return h.hasOwnProperty(e)?h[e]:null};this.getSelectionViews=e;this.removeSelectionView=function(e){h.hasOwnProperty(e)&&(h[e].destroy(function(){}),delete h[e])};this.hideSelectionView=function(e){h.hasOwnProperty(e)&&h[e].hide()};this.showSelectionView=function(e){h.hasOwnProperty(e)&&h[e].show()};this.rerenderSelectionViews=function(){Object. [...]
- h[e].rerender()})};this.registerCursor=function(e,n){var m=e.getMemberId(),p=new gui.SelectionView(e);n?p.show():p.hide();return h[m]=p};this.destroy=function(f){var h=e();(function p(c,b){b?f(b):c<h.length?h[c].destroy(function(a){p(c+1,a)}):f()})(0,void 0)}};
- // Input 92
++gui.SelectionViewManager=function(){function h(){return Object.keys(m).map(function(e){return m[e]})}var m={};this.getSelectionView=function(e){return m.hasOwnProperty(e)?m[e]:null};this.getSelectionViews=h;this.removeSelectionView=function(e){m.hasOwnProperty(e)&&(m[e].destroy(function(){}),delete m[e])};this.hideSelectionView=function(e){m.hasOwnProperty(e)&&m[e].hide()};this.showSelectionView=function(e){m.hasOwnProperty(e)&&m[e].show()};this.rerenderSelectionViews=function(){Object. [...]
++m[e].rerender()})};this.registerCursor=function(e,h){var l=e.getMemberId(),q=new gui.SelectionView(e);h?q.show():q.hide();return m[l]=q};this.destroy=function(e){var m=h();(function q(a,d){d?e(d):a<m.length?m[a].destroy(function(d){q(a+1,d)}):e()})(0,void 0)}};
++// Input 95
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
- runtime.loadClass("core.EventNotifier");runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfUtils");runtime.loadClass("odf.Namespaces");runtime.loadClass("gui.SelectionMover");runtime.loadClass("core.PositionFilterChain");
- ops.OdtDocument=function(e){function h(){var a=e.odfContainer().getContentElement(),b=a&&a.localName;runtime.assert("text"===b,"Unsupported content element type '"+b+"'for OdtDocument");return a}function f(a){function b(a){for(;a&&!(a.namespaceURI===odf.Namespaces.officens&&"text"===a.localName||a.namespaceURI===odf.Namespaces.officens&&"annotation"===a.localName);)a=a.parentNode;return a}this.acceptPosition=function(c){c=c.container();var d;d="string"===typeof a?k[a].getNode():a;return [...]
- q:l}}function n(a){var b=gui.SelectionMover.createPositionIterator(h());for(a+=1;0<a&&b.nextPosition();)r.acceptPosition(b)===q&&(a-=1);return b}function m(b){return a.getParagraphElement(b)}function p(a,b){return e.getFormatting().getStyleElement(a,b)}function c(a){return p(a,"paragraph")}var b=this,a,d,k={},g=new core.EventNotifier([ops.OdtDocument.signalCursorAdded,ops.OdtDocument.signalCursorRemoved,ops.OdtDocument.signalCursorMoved,ops.OdtDocument.signalParagraphChanged,ops.OdtDocu [...]
- ops.OdtDocument.signalCommonStyleCreated,ops.OdtDocument.signalCommonStyleDeleted,ops.OdtDocument.signalTableAdded,ops.OdtDocument.signalOperationExecuted,ops.OdtDocument.signalUndoStackChanged]),q=core.PositionFilter.FilterResult.FILTER_ACCEPT,l=core.PositionFilter.FilterResult.FILTER_REJECT,r;this.getIteratorAtPosition=n;this.getStyleElement=p;this.upgradeWhitespacesAtPosition=function(b){b=n(b);var c,d,e;b.previousPosition();b.previousPosition();for(e=-1;1>=e;e+=1){c=b.container();d= [...]
- if(c.nodeType===Node.TEXT_NODE&&" "===c.data[d]&&a.isSignificantWhitespace(c,d)){runtime.assert(" "===c.data[d],"upgradeWhitespaceToElement: textNode.data[offset] should be a literal space");var f=c.ownerDocument.createElementNS(odf.Namespaces.textns,"text:s");f.appendChild(c.ownerDocument.createTextNode(" "));c.deleteData(d,1);0<d&&(c=c.splitText(d));c.parentNode.insertBefore(f,c);c=f;b.moveToEndOfNode(c)}b.nextPosition()}};this.downgradeWhitespacesAtPosition=function(b){var c=n(b),e;b [...]
- for(c=c.unfilteredDomOffset();!a.isCharacterElement(b)&&b.childNodes[c];)b=b.childNodes[c],c=0;b.nodeType===Node.TEXT_NODE&&(b=b.parentNode);a.isDowngradableSpaceElement(b)&&(c=b.firstChild,e=b.lastChild,d.mergeIntoParent(b),e!==c&&d.normalizeTextNodes(e),d.normalizeTextNodes(c))};this.getParagraphStyleElement=c;this.getParagraphElement=m;this.getParagraphStyleAttributes=function(a){return(a=c(a))?e.getFormatting().getInheritedStyleAttributes(a):null};this.getPositionInTextNode=function [...]
- gui.SelectionMover.createPositionIterator(h()),e=null,f,g=0,l=null,l=a;runtime.assert(0<=a,"position must be >= 0");r.acceptPosition(d)===q?(f=d.container(),f.nodeType===Node.TEXT_NODE&&(e=f,g=0)):a+=1;for(;0<a||null===e;){if(!d.nextPosition())return null;if(r.acceptPosition(d)===q)if(a-=1,f=d.container(),f.nodeType===Node.TEXT_NODE)f!==e?(e=f,g=d.unfilteredDomOffset()):g+=1;else if(null!==e){if(0===a){g=e.length;break}e=null}else if(0===a){e=h().ownerDocument.createTextNode("");f.inser [...]
- d.rightNode());g=0;break}}if(null===e)return null;if(c&&k[c]&&b.getCursorPosition(c)===l){for(l=k[c].getNode();0===g&&l.nextSibling&&"cursor"===l.nextSibling.localName;)l.parentNode.insertBefore(l,l.nextSibling.nextSibling);0<e.length&&(e=h().ownerDocument.createTextNode(""),g=0,l.parentNode.insertBefore(e,l.nextSibling));for(;0===g&&e.previousSibling&&"cursor"===e.previousSibling.localName&&(f=e.previousSibling,0<e.length&&(e=h().ownerDocument.createTextNode("")),f.parentNode.insertBef [...]
- f););}for(;e.previousSibling&&e.previousSibling.nodeType===Node.TEXT_NODE;)e.previousSibling.appendData(e.data),g=e.previousSibling.length,e=e.previousSibling,e.parentNode.removeChild(e.nextSibling);return{textNode:e,offset:g}};this.fixCursorPositions=function(){var a=new core.PositionFilterChain;a.addFilter("BaseFilter",r);Object.keys(k).forEach(function(c){var d=k[c],e=d.getStepCounter(),f,g,h=!1;a.addFilter("RootFilter",b.createRootFilter(c));c=e.countStepsToPosition(d.getAnchorNode( [...]
- 0===c&&(h=!0,d.move(0)):(h=!0,f=e.countPositionsToNearestStep(d.getNode(),0,a),g=e.countPositionsToNearestStep(d.getAnchorNode(),0,a),d.move(f),0!==c&&(0<g&&(c+=1),0<f&&(c-=1),e=e.countSteps(c,a),d.move(e),d.move(-e,!0)));h&&b.emit(ops.OdtDocument.signalCursorMoved,d);a.removeFilter("RootFilter")})};this.getWalkableParagraphLength=function(a){var b=n(0),c=0;b.setUnfilteredPosition(a,0);do{if(m(b.container())!==a)break;r.acceptPosition(b)===q&&(c+=1)}while(b.nextPosition());return c};thi [...]
- function(a,b,c){a=k[a];var d=0;runtime.assert(null!==b&&void 0!==b,"OdtDocument.getDistanceFromCursor called without node");a&&(a=a.getStepCounter().countStepsToPosition,d=a(b,c,r));return d};this.getCursorPosition=function(a){return-b.getDistanceFromCursor(a,h(),0)};this.getCursorSelection=function(a){var b;a=k[a];var c=0;b=0;a&&(b=a.getStepCounter().countStepsToPosition,c=-b(h(),0,r),b=b(a.getAnchorNode(),0,r));return{position:c+b,length:-b}};this.getPositionFilter=function(){return r [...]
- function(){return e};this.getRootNode=h;this.getDOM=function(){return h().ownerDocument};this.getCursor=function(a){return k[a]};this.getCursors=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(k[b]);return a};this.addCursor=function(a){runtime.assert(Boolean(a),"OdtDocument::addCursor without cursor");var b=a.getStepCounter().countSteps(1,r),c=a.getMemberId();runtime.assert("string"===typeof c,"OdtDocument::addCursor has cursor without memberid");runtime.assert(!k[c],"OdtDo [...]
- c);a.move(b);k[c]=a};this.removeCursor=function(a){var c=k[a];return c?(c.removeFromOdtDocument(),delete k[a],b.emit(ops.OdtDocument.signalCursorRemoved,a),!0):!1};this.getMetaData=function(a){for(var b=e.odfContainer().rootElement.firstChild;b&&"meta"!==b.localName;)b=b.nextSibling;for(b=b&&b.firstChild;b&&b.localName!==a;)b=b.nextSibling;for(b=b&&b.firstChild;b&&b.nodeType!==Node.TEXT_NODE;)b=b.nextSibling;return b?b.data:null};this.getFormatting=function(){return e.getFormatting()};t [...]
- b){g.emit(a,b)};this.subscribe=function(a,b){g.subscribe(a,b)};this.unsubscribe=function(a,b){g.unsubscribe(a,b)};this.createRootFilter=function(a){return new f(a)};this.close=function(a){a()};this.destroy=function(a){a()};r=new function(){function b(c,d,e){var f,g;if(d&&(f=a.lookLeftForCharacter(d),1===f||2===f&&(a.scanRightForAnyCharacter(e)||a.scanRightForAnyCharacter(a.nextNode(c)))))return q;f=null===d&&a.isParagraph(c);g=a.lookRightForCharacter(e);if(f)return g?q:a.scanRightForAny [...]
- l:q;if(!g)return l;d=d||a.previousNode(c);return a.scanLeftForAnyCharacter(d)?l:q}this.acceptPosition=function(c){var d=c.container(),e=d.nodeType,f,g,k;if(e!==Node.ELEMENT_NODE&&e!==Node.TEXT_NODE)return l;if(e===Node.TEXT_NODE){if(!a.isGroupingElement(d.parentNode)||a.isWithinTrackedChanges(d.parentNode,h()))return l;e=c.unfilteredDomOffset();f=d.data;runtime.assert(e!==f.length,"Unexpected offset.");if(0<e){c=f.substr(e-1,1);if(!a.isODFWhitespace(c))return q;if(1<e)if(c=f.substr(e-2, [...]
- q;else{if(!a.isODFWhitespace(f.substr(0,e)))return l}else k=a.previousNode(d),a.scanLeftForNonWhitespace(k)&&(g=q);if(g===q)return a.isTrailingWhitespace(d,e)?l:q;g=f.substr(e,1);return a.isODFWhitespace(g)?l:a.scanLeftForAnyCharacter(a.previousNode(d))?l:q}k=c.leftNode();g=d;d=d.parentNode;g=b(d,k,g)}else!a.isGroupingElement(d)||a.isWithinTrackedChanges(d,h())?g=l:(k=c.leftNode(),g=c.rightNode(),g=b(d,k,g));return g}};a=new odf.OdfUtils;d=new core.DomUtils};ops.OdtDocument.signalCursor [...]
++runtime.loadClass("core.EventNotifier");runtime.loadClass("core.DomUtils");runtime.loadClass("odf.OdfUtils");runtime.loadClass("odf.Namespaces");runtime.loadClass("gui.SelectionMover");runtime.loadClass("core.PositionFilterChain");runtime.loadClass("ops.StepsTranslator");runtime.loadClass("ops.TextPositionFilter");
++ops.OdtDocument=function(h){function m(){var a=h.odfContainer().getContentElement(),b=a&&a.localName;runtime.assert("text"===b,"Unsupported content element type '"+b+"' for OdtDocument");return a}function e(){return m().ownerDocument}function p(a){for(;a&&!(a.namespaceURI===odf.Namespaces.officens&&"text"===a.localName||a.namespaceURI===odf.Namespaces.officens&&"annotation"===a.localName);)a=a.parentNode;return a}function l(a){this.acceptPosition=function(b){b=b.container();var d;d="str [...]
++c[a].getNode():a;return p(b)===p(d)?n:r}}function q(a){var b=gui.SelectionMover.createPositionIterator(m());a=y.convertStepsToDomPoint(a);b.setUnfilteredPosition(a.node,a.offset);return b}function a(a,b){return h.getFormatting().getStyleElement(a,b)}function d(b){return a(b,"paragraph")}var f=this,b,k,c={},g=new core.EventNotifier([ops.OdtDocument.signalCursorAdded,ops.OdtDocument.signalCursorRemoved,ops.OdtDocument.signalCursorMoved,ops.OdtDocument.signalParagraphChanged,ops.OdtDocumen [...]
++ops.OdtDocument.signalCommonStyleCreated,ops.OdtDocument.signalCommonStyleDeleted,ops.OdtDocument.signalTableAdded,ops.OdtDocument.signalOperationExecuted,ops.OdtDocument.signalUndoStackChanged,ops.OdtDocument.signalStepsInserted,ops.OdtDocument.signalStepsRemoved]),n=core.PositionFilter.FilterResult.FILTER_ACCEPT,r=core.PositionFilter.FilterResult.FILTER_REJECT,u,y;this.getDOM=e;this.getRootElement=p;this.getIteratorAtPosition=q;this.convertDomPointToCursorStep=function(a,b){return y.c [...]
++b)};this.convertDomToCursorRange=function(a,b,c,d){var e;e=y.convertDomPointToSteps(a,b);a=a===c&&b===d?e:y.convertDomPointToSteps(c,d);return{position:e,length:a-e}};this.convertCursorToDomRange=function(a,b){var c=e().createRange(),d,f;d=y.convertStepsToDomPoint(a);b?(f=y.convertStepsToDomPoint(a+b),0<b?(c.setStart(d.node,d.offset),c.setEnd(f.node,f.offset)):(c.setStart(f.node,f.offset),c.setEnd(d.node,d.offset))):c.setStart(d.node,d.offset);return c};this.getStyleElement=a;this.upgra [...]
++function(a){a=q(a);var c,d,e;a.previousPosition();a.previousPosition();for(e=-1;1>=e;e+=1){c=a.container();d=a.unfilteredDomOffset();if(c.nodeType===Node.TEXT_NODE&&" "===c.data[d]&&b.isSignificantWhitespace(c,d)){runtime.assert(" "===c.data[d],"upgradeWhitespaceToElement: textNode.data[offset] should be a literal space");var f=c.ownerDocument.createElementNS(odf.Namespaces.textns,"text:s");f.appendChild(c.ownerDocument.createTextNode(" "));c.deleteData(d,1);0<d&&(c=c.splitText(d));c.pa [...]
++c);c=f;a.moveToEndOfNode(c)}a.nextPosition()}};this.downgradeWhitespacesAtPosition=function(a){var c=q(a),d;a=c.container();for(c=c.unfilteredDomOffset();!b.isCharacterElement(a)&&a.childNodes[c];)a=a.childNodes[c],c=0;a.nodeType===Node.TEXT_NODE&&(a=a.parentNode);b.isDowngradableSpaceElement(a)&&(c=a.firstChild,d=a.lastChild,k.mergeIntoParent(a),d!==c&&k.normalizeTextNodes(d),k.normalizeTextNodes(c))};this.getParagraphStyleElement=d;this.getParagraphElement=function(a){return b.getPara [...]
++this.getParagraphStyleAttributes=function(a){return(a=d(a))?h.getFormatting().getInheritedStyleAttributes(a):null};this.getTextNodeAtStep=function(a,b){var d=q(a),g=d.container(),h,k=0,l=null;g.nodeType===Node.TEXT_NODE?(h=g,k=d.unfilteredDomOffset()):(h=e().createTextNode(""),k=0,g.insertBefore(h,d.rightNode()));if(b&&c[b]&&f.getCursorPosition(b)===a){for(l=c[b].getNode();l.nextSibling&&"cursor"===l.nextSibling.localName;)l.parentNode.insertBefore(l.nextSibling,l);0<h.length&&h.nextSib [...]
++(h=e().createTextNode(""),k=0);l.parentNode.insertBefore(h,l)}for(;h.previousSibling&&h.previousSibling.nodeType===Node.TEXT_NODE;)h.previousSibling.appendData(h.data),k=h.previousSibling.length,h=h.previousSibling,h.parentNode.removeChild(h.nextSibling);return{textNode:h,offset:k}};this.fixCursorPositions=function(){var a=new core.PositionFilterChain;a.addFilter("BaseFilter",u);Object.keys(c).forEach(function(b){var d=c[b],e=d.getStepCounter(),g,h,k=!1;a.addFilter("RootFilter",f.create [...]
++b=e.countStepsToPosition(d.getAnchorNode(),0,a);e.isPositionWalkable(a)?0===b&&(k=!0,d.move(0)):(k=!0,g=e.countPositionsToNearestStep(d.getNode(),0,a),h=e.countPositionsToNearestStep(d.getAnchorNode(),0,a),d.move(g),0!==b&&(0<h&&(b+=1),0<g&&(b-=1),e=e.countSteps(b,a),d.move(e),d.move(-e,!0)));k&&f.emit(ops.OdtDocument.signalCursorMoved,d);a.removeFilter("RootFilter")})};this.getDistanceFromCursor=function(a,b,d){a=c[a];var e,f;runtime.assert(null!==b&&void 0!==b,"OdtDocument.getDistance [...]
++a&&(e=y.convertDomPointToSteps(a.getNode(),0),f=y.convertDomPointToSteps(b,d));return f-e};this.getCursorPosition=function(a){return(a=c[a])?y.convertDomPointToSteps(a.getNode(),0):0};this.getCursorSelection=function(a){a=c[a];var b=0,d=0;a&&(b=y.convertDomPointToSteps(a.getNode(),0),d=y.convertDomPointToSteps(a.getAnchorNode(),0));return{position:d,length:b-d}};this.getPositionFilter=function(){return u};this.getOdfCanvas=function(){return h};this.getRootNode=m;this.getCursor=function( [...]
++this.getCursors=function(){var a=[],b;for(b in c)c.hasOwnProperty(b)&&a.push(c[b]);return a};this.addCursor=function(a){runtime.assert(Boolean(a),"OdtDocument::addCursor without cursor");var b=a.getStepCounter().countSteps(1,u),d=a.getMemberId();runtime.assert("string"===typeof d,"OdtDocument::addCursor has cursor without memberid");runtime.assert(!c[d],"OdtDocument::addCursor is adding a duplicate cursor with memberid "+d);a.move(b);c[d]=a};this.removeCursor=function(a){var b=c[a];retu [...]
++delete c[a],f.emit(ops.OdtDocument.signalCursorRemoved,a),!0):!1};this.getMetaData=function(a){for(var b=h.odfContainer().rootElement.firstChild;b&&"meta"!==b.localName;)b=b.nextSibling;for(b=b&&b.firstChild;b&&b.localName!==a;)b=b.nextSibling;for(b=b&&b.firstChild;b&&b.nodeType!==Node.TEXT_NODE;)b=b.nextSibling;return b?b.data:null};this.getFormatting=function(){return h.getFormatting()};this.emit=function(a,b){g.emit(a,b)};this.subscribe=function(a,b){g.subscribe(a,b)};this.unsubscrib [...]
++b){g.unsubscribe(a,b)};this.createRootFilter=function(a){return new l(a)};this.close=function(a){a()};this.destroy=function(a){a()};u=new ops.TextPositionFilter(m);b=new odf.OdfUtils;k=new core.DomUtils;y=new ops.StepsTranslator(m,gui.SelectionMover.createPositionIterator,u,500);g.subscribe(ops.OdtDocument.signalStepsInserted,y.handleStepsInserted);g.subscribe(ops.OdtDocument.signalStepsRemoved,y.handleStepsRemoved)};ops.OdtDocument.signalCursorAdded="cursor/added";
 +ops.OdtDocument.signalCursorRemoved="cursor/removed";ops.OdtDocument.signalCursorMoved="cursor/moved";ops.OdtDocument.signalParagraphChanged="paragraph/changed";ops.OdtDocument.signalTableAdded="table/added";ops.OdtDocument.signalCommonStyleCreated="style/created";ops.OdtDocument.signalCommonStyleDeleted="style/deleted";ops.OdtDocument.signalParagraphStyleModified="paragraphstyle/modified";ops.OdtDocument.signalOperationExecuted="operation/executed";ops.OdtDocument.signalUndoStackChange [...]
- (function(){return ops.OdtDocument})();
- // Input 93
++ops.OdtDocument.signalStepsInserted="steps/inserted";ops.OdtDocument.signalStepsRemoved="steps/removed";(function(){return ops.OdtDocument})();
++// Input 96
 +/*
 +
 + Copyright (C) 2012-2013 KO GmbH <copyright at kogmbh.com>
 +
 + @licstart
 + The JavaScript code in this page is free software: you can redistribute it
 + and/or modify it under the terms of the GNU Affero General Public License
 + (GNU AGPL) as published by the Free Software Foundation, either version 3 of
 + the License, or (at your option) any later version.  The code is distributed
 + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
 +
 + You should have received a copy of the GNU Affero General Public License
 + along with this code.  If not, see <http://www.gnu.org/licenses/>.
 +
 + As additional permission under GNU AGPL version 3 section 7, you
 + may distribute non-source (e.g., minimized or compacted) forms of
 + that code without the copy of the GNU GPL normally required by
 + section 4, provided you include this license notice and a URL
 + through which recipients can access the Corresponding Source.
 +
 + As a special exception to the AGPL, any HTML file which merely makes function
 + calls to this code, and for that purpose includes it by reference shall be
 + deemed a separate work for copyright law purposes. In addition, the copyright
 + holders of this code give you permission to combine this code with free
 + software libraries that are released under the GNU LGPL. You may copy and
 + distribute such a system following the terms of the GNU AGPL for this code
 + and the LGPL for the libraries. If you modify this code, you may extend this
 + exception to your version of the code, but you are not obligated to do so.
 + If you do not wish to do so, delete this exception statement from your
 + version.
 +
 + This license applies to this entire compilation.
 + @licend
 + @source: http://www.webodf.org/
 + @source: https://github.com/kogmbh/WebODF/
 +*/
 +runtime.loadClass("ops.TrivialMemberModel");runtime.loadClass("ops.TrivialOperationRouter");runtime.loadClass("ops.OperationFactory");runtime.loadClass("ops.OdtDocument");
- ops.Session=function(e){var h=new ops.OperationFactory,f=new ops.OdtDocument(e),n=new ops.TrivialMemberModel,m=null;this.setMemberModel=function(e){n=e};this.setOperationFactory=function(e){h=e;m&&m.setOperationFactory(h)};this.setOperationRouter=function(e){m=e;e.setPlaybackFunction(function(c){c.execute(f);f.emit(ops.OdtDocument.signalOperationExecuted,c)});e.setOperationFactory(h)};this.getMemberModel=function(){return n};this.getOperationFactory=function(){return h};this.getOdtDocum [...]
- this.enqueue=function(e){m.push(e)};this.close=function(e){m.close(function(c){c?e(c):n.close(function(b){b?e(b):f.close(e)})})};this.destroy=function(e){f.destroy(e)};this.setOperationRouter(new ops.TrivialOperationRouter)};
- // Input 94
++ops.Session=function(h){var m=new ops.OperationFactory,e=new ops.OdtDocument(h),p=new ops.TrivialMemberModel,l=null;this.setMemberModel=function(e){p=e};this.setOperationFactory=function(e){m=e;l&&l.setOperationFactory(m)};this.setOperationRouter=function(h){l=h;h.setPlaybackFunction(function(a){a.execute(e);e.emit(ops.OdtDocument.signalOperationExecuted,a)});h.setOperationFactory(m)};this.getMemberModel=function(){return p};this.getOperationFactory=function(){return m};this.getOdtDocum [...]
++this.enqueue=function(e){l.push(e)};this.close=function(h){l.close(function(a){a?h(a):p.close(function(a){a?h(a):e.close(h)})})};this.destroy=function(h){e.destroy(h)};this.setOperationRouter(new ops.TrivialOperationRouter)};
++// Input 97
 +var webodf_css="@namespace draw url(urn:oasis:names:tc:opendocument:xmlns:drawing:1.0);\n at namespace fo url(urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0);\n at namespace office url(urn:oasis:names:tc:opendocument:xmlns:office:1.0);\n at namespace presentation url(urn:oasis:names:tc:opendocument:xmlns:presentation:1.0);\n at namespace style url(urn:oasis:names:tc:opendocument:xmlns:style:1.0);\n at namespace svg url(urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0);\n at namespace [...]
diff --cc apps/documents/js/documents.js
index 923d75c,0000000..f9cab1c
mode 100644,000000..100644
--- a/apps/documents/js/documents.js
+++ b/apps/documents/js/documents.js
@@@ -1,427 -1,0 +1,441 @@@
 +/*globals $,OC,fileDownloadPath,t,document,odf,webodfEditor,alert,require,dojo,runtime */
 +var documentsMain = {
 +	_documents: [],
 +	_sessions: [],
 +	_members: [],
 +	isEditormode : false,
 +	useUnstable : false,
 +	isGuest : false,
 +	memberId : false,
 +	esId : false,
 +	ready :false,
 +	
 +	UI : {
 +		/* Overlay HTML */
 +		overlay : '<div id="documents-overlay"></div> <div id="documents-overlay-below"></div>',
 +				
 +		/* Toolbar HTML */
 +		toolbar : '<div id="odf-toolbar" class="dijitToolbar">' +
 +					'  <div id="document-title"><div>' +
 +					'%title%' +
 +			        '  </div></div>' +
 +					'  <button id="odf-close">' +
 +						t('documents', 'Close') +
 +					'  </button>' +
 +					'  <button id="odf-invite" class="drop">' +
 +						  t('documents', 'Share') +
 +					'  </button>' +
 +					'  <span id="toolbar" class="claro"></span>' +
 +					'</div>',
 +					
 +		/* Editor wrapper HTML */
 +		container : '<div id = "mainContainer" class="claro" style="">' +
 +					'  <div id = "editor">' +
 +					'    <div id = "container">' +
 +					'      <div id="canvas"></div>' +
 +					'    </div>' +
 +					'  </div>' +
 +					'  <div id = "collaboration">' +
 +					'    <div id = "collabContainer">' +
 +					'      <div id = "members">' +
 +					'        <div id = "inviteButton"></div>' +
 +					'        <div id = "memberList"></div>' +
 +					'      </div>' +
 +					'    </div>' +
 +					'  </div>' +
 +					'</div>',
 +					
 +		/* Previous window title */
 +		mainTitle : '',
 +				
 +		init : function(){
 +			$(documentsMain.UI.overlay).hide().appendTo(document.body);
 +			documentsMain.UI.mainTitle = $('title').text();
 +		},
 +		
 +		showOverlay : function(){
 +			$('#documents-overlay,#documents-overlay-below').fadeIn('fast');
 +		},
 +		
 +		hideOverlay : function(){
 +			$('#documents-overlay,#documents-overlay-below').fadeOut('fast');
 +		},
 +		
 +		showEditor : function(title, canShare){
 +			$(document.body).prepend(documentsMain.UI.toolbar.replace(/%title%/g, title));
 +			if (!canShare){
 +				$('#odf-invite').remove();
 +			} else {
 +				//TODO: fill in with users
 +			}
 +			$(document.body).addClass("claro");
 +			$(document.body).prepend(documentsMain.UI.container);
 +			// in case we are on the public sharing page we shall display the odf into the preview tag
 +			$('#preview').html(container);
 +			$('title').text(documentsMain.UI.mainTitle + '| ' + title);
 +		},
 +		
 +		hideEditor : function(){
 +				// Fade out toolbar
 +				$('#odf-toolbar').fadeOut('fast');
 +				// Fade out editor
 +				$('#mainContainer').fadeOut('fast', function() {
 +					$('#mainContainer').remove();
 +					$('#odf-toolbar').remove();
 +					$('#content').fadeIn('fast');
 +					$(document.body).removeClass('claro');
 +					$('title').text(documentsMain.UI.mainTitle);
 +				});
 +		},
 +		showProgress : function(){
 +			$('.documentslist .progress').show();
 +		},
 +		
 +		hideProgress : function(){
 +			$('.documentslist .progress').hide();
++		},
++		
++		showLostConnection : function(){
++			$('#memberList .memberListButton').css({opacity : 0.3});
++			$('#odf-toolbar').children(':not(#document-title)').hide();
++			$('<div id="connection-lost"></div>').prependTo('#memberList');
++			$('<div id="warning-connection-lost">' + t('documents', 'No connection to server. Trying to reconnect.') +'<img src="'+ OC.imagePath('core', 'loading-dark.gif') +'" alt="" /></div>').appendTo('#odf-toolbar');
++		},
++		
++		hideLostConnection : function() {
++			$('#connection-lost,#warning-connection-lost').remove();
++			$('#odf-toolbar').children(':not(#document-title)').show();
++			$('#memberList .memberListButton').css({opacity : 1});
 +		}
 +	},
 +	
 +	onStartup: function() {
 +		var fileId;
 +		"use strict";
 +		documentsMain.useUnstable = $('#webodf-unstable').val()==='true';
 +		documentsMain.UI.init();
 +		
 +		if (!OC.currentUser){
 +			documentsMain.isGuest = true;
 +			
 +		} else {
 +			// Does anything indicate that we need to autostart a session?
 +			fileId = parent.location.hash.replace(/\W*/g, '');
 +		}
 +		
 +		documentsMain.show();
 +		if (fileId){
 +			documentsMain.UI.showOverlay();
 +		}
 +		
 +		var webodfSource = (oc_debug !== true) ? 'webodf-debug' : 'webodf';
 +		OC.addScript('documents', '3rdparty/webodf/' + webodfSource).done(function() {
 +			// preload stuff in the background
 +			require({}, ["dojo/ready"], function(ready) {
 +				ready(function() {
 +					require({}, ["webodf/editor/Editor"], function(Editor) {
++						runtime.setTranslator(function(s){return t('documents', s);});
 +						documentsMain.ready = true;
 +						if (fileId){
 +							documentsMain.prepareSession();
 +							documentsMain.joinSession(fileId);
 +						}
 +					});
 +				});
 +			});
 +		});
 +	},
 +	
 +	prepareSession : function(){
 +		documentsMain.isEditorMode = true;
 +		documentsMain.UI.showOverlay();
 +		$(window).on('beforeunload', function(){
 +			return t('documents', "Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead."); 
 +		});
 +	},
 +	
 +	prepareGrid : function(){
 +		documentsMain.isEditorMode = false;
 +		documentsMain.UI.hideOverlay();
 +	},
 +	
 +	initSession: function(response) {
 +		"use strict";
 +
 +		if (!response || !response.es_id || !response.status || response.status==='error'){
 +			OC.Notification.show(t('documents', 'Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently.'));
 +			documentsMain.prepareGrid();
 +			documentsMain.show();
 +			setTimeout(OC.Notification.hide, 7000);
 +			return;
 +		}
 +		
 +		//Wait for 3 sec if editor is still loading 
 +		if (!documentsMain.ready){
 +			setTimeout(function(){ documentsMain.initSession(response); }, 3000);
 +			console.log('Waiting for the editor to start...');
 +			return;
 +		}
 +
 +		require({ }, ["webodf/editor/server/owncloud/ServerFactory", "webodf/editor/Editor"], function (ServerFactory, Editor) {
 +			// fade out file list and show WebODF canvas
 +			$('#content').fadeOut('fast').promise().done(function() {
 +				
 +				documentsMain.UI.showEditor(
 +						documentsMain.getNameByFileid(response.file_id),
 +						response.permissions & OC.PERMISSION_SHARE && !documentsMain.isGuest
 +				);
 +				var serverFactory = new ServerFactory();
 +				documentsMain.esId = response.es_id;
 +				documentsMain.memberId = response.member_id;
 +
 +				// TODO: set webodf translation system, by passing a proper function translate(!string):!string in "runtime.setTranslator(translate);"
 +
 +				documentsMain.webodfServerInstance = serverFactory.createServer();
 +				documentsMain.webodfServerInstance.setToken(oc_requesttoken);
 +				documentsMain.webodfEditorInstance = new Editor({unstableFeaturesEnabled: documentsMain.useUnstable}, documentsMain.webodfServerInstance, serverFactory);
- 
++				
 +				// load the document and get called back when it's live
 +				documentsMain.webodfEditorInstance.openSession(documentsMain.esId, documentsMain.memberId, function() {
 +					documentsMain.webodfEditorInstance.startEditing();
 +					documentsMain.UI.hideOverlay();
 +					parent.location.hash = response.file_id;
 +				});
 +			});
 +		});
 +	},
 +	
 +
 +	joinSession: function(fileId) {
 +		console.log('joining session '+fileId);
 +		var url;
 +		if (documentsMain.isGuest){
 +			url = OC.Router.generate('documents_session_joinasguest') + '/' + fileId;
 +		} else {
 +			url = OC.Router.generate('documents_session_joinasuser') + '/' + fileId;
 +		}
 +		$.post(
 +			url,
 +			{ name : $("[name='memberName']").val() },
 +			documentsMain.initSession
 +		);
 +	},
 +			
 +	onCreate: function(event){
 +		event.preventDefault();
 +		var docElem = $('.documentslist .template').clone();
 +		docElem.removeClass('template');
 +		docElem.addClass('document');
 +		docElem.insertAfter('.documentslist .template');
 +		docElem.show();
 +		$.post(
 +			OC.Router.generate('documents_documents_create'),
 +			{},
 +			documentsMain.show
 +		);
 +	},
 +
 +	onInvite: function(event) {
 +		event.preventDefault();
 +		if (OC.Share.droppedDown) {
 +			OC.Share.hideDropDown();
 +		} else {
 +			(function() {
 +				var target = OC.Share.showLink;
 +				OC.Share.showLink = function() {
 +					var r = target.apply( this, arguments );
 +					$('#linkText').val( $('#linkText').val().replace('service=files', 'service=documents') );
 +					return r;
 +				};
 +			})();
 +
 +			OC.Share.showDropDown(
 +				'file', 
 +				parent.location.hash.replace(/\W*/g, ''),
 +				$("#odf-toolbar"),
 +				true, 
 +				OC.PERMISSION_READ | OC.PERMISSION_SHARE | OC.PERMISSION_UPDATE
 +			);
 +		}
 +	},
 +	
 +	sendInvite: function() {
 +		var users = [];
 +		$('input[name=invitee\\[\\]]').each(function(i, e) {
 +			users.push($(e).val());
 +		});
 +		$.post(OC.Router.generate('documents_user_invite'), {users: users});
 +	},
 +	
 +	onClose: function() {
 +		"use strict";
 +		
 +		if (!documentsMain.isEditorMode){
 +			return;
 +		}
 +		documentsMain.isEditorMode = false;
 +		$(window).off('beforeunload');
 +		parent.location.hash = "";
 +
 +		documentsMain.webodfEditorInstance.endEditing();
- 		documentsMain.webodfEditorInstance.close(function() {
++		documentsMain.webodfEditorInstance.closeSession(function() {
 +			// successfull shutdown - all is good.
 +			// TODO: proper session leaving call to server, either by webodfServerInstance or custom
 +// 			documentsMain.webodfServerInstance.leaveSession(sessionId, memberId, function() {
 +			if (documentsMain.isGuest){
 +				$(document.body).attr('id', 'body-login');
 +				$('header,footer').show();
 +			}
 +			documentsMain.webodfEditorInstance.destroy(documentsMain.UI.hideEditor);
 +			
 +			if (documentsMain.isGuest){
 +				var url = OC.Router.generate('documents_user_disconnectGuest');
 +			} else {
 +				var url = OC.Router.generate('documents_user_disconnect');
 +			}
 +			
 +			$.post(url + '/' + documentsMain.memberId, {esId: documentsMain.esId});
 +			
 +			documentsMain.show();
 +// 			});
 +		});
 +	},
 +	
 +	getNameByFileid : function(fileid){
 +		return $('.documentslist li[data-id='+ fileid + ']').find('label').text();
 +	},
 +	
 +	show: function(){
 +		if (documentsMain.isGuest){
 +			return;
 +		}
 +		documentsMain.UI.showProgress();
 +		jQuery.when(documentsMain.loadDocuments())
 +			.then(function(){
 +				documentsMain.renderDocuments();
 +				documentsMain.UI.hideProgress();
 +			});
 +	},
 +	
 +	loadDocuments: function () {
 +		var self = this;
 +		var def = new $.Deferred();
 +		OC.Router.registerLoadedCallback(function () {
 +			jQuery.getJSON(OC.Router.generate('documents_documents_list'))
 +				.done(function (data) {
 +					self._documents = data.documents;
 +					self._sessions = data.sessions;
 +					self._members = data.members;
 +					def.resolve();
 +				})
 +				.fail(function(data){
 +					console.log(t('documents','Failed to load documents.'));
 +				});
 +		});
 +		return def;
 +	},
 +	
 +	renderDocuments: function () {
 +		var self = this,
 +		hasDocuments = false;
 +
 +		//remove all but template
 +		$('.documentslist .document:not(.template,.progress)').remove();
 +
 +		jQuery.each(this._documents, function(i,document){
 +			var docElem = $('.documentslist .template').clone();
 +			docElem.removeClass('template');
 +			docElem.addClass('document');
 +			docElem.attr('data-id', document.fileid);
 +
 +			var a = docElem.find('a');
 +			a.attr('href', OC.Router.generate('download',{file:document.path}));
 +			a.find('label').text(document.name);
 +			a.css('background-image', 'url("'+document.icon+'")');
 +
 +			$('.documentslist').append(docElem);
 +			docElem.show();
 +			hasDocuments = true;
 +		});
 +		jQuery.each(this._sessions, function(i,session){
 +			if (self._members[session.es_id].length > 0) {
 +				var docElem = $('.documentslist .document[data-id="'+session.file_id+'"]');
 +				if (docElem.length > 0) {
 +					docElem.attr('data-esid', session.es_id);
 +					docElem.find('label').after('<img class="svg session-active" src="'+OC.imagePath('core','places/contacts-dark')+'">');
 +					docElem.addClass('session');
 +				} else {
 +					console.log('Could not find file '+session.file_id+' for session '+session.es_id);
 +				}
 +			}
 +		});
 +		
 +		if (!hasDocuments){
 +			$('#documents-content').append('<div id="emptyfolder">'
 +				+ t('documents', 'No documents are found. Please upload or create a document!')
 +				+ '</div>'
 +			);
 +		} else {
 +			$('#emptyfolder').remove();
 +		}
 +	}
 +};
 +
 +
 +//web odf bootstrap code. Added here to reduce number of requests
 +/*globals navigator,dojoConfig */
 +var usedLocale = "C";
 +
 +if (navigator && navigator.language.match(/^(de)/)) {
 +	usedLocale = navigator.language.substr(0,2);
 +}
 +
 +dojoConfig = {
 +	locale: usedLocale,
 +	paths: {
 +		"webodf/editor": OC.appswebroots.documents + "/js/3rdparty/webodf/editor",
 +		"dijit": OC.appswebroots.documents + "/js/3rdparty/resources/dijit",
 +		"dojox": OC.appswebroots.documents + "/js/3rdparty/resources/dojox",
 +		"dojo": OC.appswebroots.documents + "/js/3rdparty/resources/dojo",
 +		"resources": OC.appswebroots.documents + "/js/3rdparty/resources"
 +	}
 +};
 +
 +//init
 +$(document).ready(function() {
 +	"use strict";
 +	
 +	$('.documentslist').on('click', 'li:not(.add-document)', function(event) {
 +		event.preventDefault();
 +
 +		if (documentsMain.isEditorMode){
 +			return;
 +		}
 +		
 +		documentsMain.prepareSession();
 +		if ($(this).attr('data-id')){
 +			documentsMain.joinSession($(this).attr('data-id'));
 +		}
 +	});
 +	
 +	$(document.body).on('click', '#odf-close', documentsMain.onClose);
 +	$(document.body).on('click', '#odf-invite', documentsMain.onInvite);
 +	$(document.body).on('click', '#odf-join', function(event){
 +		event.preventDefault();
 +
 +		// !Login page mess wih WebODF toolbars
 +		$(document.body).attr('id', 'body-user');
 +		$('header,footer').hide();
 +		documentsMain.prepareSession();
 +		documentsMain.joinSession(
 +				$("[name='document']").val()
 +		);
 +	});
 +	$('.add-document').on('click', '.add', documentsMain.onCreate);
 +
 +	var file_upload_start = $('#file_upload_start');
 +	file_upload_start.on('fileuploaddone', documentsMain.show);
 +	//TODO when ending a session as the last user close session?
 +	
 +	OC.addScript('documents', '3rdparty/webodf/dojo-amalgamation', documentsMain.onStartup);
 +});
diff --cc apps/documents/js/locale.js
index 0000000,0000000..998a4e1
new file mode 100644
--- /dev/null
+++ b/apps/documents/js/locale.js
@@@ -1,0 -1,0 +1,48 @@@
++t('documents', 'Align Left');
++t('documents', 'Alignment');
++t('documents', 'Align Right');
++t('documents', 'Annotate');
++t('documents', 'Background');
++t('documents', 'Bold');
++t('documents', 'Bottom');
++t('documents', 'Cancel');
++t('documents', 'Center');
++t('documents', 'Clone');
++t('documents', 'Clone this Style');
++t('documents', 'Close');
++t('documents', 'Color');
++t('documents', 'Create');
++t('documents', 'Decrease Indent');
++t('documents', 'Default Style');
++t('documents', 'Delete');
++t('documents', 'Family');
++t('documents', 'Font');
++t('documents', 'Font Effects');
++t('documents', 'Format');
++t('documents', 'Increase Indent');
++t('documents', 'Insert Image');
++t('documents', 'Invite Members');
++t('documents', 'Italic');
++t('documents', 'Justified');
++t('documents', 'Justify');
++t('documents', 'Left');
++t('documents', 'Loading');
++t('documents', 'Members');
++t('documents', 'New Name:');
++t('documents', 'OK');
++t('documents', 'Open');
++t('documents', 'Options');
++t('documents', 'Paragraph...');
++t('documents', 'Paragraph Styles');
++t('documents', 'Redo');
++t('documents', 'Right');
++t('documents', 'Save');
++t('documents', 'Size');
++t('documents', 'Spacing');
++t('documents', 'Strikethrough');
++t('documents', 'Style');
++t('documents', 'Text');
++t('documents', 'Top');
++t('documents', 'Underline');
++t('documents', 'Undo');
++t('documents', 'Unknown Author');
diff --cc apps/documents/l10n/ach/documents.po
index 3fbed40,0000000..3358ccb
mode 100644,000000..100644
--- a/apps/documents/l10n/ach/documents.po
+++ b/apps/documents/l10n/ach/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Acoli (http://www.transifex.com/projects/p/owncloud/language/ach/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ach\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ady/documents.po
index 8d35bf4,0000000..42e68ac
mode 100644,000000..100644
--- a/apps/documents/l10n/ady/documents.po
+++ b/apps/documents/l10n/ady/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Adyghe (http://www.transifex.com/projects/p/owncloud/language/ady/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ady\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/af/documents.po
index 913b129,0000000..5d80b7c
mode 100644,000000..100644
--- a/apps/documents/l10n/af/documents.po
+++ b/apps/documents/l10n/af/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: af\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/af_ZA.php
index 0000000,0000000..04e1945
new file mode 100644
--- /dev/null
+++ b/apps/documents/l10n/af_ZA.php
@@@ -1,0 -1,0 +1,3 @@@
++<?php $TRANSLATIONS = array(
++"Password" => "Wagwoord"
++);
diff --cc apps/documents/l10n/af_ZA/documents.po
index f25f172,0000000..c3e9143
mode 100644,000000..100644
--- a/apps/documents/l10n/af_ZA/documents.po
+++ b/apps/documents/l10n/af_ZA/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: af_ZA\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Wagwoord"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ar.php
index 8fbc816,0000000..1af378c
mode 100644,000000..100644
--- a/apps/documents/l10n/ar.php
+++ b/apps/documents/l10n/ar.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "إغلاق",
 +"Share" => "شارك",
- "Upload" => "رفع"
++"OK" => "تم",
++"Upload" => "رفع",
++"Password" => "كلمة المرور"
 +);
diff --cc apps/documents/l10n/ar/documents.po
index 6190bce,0000000..9f96c48
mode 100644,000000..100644
--- a/apps/documents/l10n/ar/documents.po
+++ b/apps/documents/l10n/ar/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ar\n"
 +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "إغلاق"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "شارك"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "تم"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "رفع"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "كلمة المرور"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/be/documents.po
index 3aea852,0000000..8d2119a
mode 100644,000000..100644
--- a/apps/documents/l10n/be/documents.po
+++ b/apps/documents/l10n/be/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Belarusian (http://www.transifex.com/projects/p/owncloud/language/be/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: be\n"
 +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/bg_BG.php
index 1cf15ca,0000000..a8902f3
mode 100644,000000..100644
--- a/apps/documents/l10n/bg_BG.php
+++ b/apps/documents/l10n/bg_BG.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Затвори",
 +"Share" => "Споделяне",
- "Upload" => "Качване"
++"OK" => "ОК",
++"Upload" => "Качване",
++"Password" => "Парола"
 +);
diff --cc apps/documents/l10n/bg_BG/documents.po
index 7ea0cd1,0000000..8f2e721
mode 100644,000000..100644
--- a/apps/documents/l10n/bg_BG/documents.po
+++ b/apps/documents/l10n/bg_BG/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: bg_BG\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Затвори"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Споделяне"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "ОК"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Качване"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Парола"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/bn_BD.php
index 3d37731,0000000..9a21155
mode 100644,000000..100644
--- a/apps/documents/l10n/bn_BD.php
+++ b/apps/documents/l10n/bn_BD.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "বন্ধ",
 +"Share" => "ভাগাভাগি কর",
- "Upload" => "আপলোড"
++"OK" => "তথাস্তু",
++"Upload" => "আপলোড",
++"Password" => "কূটশব্দ"
 +);
diff --cc apps/documents/l10n/bn_BD/documents.po
index e181be5,0000000..0c258fc
mode 100644,000000..100644
--- a/apps/documents/l10n/bn_BD/documents.po
+++ b/apps/documents/l10n/bn_BD/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: bn_BD\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "বন্ধ"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "ভাগাভাগি কর"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "তথাস্তু"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "আপলোড"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "কূটশব্দ"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/bs/documents.po
index 3c4d4d9,0000000..310d3a4
mode 100644,000000..100644
--- a/apps/documents/l10n/bs/documents.po
+++ b/apps/documents/l10n/bs/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Bosnian (http://www.transifex.com/projects/p/owncloud/language/bs/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: bs\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zatvori"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Podijeli"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ca.php
index dee65f3,0000000..fc6ba6b
mode 100644,000000..100644
--- a/apps/documents/l10n/ca.php
+++ b/apps/documents/l10n/ca.php
@@@ -1,20 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documents",
 +"Close" => "Tanca",
 +"Share" => "Comparteix",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Deixant aquesta pàgina en mode editor poden quedar dades sense desar. Es recomana usar el botó 'Tanca'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Ha fallat la càrrega d'aquest document. Comproveu si es pot obrir amb un editor odt extern. Això podria significar que s'ha deixat de compartir o eliminat recentment.",
 +"Failed to load documents." => "Ha fallat en carregar documents.",
 +"No documents are found. Please upload or create a document!" => "No hi ha documents. Pugeu o creeu un document!",
++"OK" => "D'acord",
 +"Sent" => "Enviat",
 +"Declined" => "Denegat",
 +"Accepted" => "Acceptat",
 +"Incoming" => "Entrant",
 +"Upload" => "Puja",
 +"Save new documents to" => "Desa els documents nous a",
++"Password" => "Contrasenya",
 +"Please enter your nickname" => "Escriviu el sobrenom",
 +"Join" => "Uniu-vos",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Aquest enllaç ha vençut o no ha existit mai. Contacteu amb la persona que l'ha compartit amb vós per més detalls.",
 +"Advanced feature-set" => "Joc d'opcions avançades",
 +"(Unstable)" => "(Inestable)"
 +);
diff --cc apps/documents/l10n/ca/documents.po
index dd0f110,0000000..edc7a28
mode 100644,000000..100644
--- a/apps/documents/l10n/ca/documents.po
+++ b/apps/documents/l10n/ca/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# rogerc, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ca\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documents"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Tanca"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Comparteix"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Deixant aquesta pàgina en mode editor poden quedar dades sense desar. Es recomana usar el botó 'Tanca'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Ha fallat la càrrega d'aquest document. Comproveu si es pot obrir amb un editor odt extern. Això podria significar que s'ha deixat de compartir o eliminat recentment."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Ha fallat en carregar documents."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "No hi ha documents. Pugeu o creeu un document!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "D'acord"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Enviat"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Denegat"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Acceptat"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Entrant"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Puja"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Desa els documents nous a"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Contrasenya"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Escriviu el sobrenom"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Uniu-vos"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Aquest enllaç ha vençut o no ha existit mai. Contacteu amb la persona que l'ha compartit amb vós per més detalls."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Joc d'opcions avançades"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Inestable)"
diff --cc apps/documents/l10n/cs_CZ.php
index e6305b5,0000000..43115c3
mode 100644,000000..100644
--- a/apps/documents/l10n/cs_CZ.php
+++ b/apps/documents/l10n/cs_CZ.php
@@@ -1,19 -1,0 +1,21 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumenty",
 +"Close" => "Zavřít",
 +"Share" => "Sdílet",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Ponecháním této stránky v módu editoru může dojít k neuložení změn. Místo toho je doporučeno použít tlačítko 'Zavřít'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Nepodařilo se otevřít tento dokument. Prosím zkontrolujte, zda je možné jej otevřít externím editorem odt. Může to také znamenat, že byl nedávno odsdílen nebo smazán.",
 +"Failed to load documents." => "Nepodařilo se načíst dokumenty.",
 +"No documents are found. Please upload or create a document!" => "Žádné dokumenty nebyly nalezeny. Nahrajte nebo vytvořte dokument!",
++"OK" => "OK",
 +"Sent" => "Odesláno",
 +"Declined" => "Zamítnuto",
 +"Accepted" => "Schváleno",
 +"Incoming" => "Příchozí",
 +"Upload" => "Odeslat",
 +"Save new documents to" => "Uložit nové dokumenty do",
++"Password" => "Heslo",
 +"Join" => "Vstoupit",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Tento odkaz expiroval nebo neexistuje. Pro podrobnosti kontaktujte osobu, která jej s vámi sdílela.",
 +"Advanced feature-set" => "Pokročilá sada možností",
 +"(Unstable)" => "(Nestabilní)"
 +);
diff --cc apps/documents/l10n/cs_CZ/documents.po
index 4765bb8,0000000..c63d154
mode 100644,000000..100644
--- a/apps/documents/l10n/cs_CZ/documents.po
+++ b/apps/documents/l10n/cs_CZ/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Twiguard, 2013
 +# cvanca <mrs.jenkins.oh.yeah at gmail.com>, 2013
 +# pstast <petr at stastny.eu>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: cs_CZ\n"
 +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumenty"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zavřít"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Sdílet"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Ponecháním této stránky v módu editoru může dojít k neuložení změn. Místo toho je doporučeno použít tlačítko 'Zavřít'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Nepodařilo se otevřít tento dokument. Prosím zkontrolujte, zda je možné jej otevřít externím editorem odt. Může to také znamenat, že byl nedávno odsdílen nebo smazán."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Nepodařilo se načíst dokumenty."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Žádné dokumenty nebyly nalezeny. Nahrajte nebo vytvořte dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Odesláno"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Zamítnuto"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Schváleno"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Příchozí"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Odeslat"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Uložit nové dokumenty do"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Heslo"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Vstoupit"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Tento odkaz expiroval nebo neexistuje. Pro podrobnosti kontaktujte osobu, která jej s vámi sdílela."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Pokročilá sada možností"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Nestabilní)"
diff --cc apps/documents/l10n/cy_GB.php
index 49afb0b,0000000..9138a98
mode 100644,000000..100644
--- a/apps/documents/l10n/cy_GB.php
+++ b/apps/documents/l10n/cy_GB.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Cau",
 +"Share" => "Rhannu",
- "Upload" => "Llwytho i fyny"
++"OK" => "Iawn",
++"Upload" => "Llwytho i fyny",
++"Password" => "Cyfrinair"
 +);
diff --cc apps/documents/l10n/cy_GB/documents.po
index a42b2c5,0000000..a113752e
mode 100644,000000..100644
--- a/apps/documents/l10n/cy_GB/documents.po
+++ b/apps/documents/l10n/cy_GB/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Welsh (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/cy_GB/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: cy_GB\n"
 +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Cau"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Rhannu"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Iawn"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Llwytho i fyny"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Cyfrinair"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/da.php
index 25d326d,0000000..291d506
mode 100644,000000..100644
--- a/apps/documents/l10n/da.php
+++ b/apps/documents/l10n/da.php
@@@ -1,19 -1,0 +1,21 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumenter",
 +"Close" => "Luk",
 +"Share" => "Del",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "At forlade denne side i redigeringstilstand kan resultere i ikke gemte data. Det anbefales at bruge 'Luk' knappen i stedet.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Kunne ikke hentet dette dokument. Undersøg venligst om det kan åbnes med en ekstern odt læser. Dette kan også betyde at dokumentet for nylig er blevet gjort privat eller slettet. ",
 +"Failed to load documents." => "Kunne ikke hente dokumenterne. ",
 +"No documents are found. Please upload or create a document!" => "Ingen dokumenter fundet. Upload eller opret venligst et dokument!",
++"OK" => "OK",
 +"Sent" => "Sent",
 +"Declined" => "Afvist",
 +"Accepted" => "Accepteret",
 +"Incoming" => "Indgående",
 +"Upload" => "Upload",
 +"Save new documents to" => "Gem nye dokumenter til",
++"Password" => "Kodeord",
 +"Join" => "Deltag",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Dette link er uløbet eller har aldrig eksisteret. Kontakt venligst personen der delte linket for yderligere detaljer. ",
 +"Advanced feature-set" => "Avancerede funktioner",
 +"(Unstable)" => "(Ustabil)"
 +);
diff --cc apps/documents/l10n/da/documents.po
index e6e8c0b,0000000..05ff43e
mode 100644,000000..100644
--- a/apps/documents/l10n/da/documents.po
+++ b/apps/documents/l10n/da/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Sappe, 2013
 +# patrickknudsen, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: da\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumenter"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Luk"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Del"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "At forlade denne side i redigeringstilstand kan resultere i ikke gemte data. Det anbefales at bruge 'Luk' knappen i stedet."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Kunne ikke hentet dette dokument. Undersøg venligst om det kan åbnes med en ekstern odt læser. Dette kan også betyde at dokumentet for nylig er blevet gjort privat eller slettet. "
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Kunne ikke hente dokumenterne. "
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Ingen dokumenter fundet. Upload eller opret venligst et dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Sent"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Afvist"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Accepteret"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Indgående"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Upload"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Gem nye dokumenter til"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Kodeord"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Deltag"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Dette link er uløbet eller har aldrig eksisteret. Kontakt venligst personen der delte linket for yderligere detaljer. "
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Avancerede funktioner"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Ustabil)"
diff --cc apps/documents/l10n/de.php
index 4a6aabf,0000000..ec13f19
mode 100644,000000..100644
--- a/apps/documents/l10n/de.php
+++ b/apps/documents/l10n/de.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumente",
 +"Close" => "Schließen",
 +"Share" => "Teilen",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Das Verlassen dieser Seite im Editor-Modus kann zu nicht gespeicherten Daten führen. Es wird empfohlen, den 'Schließen' - Button zu verwenden.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Fehler beim Laden dieses Dokumentes. Bitte prüfe ob diese Datei mit einem externen ODT-Editor geöffnet werden kann. Dies könnte auch bedeuten, das die Datei nicht mehr geteilt wird oder kürzlich gelöscht wurde.",
 +"Failed to load documents." => "Laden der Dokumente fehlgeschlagen.",
 +"No documents are found. Please upload or create a document!" => "Keine Dokumente gefunden. Bitte lade Dokumente hoch, oder erstelle ein Dokument!",
++"OK" => "OK",
 +"Sent" => "Senden",
 +"Declined" => "Abgelehnt",
 +"Accepted" => "Akzeptiert",
 +"Incoming" => "Eingehend",
 +"Upload" => "Hochladen",
 +"Save new documents to" => "Neues Dokument speichern unter",
++"Wrong password. Please retry." => "Falsches Passwort. Bitte versuche es noch einmal.",
++"Password" => "Passwort",
 +"Please enter your nickname" => "Bitte gib Deinen Spitznamen ein",
 +"Join" => "Beitreten",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Dieser Link ist abgelaufen oder existierte niemals. Bitte kontaktiere, für nähere Details, die Person, die dies mit dir teilt.",
 +"Advanced feature-set" => "Erweiterte Funktionseinstellungen",
 +"(Unstable)" => "(Instabil)"
 +);
diff --cc apps/documents/l10n/de/documents.po
index 4eeec61,0000000..71b68b7
mode 100644,000000..100644
--- a/apps/documents/l10n/de/documents.po
+++ b/apps/documents/l10n/de/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Mario Siegmann <mario_siegmann at web.de>, 2013
 +# stefanniedermann <stefan.niedermann at googlemail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumente"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Schließen"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Teilen"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Das Verlassen dieser Seite im Editor-Modus kann zu nicht gespeicherten Daten führen. Es wird empfohlen, den 'Schließen' - Button zu verwenden."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Fehler beim Laden dieses Dokumentes. Bitte prüfe ob diese Datei mit einem externen ODT-Editor geöffnet werden kann. Dies könnte auch bedeuten, das die Datei nicht mehr geteilt wird oder kürzlich gelöscht wurde."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Laden der Dokumente fehlgeschlagen."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Keine Dokumente gefunden. Bitte lade Dokumente hoch, oder erstelle ein Dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Senden"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Abgelehnt"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Akzeptiert"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Eingehend"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Hochladen"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Neues Dokument speichern unter"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Falsches Passwort. Bitte versuche es noch einmal."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Passwort"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Bitte gib Deinen Spitznamen ein"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Beitreten"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Dieser Link ist abgelaufen oder existierte niemals. Bitte kontaktiere, für nähere Details, die Person, die dies mit dir teilt."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Erweiterte Funktionseinstellungen"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Instabil)"
diff --cc apps/documents/l10n/de_AT/documents.po
index 2ab9d26,0000000..0476647
mode 100644,000000..100644
--- a/apps/documents/l10n/de_AT/documents.po
+++ b/apps/documents/l10n/de_AT/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: German (Austria) (http://www.transifex.com/projects/p/owncloud/language/de_AT/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de_AT\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/de_CH.php
index 92567e6,0000000..2c64801
mode 100644,000000..100644
--- a/apps/documents/l10n/de_CH.php
+++ b/apps/documents/l10n/de_CH.php
@@@ -1,5 -1,0 +1,21 @@@
 +<?php $TRANSLATIONS = array(
++"Documents" => "Dokumente",
 +"Close" => "Schliessen",
 +"Share" => "Freigeben",
- "Upload" => "Datei hochladen"
++"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Fehler beim Laden dieses Dokumentes. Bitte prüfen Sie ob diese Datei mit einem externen ODT-Editor geöffnet werden kann. Dies könnte auch bedeuten, dass die Datei nicht mehr geteilt wird oder kürzlich gelöscht wurde.",
++"Failed to load documents." => "Laden der Dokumente fehlgeschlagen.",
++"No documents are found. Please upload or create a document!" => "Keine Dokumente gefunden. Bitte laden Sie Dokumente hoch, oder erstellen Sie ein Dokument!",
++"OK" => "OK",
++"Sent" => "Senden",
++"Declined" => "Abgelehnt",
++"Accepted" => "Akzeptiert",
++"Incoming" => "Eingehend",
++"Upload" => "Datei hochladen",
++"Save new documents to" => "Neues Dokument speichern unter",
++"Wrong password. Please retry." => "Falsches Passwort. Bitte versuchen Sie es noch einmal.",
++"Password" => "Passwort",
++"Please enter your nickname" => "Bitte geben Sie Ihren Spitznamen ein",
++"Join" => "Beitreten",
++"Advanced feature-set" => "Erweiterte Funktionseinstellungen",
++"(Unstable)" => "(Instabil)"
 +);
diff --cc apps/documents/l10n/de_CH/documents.po
index 17857fe,0000000..f679ff6
mode 100644,000000..100644
--- a/apps/documents/l10n/de_CH/documents.po
+++ b/apps/documents/l10n/de_CH/documents.po
@@@ -1,109 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
++# kenwood <kenwood at gmx.ch>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/owncloud/language/de_CH/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de_CH\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
- msgstr ""
++msgstr "Dokumente"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Schliessen"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Freigeben"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
- msgstr ""
++msgstr "Fehler beim Laden dieses Dokumentes. Bitte prüfen Sie ob diese Datei mit einem externen ODT-Editor geöffnet werden kann. Dies könnte auch bedeuten, dass die Datei nicht mehr geteilt wird oder kürzlich gelöscht wurde."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
- msgstr ""
++msgstr "Laden der Dokumente fehlgeschlagen."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
++msgstr "Keine Dokumente gefunden. Bitte laden Sie Dokumente hoch, oder erstellen Sie ein Dokument!"
++
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
 +msgstr ""
 +
 +#: lib/invite.php:64
 +msgid "Sent"
- msgstr ""
++msgstr "Senden"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
- msgstr ""
++msgstr "Abgelehnt"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
- msgstr ""
++msgstr "Akzeptiert"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
- msgstr ""
++msgstr "Eingehend"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Datei hochladen"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
- msgstr ""
++msgstr "Neues Dokument speichern unter"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Falsches Passwort. Bitte versuchen Sie es noch einmal."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Passwort"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
- msgstr ""
++msgstr "Bitte geben Sie Ihren Spitznamen ein"
 +
 +#: templates/public.php:18
 +msgid "Join"
- msgstr ""
++msgstr "Beitreten"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
- msgstr ""
++msgstr "Erweiterte Funktionseinstellungen"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
- msgstr ""
++msgstr "(Instabil)"
diff --cc apps/documents/l10n/de_DE.php
index 76dc23b,0000000..7e1ae63
mode 100644,000000..100644
--- a/apps/documents/l10n/de_DE.php
+++ b/apps/documents/l10n/de_DE.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumente",
 +"Close" => "Schließen",
 +"Share" => "Teilen",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Das Verlassen dieser Seite im Editor-Modus kann zu nicht gespeicherten Daten führen. Es wird empfohlen, den 'Schließen' - Button zu verwenden.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Fehler beim Laden dieses Dokumentes. Bitte prüfen Sie ob diese Datei mit einem externen ODT-Editor geöffnet werden kann. Dies könnte auch bedeuten, das die Datei nicht mehr geteilt wird oder kürzlich gelöscht wurde.",
 +"Failed to load documents." => "Laden der Dokumente fehlgeschlagen.",
 +"No documents are found. Please upload or create a document!" => "Keine Dokumente gefunden. Bitte laden Sie Dokumente hoch, oder erstellen Sie ein Dokument!",
++"OK" => "OK",
 +"Sent" => "Senden",
 +"Declined" => "Abgelehnt",
 +"Accepted" => "Akzeptiert",
 +"Incoming" => "Eingehend",
 +"Upload" => "Hochladen",
 +"Save new documents to" => "Neues Dokument speichern unter",
++"Wrong password. Please retry." => "Falsches Passwort. Bitte versuchen Sie es noch einmal.",
++"Password" => "Passwort",
 +"Please enter your nickname" => "Bitte geben Sie Ihren Spitznamen ein",
 +"Join" => "Beitreten",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Dieser Link ist abgelaufen oder existierte niemals. Bitte kontaktieren Sie, für nähere Details, die Person, die dies mit Ihnen teilt.",
 +"Advanced feature-set" => "Erweiterte Funktionseinstellungen",
 +"(Unstable)" => "(Instabil)"
 +);
diff --cc apps/documents/l10n/de_DE/documents.po
index 5869215,0000000..083365f
mode 100644,000000..100644
--- a/apps/documents/l10n/de_DE/documents.po
+++ b/apps/documents/l10n/de_DE/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Mario Siegmann <mario_siegmann at web.de>, 2013
 +# stefanniedermann <stefan.niedermann at googlemail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: de_DE\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumente"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Schließen"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Teilen"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Das Verlassen dieser Seite im Editor-Modus kann zu nicht gespeicherten Daten führen. Es wird empfohlen, den 'Schließen' - Button zu verwenden."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Fehler beim Laden dieses Dokumentes. Bitte prüfen Sie ob diese Datei mit einem externen ODT-Editor geöffnet werden kann. Dies könnte auch bedeuten, das die Datei nicht mehr geteilt wird oder kürzlich gelöscht wurde."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Laden der Dokumente fehlgeschlagen."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Keine Dokumente gefunden. Bitte laden Sie Dokumente hoch, oder erstellen Sie ein Dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Senden"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Abgelehnt"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Akzeptiert"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Eingehend"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Hochladen"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Neues Dokument speichern unter"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Falsches Passwort. Bitte versuchen Sie es noch einmal."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Passwort"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Bitte geben Sie Ihren Spitznamen ein"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Beitreten"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Dieser Link ist abgelaufen oder existierte niemals. Bitte kontaktieren Sie, für nähere Details, die Person, die dies mit Ihnen teilt."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Erweiterte Funktionseinstellungen"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Instabil)"
diff --cc apps/documents/l10n/el.php
index f1ac46b,0000000..9560152
mode 100644,000000..100644
--- a/apps/documents/l10n/el.php
+++ b/apps/documents/l10n/el.php
@@@ -1,20 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Έγγραφα",
 +"Close" => "Κλείσιμο",
 +"Share" => "Διαμοιρασμός",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Αποχωρώντας από την κατάσταση Επεξεργασίας της σελίδας μπορεί να υπάρξουν μη αποθηκευμένα δεδομένα. Αντί γι' αυτό, συνίσταται να χρησιμοποιήσετε το κουμπί 'Κλείσιμο'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Αποτυχία φόρτωσης του εγγράφου. Παρακαλώ ελέγξτε εάν μπορεί να ανοίξει με εξωτερικό επεξεργαστή odt. Αυτό επίσης μπορεί να σημαίνει ότι πρόσφατα έχει ακυρωθεί ο διαμοιρασμός ή διαγραφεί.",
 +"Failed to load documents." => "Αποτυχία φόρτωσης εγγράφων.",
 +"No documents are found. Please upload or create a document!" => "Δεν βρέθηκαν έγγραφα. Παρακαλώ αποστείλετε ή δημιουργήστε ένα έγγραφο.",
++"OK" => "ΟΚ",
 +"Sent" => "Απεστάλη",
 +"Declined" => "Απορρίφθηκε",
 +"Accepted" => "Αποδοχή",
 +"Incoming" => "Εισερχόμενα",
 +"Upload" => "Μεταφόρτωση",
 +"Save new documents to" => "Αποθήκευση νέων εγγράφων σε",
++"Password" => "Συνθηματικό",
 +"Please enter your nickname" => "Παρακαλώ εισάγετε το παρατσούκλι σας",
 +"Join" => "Συμμετοχή",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Αυτός ο σύνδεσμος έχει λήξει ή δεν υπήρξε ποτέ. Παρακαλώ επικοινωνήστε με το άτομο που το διαμοιράστηκε μαζί σας για λεπτομέρειες.",
 +"Advanced feature-set" => "Σύνολο χαρακτηριστικών για προχωρημένους",
 +"(Unstable)" => "(Ασταθές)"
 +);
diff --cc apps/documents/l10n/el/documents.po
index 53f1b5e,0000000..a8e7f80
mode 100644,000000..100644
--- a/apps/documents/l10n/el/documents.po
+++ b/apps/documents/l10n/el/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Efstathios Iosifidis <iefstathios at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: el\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Έγγραφα"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Κλείσιμο"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Διαμοιρασμός"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Αποχωρώντας από την κατάσταση Επεξεργασίας της σελίδας μπορεί να υπάρξουν μη αποθηκευμένα δεδομένα. Αντί γι' αυτό, συνίσταται να χρησιμοποιήσετε το κουμπί 'Κλείσιμο'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Αποτυχία φόρτωσης του εγγράφου. Παρακαλώ ελέγξτε εάν μπορεί να ανοίξει με εξωτερικό επεξεργαστή odt. Αυτό επίσης μπορεί να σημαίνει ότι πρόσφατα έχει ακυρωθεί ο διαμοιρασμός ή διαγραφεί."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Αποτυχία φόρτωσης εγγράφων."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Δεν βρέθηκαν έγγραφα. Παρακαλώ αποστείλετε ή δημιουργήστε ένα έγγραφο."
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "ΟΚ"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Απεστάλη"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Απορρίφθηκε"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Αποδοχή"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Εισερχόμενα"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Μεταφόρτωση"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Αποθήκευση νέων εγγράφων σε"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Συνθηματικό"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Παρακαλώ εισάγετε το παρατσούκλι σας"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Συμμετοχή"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Αυτός ο σύνδεσμος έχει λήξει ή δεν υπήρξε ποτέ. Παρακαλώ επικοινωνήστε με το άτομο που το διαμοιράστηκε μαζί σας για λεπτομέρειες."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Σύνολο χαρακτηριστικών για προχωρημένους"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Ασταθές)"
diff --cc apps/documents/l10n/en at pirate.php
index 0000000,0000000..eb66714
new file mode 100644
--- /dev/null
+++ b/apps/documents/l10n/en at pirate.php
@@@ -1,0 -1,0 +1,3 @@@
++<?php $TRANSLATIONS = array(
++"Password" => "Secret Code"
++);
diff --cc apps/documents/l10n/en at pirate/documents.po
index 70e5745,0000000..c06fe21
mode 100644,000000..100644
--- a/apps/documents/l10n/en at pirate/documents.po
+++ b/apps/documents/l10n/en at pirate/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Pirate English (http://www.transifex.com/projects/p/owncloud/language/en@pirate/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: en at pirate\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Secret Code"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/en_GB.php
index 6df1158,0000000..a6afcca
mode 100644,000000..100644
--- a/apps/documents/l10n/en_GB.php
+++ b/apps/documents/l10n/en_GB.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documents",
 +"Close" => "Close",
 +"Share" => "Share",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Failed to load this document. Please check if it can be opened with an external ODT editor. This might also mean it has been unshared or deleted recently.",
 +"Failed to load documents." => "Failed to load documents.",
 +"No documents are found. Please upload or create a document!" => "No documents can be found. Please upload or create a document!",
++"OK" => "OK",
 +"Sent" => "Sent",
 +"Declined" => "Declined",
 +"Accepted" => "Accepted",
 +"Incoming" => "Incoming",
 +"Upload" => "Upload",
 +"Save new documents to" => "Save new documents to",
++"Wrong password. Please retry." => "Incorrect password. Please try again.",
++"Password" => "Password",
 +"Please enter your nickname" => "Please enter your nickname",
 +"Join" => "Join",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "This link has expired or is incorrect. Please contact the person who shared it with you for details.",
 +"Advanced feature-set" => "Advanced feature-set",
 +"(Unstable)" => "(Unstable)"
 +);
diff --cc apps/documents/l10n/en_GB/documents.po
index 6a718c8,0000000..a3c5a22
mode 100644,000000..100644
--- a/apps/documents/l10n/en_GB/documents.po
+++ b/apps/documents/l10n/en_GB/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mnestis <transifex at mnestis.net>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: en_GB\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documents"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Close"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Share"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Failed to load this document. Please check if it can be opened with an external ODT editor. This might also mean it has been unshared or deleted recently."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Failed to load documents."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "No documents can be found. Please upload or create a document!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Sent"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Declined"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Accepted"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Incoming"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Upload"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Save new documents to"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Incorrect password. Please try again."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Password"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Please enter your nickname"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Join"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "This link has expired or is incorrect. Please contact the person who shared it with you for details."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Advanced feature-set"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Unstable)"
diff --cc apps/documents/l10n/eo.php
index 6b68dc0,0000000..a66ab63
mode 100644,000000..100644
--- a/apps/documents/l10n/eo.php
+++ b/apps/documents/l10n/eo.php
@@@ -1,20 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumentoj",
 +"Close" => "Fermi",
 +"Share" => "Kunhavigi",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Laso de ĉi tiu paĝo en reĝimo Redaktilo povas kaŭzi nekonservotaj datumoj. Rekomendatas uzo de la butono “Fermi” anstataŭe.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Malsukcesis ŝargo de ĉi tiu dokumento. Bonvolu kontroli ĉu ĝi malfermeblas per malena odt-redaktilo. Ĉi tio povas ankaŭ signifi, ke ĝi malkunhaviĝis aŭ foriĝis lastatempe.",
 +"Failed to load documents." => "Malsukcesis ŝargo de dokumentoj.",
 +"No documents are found. Please upload or create a document!" => "Neniu dokumento troviĝis. Bonvolu alŝuti aŭ krei dokumenton!",
++"OK" => "Akcepti",
 +"Sent" => "Sendita",
 +"Declined" => "Malakceptita",
 +"Accepted" => "Akceptita",
 +"Incoming" => "Eniranta",
 +"Upload" => "Alŝuti",
 +"Save new documents to" => "Konservi novajn dokumentojn en",
++"Password" => "Pasvorto",
 +"Please enter your nickname" => "Bonvolu enigi vian kaŝnomon",
 +"Join" => "Kuniĝi",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Ĉi tiu ligilo eksvalidiĝis aŭ neniam ekzistis. Bonvolu kontakti la personon, kiu kunhavigis ĝin kun vi, por detaloj.",
 +"Advanced feature-set" => "Altanivela funkciaro",
 +"(Unstable)" => "(nestabila)"
 +);
diff --cc apps/documents/l10n/eo/documents.po
index bb23af2,0000000..10e7000
mode 100644,000000..100644
--- a/apps/documents/l10n/eo/documents.po
+++ b/apps/documents/l10n/eo/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Mariano <mstreet at kde.org.ar>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: eo\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumentoj"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Fermi"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Kunhavigi"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Laso de ĉi tiu paĝo en reĝimo Redaktilo povas kaŭzi nekonservotaj datumoj. Rekomendatas uzo de la butono “Fermi” anstataŭe."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Malsukcesis ŝargo de ĉi tiu dokumento. Bonvolu kontroli ĉu ĝi malfermeblas per malena odt-redaktilo. Ĉi tio povas ankaŭ signifi, ke ĝi malkunhaviĝis aŭ foriĝis lastatempe."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Malsukcesis ŝargo de dokumentoj."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Neniu dokumento troviĝis. Bonvolu alŝuti aŭ krei dokumenton!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Akcepti"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Sendita"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Malakceptita"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Akceptita"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Eniranta"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Alŝuti"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Konservi novajn dokumentojn en"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Pasvorto"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Bonvolu enigi vian kaŝnomon"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Kuniĝi"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Ĉi tiu ligilo eksvalidiĝis aŭ neniam ekzistis. Bonvolu kontakti la personon, kiu kunhavigis ĝin kun vi, por detaloj."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Altanivela funkciaro"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(nestabila)"
diff --cc apps/documents/l10n/es.php
index c053289,0000000..2d2588d
mode 100644,000000..100644
--- a/apps/documents/l10n/es.php
+++ b/apps/documents/l10n/es.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documentos",
 +"Close" => "Cerrar",
 +"Share" => "Compartir",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Si deja esta página en el modo de edición, puede que algunos datos no sean guardados. Es preferible usar el botón «Cerrar».",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "No se pudo cargar el documento. Sírvase comprobar si puede abrirlo con un editor de archivos ODT externo. También puede ser que hayan dejado de compartirlo o haya sido eliminado recientemente.",
 +"Failed to load documents." => "Error al cargar los documentos.",
 +"No documents are found. Please upload or create a document!" => "No se encontraron documentos. ¡Suba o cree un documento!",
++"OK" => "Aceptar",
 +"Sent" => "Enviado",
 +"Declined" => "Denegado",
 +"Accepted" => "Aceptado",
 +"Incoming" => "Entrante",
 +"Upload" => "Subir",
 +"Save new documents to" => "Guardar nuevos documentos en",
++"Wrong password. Please retry." => "Contraseña incorrecta. Inténtelo de nuevo.",
++"Password" => "Contraseña",
 +"Please enter your nickname" => "Por favor introduzca su apodo",
 +"Join" => "Participar",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Este enlace caducó o nunca existió. Para más detalles, sírvase contactar a la persona que lo compartió con usted.",
 +"Advanced feature-set" => "Características avanzadas",
 +"(Unstable)" => "(Inestable)"
 +);
diff --cc apps/documents/l10n/es/documents.po
index 28650ae,0000000..14f3e81
mode 100644,000000..100644
--- a/apps/documents/l10n/es/documents.po
+++ b/apps/documents/l10n/es/documents.po
@@@ -1,113 -1,0 +1,301 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Art O. Pal <artopal at fastmail.fm>, 2013
 +# juanman <juanma at kde.org.ar>, 2013
 +# Raul Fernandez Garcia <raulfg3 at gmail.com>, 2013
 +# saskarip <saskarip at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: es\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documentos"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Cerrar"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Compartir"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Si deja esta página en el modo de edición, puede que algunos datos no sean guardados. Es preferible usar el botón «Cerrar»."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "No se pudo cargar el documento. Sírvase comprobar si puede abrirlo con un editor de archivos ODT externo. También puede ser que hayan dejado de compartirlo o haya sido eliminado recientemente."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Error al cargar los documentos."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "No se encontraron documentos. ¡Suba o cree un documento!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Aceptar"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Enviado"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Denegado"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Aceptado"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Entrante"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Subir"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Guardar nuevos documentos en"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Contraseña incorrecta. Inténtelo de nuevo."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Contraseña"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Por favor introduzca su apodo"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Participar"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Este enlace caducó o nunca existió. Para más detalles, sírvase contactar a la persona que lo compartió con usted."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Características avanzadas"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Inestable)"
diff --cc apps/documents/l10n/es_AR.php
index 3f4ff8f,0000000..cf2094a
mode 100644,000000..100644
--- a/apps/documents/l10n/es_AR.php
+++ b/apps/documents/l10n/es_AR.php
@@@ -1,13 -1,0 +1,15 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documentos",
 +"Close" => "Cerrar",
 +"Share" => "Compartir",
 +"Failed to load documents." => "La carga de documentos ha fallado.",
++"OK" => "Aceptar",
 +"Sent" => "Enviar",
 +"Declined" => "Denegado",
 +"Accepted" => "Aceptado",
 +"Incoming" => "Ingresando",
 +"Upload" => "Subir",
++"Password" => "Contraseña",
 +"Advanced feature-set" => "Características Avanzadas",
 +"(Unstable)" => "(Inestable)"
 +);
diff --cc apps/documents/l10n/es_AR/documents.po
index 80ff291,0000000..ef1cf47
mode 100644,000000..100644
--- a/apps/documents/l10n/es_AR/documents.po
+++ b/apps/documents/l10n/es_AR/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# cjtess <claudio.tessone at gmail.com>, 2013
 +# cnngimenez, 2013
 +# juliabis, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: es_AR\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documentos"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Cerrar"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Compartir"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "La carga de documentos ha fallado."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Aceptar"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Enviar"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Denegado"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Aceptado"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Ingresando"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Subir"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Contraseña"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Características Avanzadas"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Inestable)"
diff --cc apps/documents/l10n/es_MX/documents.po
index d8d61ae,0000000..975f923
mode 100644,000000..100644
--- a/apps/documents/l10n/es_MX/documents.po
+++ b/apps/documents/l10n/es_MX/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Spanish (Mexico) (http://www.transifex.com/projects/p/owncloud/language/es_MX/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: es_MX\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/et_EE.php
index 82f03ad,0000000..8659e3d
mode 100644,000000..100644
--- a/apps/documents/l10n/et_EE.php
+++ b/apps/documents/l10n/et_EE.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumendid",
 +"Close" => "Sulge",
 +"Share" => "Jaga",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Selle lehe jätmine Redaktori moodi võib põhjustada salvestamata andmete kadu. On soovitav selle asemel kasutada \"Sulge\" nuppu.",
- "Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Selle dokumendi laadimine ebaõnnestus. Palun kontrolli kas selle avamine on võimalik välise odt redaktoriga. Ühtlasi võib see tähendada, et fail pole jagatud või on hiljuti kustutatud.",
++"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Selle dokumendi laadimine ebaõnnestus. Palun kontrolli, kas seda saab avada välise odt redaktoriga. Ühtlasi võib see tähendada, et fail pole jagatud või on hiljuti kustutatud.",
 +"Failed to load documents." => "Dokumentide laadimine ebaõnnestus.",
 +"No documents are found. Please upload or create a document!" => "Ühtegi dokumenti ei leitud. Palun laadi dokument üles või loo dokument!",
++"OK" => "OK",
 +"Sent" => "Saadetud",
 +"Declined" => "Tagasi lükatud",
 +"Accepted" => "Vastu võetud",
 +"Incoming" => "Sissetulev",
 +"Upload" => "Lae üles",
 +"Save new documents to" => "Salvesta dokumendid",
++"Wrong password. Please retry." => "Vale parool. Palun proovi uuesti.",
++"Password" => "Parool",
 +"Please enter your nickname" => "Palun sisesta oma hüüdnimi",
 +"Join" => "Liitu",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "See link on aegunud või seda pole kunagi eksisteerinud. Palun võta ühendust inimesega, kes selle sulle jagas.",
 +"Advanced feature-set" => "Täpsemad seaded",
 +"(Unstable)" => "(Ebastabiilne)"
 +);
diff --cc apps/documents/l10n/et_EE/documents.po
index 6b96b01,0000000..e8d074a
mode 100644,000000..100644
--- a/apps/documents/l10n/et_EE/documents.po
+++ b/apps/documents/l10n/et_EE/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# pisike.sipelgas <pisike.sipelgas at gmail.com>, 2013
 +# Rivo Zängov <eraser at eraser.ee>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: et_EE\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumendid"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Sulge"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Jaga"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Selle lehe jätmine Redaktori moodi võib põhjustada salvestamata andmete kadu. On soovitav selle asemel kasutada \"Sulge\" nuppu."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
- msgstr "Selle dokumendi laadimine ebaõnnestus. Palun kontrolli kas selle avamine on võimalik välise odt redaktoriga. Ühtlasi võib see tähendada, et fail pole jagatud või on hiljuti kustutatud."
++msgstr "Selle dokumendi laadimine ebaõnnestus. Palun kontrolli, kas seda saab avada välise odt redaktoriga. Ühtlasi võib see tähendada, et fail pole jagatud või on hiljuti kustutatud."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Dokumentide laadimine ebaõnnestus."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Ühtegi dokumenti ei leitud. Palun laadi dokument üles või loo dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Saadetud"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Tagasi lükatud"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Vastu võetud"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Sissetulev"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Lae üles"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Salvesta dokumendid"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Vale parool. Palun proovi uuesti."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Parool"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Palun sisesta oma hüüdnimi"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Liitu"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "See link on aegunud või seda pole kunagi eksisteerinud. Palun võta ühendust inimesega, kes selle sulle jagas."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Täpsemad seaded"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Ebastabiilne)"
diff --cc apps/documents/l10n/eu.php
index a1bca15,0000000..81307fa
mode 100644,000000..100644
--- a/apps/documents/l10n/eu.php
+++ b/apps/documents/l10n/eu.php
@@@ -1,16 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumentuak",
 +"Close" => "Itxi",
 +"Share" => "Partekatu",
++"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Orri hau Editore moduan uzteak gordegabeko datuak utz ditzake. Aholkatzen da 'Itxi' botoia erabiltzea.",
++"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Dokumentu hau kargatzeak huts egin du. Mesedez egiaztatu ea kanpoko odt editore batekin ireki daitekeen. Honek ere dokumentua partekatzeari utzi egin zaiola edo ezabatu egin dela esan dezake.",
 +"Failed to load documents." => "Dokumentuak kargatzeak huts egin du.",
 +"No documents are found. Please upload or create a document!" => "Ez da dokumenturik aurkitu. Mesedez igo edo sortu dokumentu bat!",
++"OK" => "Ados",
 +"Sent" => "Bidalia",
 +"Declined" => "Ez onartua",
 +"Accepted" => "Onartua",
 +"Incoming" => "Sarrerakoa",
 +"Upload" => "Igo",
 +"Save new documents to" => "Gorde dokumentu berriak hemen",
++"Wrong password. Please retry." => "Pasahitz okerra. Saiatu berriro.",
++"Password" => "Pasahitza",
++"Please enter your nickname" => "Mesedez sartu zure ezizena",
 +"Join" => "Elkartu",
++"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Lotura hau iraungi da edo ez da inoiz existitu. Mesedez zurekin partekatu zuen pertsonarekin harremanetan jarri zehaztasun gehiago izateko.",
 +"Advanced feature-set" => "Ezaugarri aurreratu multzoa",
 +"(Unstable)" => "(Ez-egonkorra)"
 +);
diff --cc apps/documents/l10n/eu/documents.po
index ee935a5,0000000..8c8caef
mode 100644,000000..100644
--- a/apps/documents/l10n/eu/documents.po
+++ b/apps/documents/l10n/eu/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# asieriko <asieriko at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: eu\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumentuak"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Itxi"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Partekatu"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
- msgstr ""
++msgstr "Orri hau Editore moduan uzteak gordegabeko datuak utz ditzake. Aholkatzen da 'Itxi' botoia erabiltzea."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
- msgstr ""
++msgstr "Dokumentu hau kargatzeak huts egin du. Mesedez egiaztatu ea kanpoko odt editore batekin ireki daitekeen. Honek ere dokumentua partekatzeari utzi egin zaiola edo ezabatu egin dela esan dezake."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Dokumentuak kargatzeak huts egin du."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Ez da dokumenturik aurkitu. Mesedez igo edo sortu dokumentu bat!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Ados"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Bidalia"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Ez onartua"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Onartua"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Sarrerakoa"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Igo"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Gorde dokumentu berriak hemen"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Pasahitz okerra. Saiatu berriro."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Pasahitza"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
- msgstr ""
++msgstr "Mesedez sartu zure ezizena"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Elkartu"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
- msgstr ""
++msgstr "Lotura hau iraungi da edo ez da inoiz existitu. Mesedez zurekin partekatu zuen pertsonarekin harremanetan jarri zehaztasun gehiago izateko."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Ezaugarri aurreratu multzoa"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Ez-egonkorra)"
diff --cc apps/documents/l10n/fa.php
index 6592165,0000000..996efc6
mode 100644,000000..100644
--- a/apps/documents/l10n/fa.php
+++ b/apps/documents/l10n/fa.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "بستن",
 +"Share" => "اشتراک‌گذاری",
- "Upload" => "بارگزاری"
++"OK" => "باشه",
++"Upload" => "بارگزاری",
++"Password" => "گذرواژه"
 +);
diff --cc apps/documents/l10n/fa/documents.po
index 1b00af7,0000000..8b5316e
mode 100644,000000..100644
--- a/apps/documents/l10n/fa/documents.po
+++ b/apps/documents/l10n/fa/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: fa\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "بستن"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "اشتراک‌گذاری"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "باشه"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "بارگزاری"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "گذرواژه"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/fi_FI.php
index 9341ae0,0000000..4fe7c3d
mode 100644,000000..100644
--- a/apps/documents/l10n/fi_FI.php
+++ b/apps/documents/l10n/fi_FI.php
@@@ -1,19 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Asiakirjat",
 +"Close" => "Sulje",
 +"Share" => "Jaa",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Tältä sivulta poistuminen muokkaustilassa saattaa aiheuttaa tallentamatonta tietoa. Käytä sivulta poistumisen sijaan \"Sulje\"-painiketta.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Asiakirjan lataaminen epäonnistui. Yritä avata asiakirja erillisellä odt:tä tukevalla sovelluksella. Tämä virhe voi myös tarkoittaa, että asiakirja ei ole enää jaettu tai asiakirja on poistettu äskettäin.",
 +"Failed to load documents." => "Virhe ladattaessa dokumentteja.",
 +"No documents are found. Please upload or create a document!" => "Asiakirjoja ei löytynyt. Lähetä tai luo uusi asiakirja!",
++"OK" => "OK",
 +"Sent" => "Lähetetty",
 +"Declined" => "Torjuttu",
 +"Accepted" => "Hyväksytty",
 +"Incoming" => "Saapuva",
 +"Upload" => "Lähetä",
 +"Save new documents to" => "Uusien asiakirjojen tallennussijainti",
++"Wrong password. Please retry." => "Väärä salasana. Yritä uudelleen.",
++"Password" => "Salasana",
 +"Please enter your nickname" => "Kirjoita nimimerkkisi",
 +"Join" => "Liity",
 +"Advanced feature-set" => "Tarkemmat toiminto-asetukset",
 +"(Unstable)" => "(Epävakaa)"
 +);
diff --cc apps/documents/l10n/fi_FI/documents.po
index aec5d3a,0000000..30bed6e
mode 100644,000000..100644
--- a/apps/documents/l10n/fi_FI/documents.po
+++ b/apps/documents/l10n/fi_FI/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Jiri Grönroos <jiri.gronroos at iki.fi>, 2013
 +# ioxo <vahakangas at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: fi_FI\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Asiakirjat"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Sulje"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Jaa"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Tältä sivulta poistuminen muokkaustilassa saattaa aiheuttaa tallentamatonta tietoa. Käytä sivulta poistumisen sijaan \"Sulje\"-painiketta."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Asiakirjan lataaminen epäonnistui. Yritä avata asiakirja erillisellä odt:tä tukevalla sovelluksella. Tämä virhe voi myös tarkoittaa, että asiakirja ei ole enää jaettu tai asiakirja on poistettu äskettäin."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Virhe ladattaessa dokumentteja."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Asiakirjoja ei löytynyt. Lähetä tai luo uusi asiakirja!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Lähetetty"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Torjuttu"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Hyväksytty"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Saapuva"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Lähetä"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Uusien asiakirjojen tallennussijainti"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Väärä salasana. Yritä uudelleen."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Salasana"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Kirjoita nimimerkkisi"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Liity"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Tarkemmat toiminto-asetukset"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Epävakaa)"
diff --cc apps/documents/l10n/fr.php
index 05bb67a,0000000..5fc5309
mode 100644,000000..100644
--- a/apps/documents/l10n/fr.php
+++ b/apps/documents/l10n/fr.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documents",
 +"Close" => "Fermer",
 +"Share" => "Partager",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Maintenir cette page dans le mode Éditeur empêche la sauvegarde des données. Il est recommandé d'utiliser le bouton 'Fermer'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Le chargement du document a échoué. Veuillez vérifier s'il peut être ouvert avec un éditeur odt externe. Il se peut également que le document a été récemment supprimé ou retiré d'un partage.",
 +"Failed to load documents." => "Échec du chargement des documents.",
 +"No documents are found. Please upload or create a document!" => "Aucun document n'a été trouvé. Veuillez charger ou créer un document !",
++"OK" => "OK",
 +"Sent" => "Envoyé",
 +"Declined" => "Refusé",
 +"Accepted" => "Accepté",
 +"Incoming" => "En réception",
 +"Upload" => "Envoyer",
 +"Save new documents to" => "Enregistrer les nouveaux documents sous",
++"Wrong password. Please retry." => "Mot de passe erroné. Merci de réessayer.",
++"Password" => "Mot de passe",
 +"Please enter your nickname" => "Merci d'entrer votre surnom",
 +"Join" => "Joindre",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Ce lien a expiré ou n'a jamais existé. Pour plus de détails, veuillez contacter la personne qui a créé ce partage avec vous.",
 +"Advanced feature-set" => "Fonctionnalités avancées",
 +"(Unstable)" => "(instable)"
 +);
diff --cc apps/documents/l10n/fr/documents.po
index e990989,0000000..4721020
mode 100644,000000..100644
--- a/apps/documents/l10n/fr/documents.po
+++ b/apps/documents/l10n/fr/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Christophe Lherieau <skimpax at gmail.com>, 2013
 +# etiess <etiess at gmail.com>, 2013
 +# ogre_sympathique <ogre.sympathique at speed.1s.fr>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: fr\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documents"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Fermer"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Partager"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Maintenir cette page dans le mode Éditeur empêche la sauvegarde des données. Il est recommandé d'utiliser le bouton 'Fermer'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Le chargement du document a échoué. Veuillez vérifier s'il peut être ouvert avec un éditeur odt externe. Il se peut également que le document a été récemment supprimé ou retiré d'un partage."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Échec du chargement des documents."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Aucun document n'a été trouvé. Veuillez charger ou créer un document !"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Envoyé"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Refusé"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Accepté"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "En réception"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Envoyer"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Enregistrer les nouveaux documents sous"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Mot de passe erroné. Merci de réessayer."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Mot de passe"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Merci d'entrer votre surnom"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Joindre"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Ce lien a expiré ou n'a jamais existé. Pour plus de détails, veuillez contacter la personne qui a créé ce partage avec vous."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Fonctionnalités avancées"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(instable)"
diff --cc apps/documents/l10n/gl.php
index e6bca74,0000000..8a674db
mode 100644,000000..100644
--- a/apps/documents/l10n/gl.php
+++ b/apps/documents/l10n/gl.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documentos",
 +"Close" => "Pechar",
 +"Share" => "Compartir",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Deixar esta páxina no modo Editor pode provocar que non se garden os datos. Recomendámoslle que empregue o botón «Pechar» no seu canto.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Non foi posíbel cargar o documento. Comprobe se pode abrirse cun editor «odt» externo. Isto tamén pode deberse a que foi eliminado ou a que deixou de compartires recentemente.",
 +"Failed to load documents." => "Non foi posíbel cargar os documentos.",
 +"No documents are found. Please upload or create a document!" => "Non se atopou ningún documento. Envíe ou cree un documento.",
++"OK" => "Aceptar",
 +"Sent" => "Enviado",
 +"Declined" => "Rexeitado",
 +"Accepted" => "Aceptado",
 +"Incoming" => "Entrante",
 +"Upload" => "Enviar",
 +"Save new documents to" => "Gardar os novos documentos en",
++"Wrong password. Please retry." => "Contrasinal incorrecto. Tenteo de novo.",
++"Password" => "Contrasinal",
 +"Please enter your nickname" => "Introduza o seu alcume",
 +"Join" => "Unirse",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Esta ligazón caducou ou xa non existe. Póñase en contacto coa persoa que o compartiu con vostede para obter máis información.",
 +"Advanced feature-set" => "Conxunto de funcións avanzadas",
 +"(Unstable)" => "(Inestábel)"
 +);
diff --cc apps/documents/l10n/gl/documents.po
index 36f27ef,0000000..7291979
mode 100644,000000..100644
--- a/apps/documents/l10n/gl/documents.po
+++ b/apps/documents/l10n/gl/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mbouzada <mbouzada at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: gl\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documentos"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Pechar"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Compartir"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Deixar esta páxina no modo Editor pode provocar que non se garden os datos. Recomendámoslle que empregue o botón «Pechar» no seu canto."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Non foi posíbel cargar o documento. Comprobe se pode abrirse cun editor «odt» externo. Isto tamén pode deberse a que foi eliminado ou a que deixou de compartires recentemente."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Non foi posíbel cargar os documentos."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Non se atopou ningún documento. Envíe ou cree un documento."
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Aceptar"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Enviado"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Rexeitado"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Aceptado"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Entrante"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Enviar"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Gardar os novos documentos en"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Contrasinal incorrecto. Tenteo de novo."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Contrasinal"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Introduza o seu alcume"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Unirse"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Esta ligazón caducou ou xa non existe. Póñase en contacto coa persoa que o compartiu con vostede para obter máis información."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Conxunto de funcións avanzadas"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Inestábel)"
diff --cc apps/documents/l10n/he.php
index c376f69,0000000..b231892
mode 100644,000000..100644
--- a/apps/documents/l10n/he.php
+++ b/apps/documents/l10n/he.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "סגירה",
 +"Share" => "שיתוף",
- "Upload" => "העלאה"
++"OK" => "אישור",
++"Upload" => "העלאה",
++"Password" => "סיסמא"
 +);
diff --cc apps/documents/l10n/he/documents.po
index 36d6839,0000000..96a2b55
mode 100644,000000..100644
--- a/apps/documents/l10n/he/documents.po
+++ b/apps/documents/l10n/he/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: he\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "סגירה"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "שיתוף"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "אישור"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "העלאה"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "סיסמא"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/hi.php
index 78de12f,0000000..11560de
mode 100644,000000..100644
--- a/apps/documents/l10n/hi.php
+++ b/apps/documents/l10n/hi.php
@@@ -1,13 -1,0 +1,14 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "दस्तावेज़ ",
 +"Close" => "बंद करें ",
 +"Share" => "साझा करें",
 +"Failed to load documents." => "दस्तावेज़ लोड करने में असफल रहा।  ",
 +"Sent" => "भेज दिया गया ",
 +"Declined" => "अस्वीकार कर दिया गया ",
 +"Accepted" => "स्वीकार कर लिया गया ",
 +"Incoming" => "आने वाला/वाली ",
 +"Upload" => "अपलोड ",
++"Password" => "पासवर्ड",
 +"Advanced feature-set" => "उन्नत विशेषता-सेट ",
 +"(Unstable)" => "(अस्थायी) "
 +);
diff --cc apps/documents/l10n/hi/documents.po
index 3b8b60c,0000000..b9f3234
mode 100644,000000..100644
--- a/apps/documents/l10n/hi/documents.po
+++ b/apps/documents/l10n/hi/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mkghai35 <mkghai35 at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: hi\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "दस्तावेज़ "
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "बंद करें "
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "साझा करें"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "दस्तावेज़ लोड करने में असफल रहा।  "
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "भेज दिया गया "
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "अस्वीकार कर दिया गया "
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "स्वीकार कर लिया गया "
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "आने वाला/वाली "
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "अपलोड "
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "पासवर्ड"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "उन्नत विशेषता-सेट "
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(अस्थायी) "
diff --cc apps/documents/l10n/hr.php
index e30d620,0000000..b0712fa
mode 100644,000000..100644
--- a/apps/documents/l10n/hr.php
+++ b/apps/documents/l10n/hr.php
@@@ -1,5 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Zatvori",
 +"Share" => "Podijeli",
- "Upload" => "Učitaj"
++"Upload" => "Učitaj",
++"Password" => "Lozinka"
 +);
diff --cc apps/documents/l10n/hr/documents.po
index 8acc1bc,0000000..cd6ff4c
mode 100644,000000..100644
--- a/apps/documents/l10n/hr/documents.po
+++ b/apps/documents/l10n/hr/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: hr\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zatvori"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Podijeli"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Učitaj"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Lozinka"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/hu_HU.php
index b8e571d,0000000..b4cd482
mode 100644,000000..100644
--- a/apps/documents/l10n/hu_HU.php
+++ b/apps/documents/l10n/hu_HU.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumentumok",
 +"Close" => "Bezárás",
 +"Share" => "Megosztás",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Ha elnavigálsz az oldalról miközben Szerkesztés módban vagy akkor lehet lesznek elvesztett adatok amiket még nem mentettél el. Ajánlott inkább a 'Bezár' gombbal befejezni az oldal szerkesztését.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "A dokumentum betöltése sikertelen. Próbáld külső odt szerkeszővel megnyitni. Ez hiba jelentheti azt, hogy már nincs megosztva vagy már törölve lett a dokumentum.",
 +"Failed to load documents." => "A dokumentum betőltése sikertelen",
 +"No documents are found. Please upload or create a document!" => "Nem található egy dokumentum sem. Tölts fel vagy hozz létre egy dokumentumot.",
++"OK" => "OK",
 +"Sent" => "Elküldött",
 +"Declined" => "Elutasított",
 +"Accepted" => "Elfogadott",
 +"Incoming" => "Beérkező",
 +"Upload" => "Feltöltés",
 +"Save new documents to" => "Az új dokumentumokat ide mentese:",
++"Wrong password. Please retry." => "Hibás jelszó. Próbálkozzon újra!",
++"Password" => "Jelszó",
 +"Please enter your nickname" => "Kérem adja meg a becenevét (nick)",
 +"Join" => "Belépés",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Ez a link vagy lejárt vagy sohasem létezett. Kérdezd meg azt aki megosztotta veled ezt a linket.",
 +"Advanced feature-set" => "Haladó funkciók",
 +"(Unstable)" => "(nem stabil)"
 +);
diff --cc apps/documents/l10n/hu_HU/documents.po
index 85e8eab,0000000..5070d63
mode 100644,000000..100644
--- a/apps/documents/l10n/hu_HU/documents.po
+++ b/apps/documents/l10n/hu_HU/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# sherlock79 <david at interpont.hu>, 2013
 +# ebela <bela at dandre.hu>, 2013
 +# Laszlo Tornoci <torlasz at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: hu_HU\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumentumok"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Bezárás"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Megosztás"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Ha elnavigálsz az oldalról miközben Szerkesztés módban vagy akkor lehet lesznek elvesztett adatok amiket még nem mentettél el. Ajánlott inkább a 'Bezár' gombbal befejezni az oldal szerkesztését."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "A dokumentum betöltése sikertelen. Próbáld külső odt szerkeszővel megnyitni. Ez hiba jelentheti azt, hogy már nincs megosztva vagy már törölve lett a dokumentum."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "A dokumentum betőltése sikertelen"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Nem található egy dokumentum sem. Tölts fel vagy hozz létre egy dokumentumot."
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Elküldött"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Elutasított"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Elfogadott"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Beérkező"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Feltöltés"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Az új dokumentumokat ide mentese:"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Hibás jelszó. Próbálkozzon újra!"
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Jelszó"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Kérem adja meg a becenevét (nick)"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Belépés"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Ez a link vagy lejárt vagy sohasem létezett. Kérdezd meg azt aki megosztotta veled ezt a linket."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Haladó funkciók"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(nem stabil)"
diff --cc apps/documents/l10n/hy/documents.po
index 2eb4180,0000000..d6780e9
mode 100644,000000..100644
--- a/apps/documents/l10n/hy/documents.po
+++ b/apps/documents/l10n/hy/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: hy\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Փակել"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ia.php
index 81904f5,0000000..ab3cef2
mode 100644,000000..100644
--- a/apps/documents/l10n/ia.php
+++ b/apps/documents/l10n/ia.php
@@@ -1,5 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Clauder",
 +"Share" => "Compartir",
- "Upload" => "Incargar"
++"Upload" => "Incargar",
++"Password" => "Contrasigno"
 +);
diff --cc apps/documents/l10n/ia/documents.po
index 5c88427,0000000..d299ca2
mode 100644,000000..100644
--- a/apps/documents/l10n/ia/documents.po
+++ b/apps/documents/l10n/ia/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ia\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Clauder"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Compartir"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Incargar"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Contrasigno"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/id.php
index bc2a183,0000000..997f9f5
mode 100644,000000..100644
--- a/apps/documents/l10n/id.php
+++ b/apps/documents/l10n/id.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Tutup",
 +"Share" => "Bagikan",
- "Upload" => "Unggah"
++"OK" => "Oke",
++"Upload" => "Unggah",
++"Password" => "Sandi"
 +);
diff --cc apps/documents/l10n/id/documents.po
index 6118d8d,0000000..e7d3149
mode 100644,000000..100644
--- a/apps/documents/l10n/id/documents.po
+++ b/apps/documents/l10n/id/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: id\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Tutup"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Bagikan"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Oke"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Unggah"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Sandi"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/is.php
index 664e010,0000000..9f8c75c
mode 100644,000000..100644
--- a/apps/documents/l10n/is.php
+++ b/apps/documents/l10n/is.php
@@@ -1,5 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Loka",
 +"Share" => "Deila",
- "Upload" => "Senda inn"
++"Upload" => "Senda inn",
++"Password" => "Lykilorð"
 +);
diff --cc apps/documents/l10n/is/documents.po
index 413b4cb,0000000..3d6af8a
mode 100644,000000..100644
--- a/apps/documents/l10n/is/documents.po
+++ b/apps/documents/l10n/is/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: is\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Loka"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Deila"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Senda inn"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Lykilorð"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/it.php
index 468c52a,0000000..91f8e6c
mode 100644,000000..100644
--- a/apps/documents/l10n/it.php
+++ b/apps/documents/l10n/it.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documenti",
 +"Close" => "Chiudi",
 +"Share" => "Condividi",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Lasciare questa pagina nella modalità potrebbe causare il mancato salvataggio dei dati. Si consiglia invece di utilizzare il pulsante 'Chiudi'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Caricamento del documento non riuscito. Controlla se può essere aperto con un editor odt esterno. Ciò può anche significare che è stato tolto dalla condivisione o che è stato eliminato recentemente.",
 +"Failed to load documents." => "Caricamento documenti non riuscito.",
 +"No documents are found. Please upload or create a document!" => "Nessun documento trovato. Carica o crea un documento!",
++"OK" => "OK",
 +"Sent" => "Inviato",
 +"Declined" => "Rifiutato",
 +"Accepted" => "Accettato",
 +"Incoming" => "In arrivo",
 +"Upload" => "Carica",
 +"Save new documents to" => "Salva i nuovi documenti in",
++"Wrong password. Please retry." => "Password errata. Riprovi per favore.",
++"Password" => "Password",
 +"Please enter your nickname" => "Inserisci il tuo pseudonimo",
 +"Join" => "Entra",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Questo collegamento è scaduto o non è mai esistito. Contatta la persona che lo ha condiviso per i dettagli.",
 +"Advanced feature-set" => "Funzionalità avanzate",
 +"(Unstable)" => "(Non stabile)"
 +);
diff --cc apps/documents/l10n/it/documents.po
index 332a4cd,0000000..a00c6d9
mode 100644,000000..100644
--- a/apps/documents/l10n/it/documents.po
+++ b/apps/documents/l10n/it/documents.po
@@@ -1,112 -1,0 +1,301 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# F0ca <staffhabbfoca at live.it>, 2013
++# ogasser, 2013
 +# polxmod <paolo.velati at gmail.com>, 2013
 +# Vincenzo Reale <vinx.reale at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: it\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documenti"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Chiudi"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Condividi"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Lasciare questa pagina nella modalità potrebbe causare il mancato salvataggio dei dati. Si consiglia invece di utilizzare il pulsante 'Chiudi'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Caricamento del documento non riuscito. Controlla se può essere aperto con un editor odt esterno. Ciò può anche significare che è stato tolto dalla condivisione o che è stato eliminato recentemente."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Caricamento documenti non riuscito."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Nessun documento trovato. Carica o crea un documento!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Inviato"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Rifiutato"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Accettato"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "In arrivo"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Carica"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Salva i nuovi documenti in"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Password errata. Riprovi per favore."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Password"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Inserisci il tuo pseudonimo"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Entra"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Questo collegamento è scaduto o non è mai esistito. Contatta la persona che lo ha condiviso per i dettagli."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Funzionalità avanzate"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Non stabile)"
diff --cc apps/documents/l10n/ja_JP.php
index e8ca139,0000000..166c1aa
mode 100644,000000..100644
--- a/apps/documents/l10n/ja_JP.php
+++ b/apps/documents/l10n/ja_JP.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "ドキュメント",
 +"Close" => "閉じる",
 +"Share" => "共有",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "このページを編集モードのままにしておくと、保存されないデータが出てきます。その代わりに「閉じる」ボタンを使うことをお勧めします。",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "ドキュメントの読み込みに失敗。外部の odtエディターで開けるかどうか確認してください。これは、ドキュメントが最近、非共有になっているか削除されているのかもしれません。",
 +"Failed to load documents." => "ドキュメントのロードに失敗しました。",
 +"No documents are found. Please upload or create a document!" => "ドキュメントはありません。アップロードするか、作成してください。",
++"OK" => "OK",
 +"Sent" => "送信",
 +"Declined" => "拒否されました",
 +"Accepted" => "受け付けました",
 +"Incoming" => "受信箱",
 +"Upload" => "アップロード",
 +"Save new documents to" => "ドキュメントを新しく保存する",
++"Wrong password. Please retry." => "間違ったパスワード。もう一度入力してください。",
++"Password" => "パスワード",
 +"Please enter your nickname" => "ニックネームを入力してください",
 +"Join" => "参加",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "このリンクは期限が切れているか、すでに存在しません。詳細は、それを共有した方に連絡していください。",
 +"Advanced feature-set" => "高度な機能セット",
 +"(Unstable)" => "(非安定的)"
 +);
diff --cc apps/documents/l10n/ja_JP/documents.po
index 56a1e1c,0000000..5a3b40b
mode 100644,000000..100644
--- a/apps/documents/l10n/ja_JP/documents.po
+++ b/apps/documents/l10n/ja_JP/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Daisuke Deguchi <ddeguchi at nagoya-u.jp>, 2013
 +# plazmism <gomidori at live.jp>, 2013
 +# tt yn <tetuyano+transi at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ja_JP\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "ドキュメント"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "閉じる"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "共有"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "このページを編集モードのままにしておくと、保存されないデータが出てきます。その代わりに「閉じる」ボタンを使うことをお勧めします。"
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "ドキュメントの読み込みに失敗。外部の odtエディターで開けるかどうか確認してください。これは、ドキュメントが最近、非共有になっているか削除されているのかもしれません。"
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "ドキュメントのロードに失敗しました。"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "ドキュメントはありません。アップロードするか、作成してください。"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "送信"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "拒否されました"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "受け付けました"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "受信箱"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "アップロード"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "ドキュメントを新しく保存する"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "間違ったパスワード。もう一度入力してください。"
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "パスワード"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "ニックネームを入力してください"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "参加"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "このリンクは期限が切れているか、すでに存在しません。詳細は、それを共有した方に連絡していください。"
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "高度な機能セット"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(非安定的)"
diff --cc apps/documents/l10n/ka.php
index 0000000,0000000..63425e5
new file mode 100644
--- /dev/null
+++ b/apps/documents/l10n/ka.php
@@@ -1,0 -1,0 +1,3 @@@
++<?php $TRANSLATIONS = array(
++"Password" => "პაროლი"
++);
diff --cc apps/documents/l10n/ka/documents.po
index afd6913,0000000..8e4f027
mode 100644,000000..100644
--- a/apps/documents/l10n/ka/documents.po
+++ b/apps/documents/l10n/ka/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Georgian (http://www.transifex.com/projects/p/owncloud/language/ka/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ka\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "პაროლი"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ka_GE.php
index b19266a,0000000..7b34f9a
mode 100644,000000..100644
--- a/apps/documents/l10n/ka_GE.php
+++ b/apps/documents/l10n/ka_GE.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "დახურვა",
 +"Share" => "გაზიარება",
- "Upload" => "ატვირთვა"
++"OK" => "დიახ",
++"Upload" => "ატვირთვა",
++"Password" => "პაროლი"
 +);
diff --cc apps/documents/l10n/ka_GE/documents.po
index 0ac5088,0000000..ed6d7d5
mode 100644,000000..100644
--- a/apps/documents/l10n/ka_GE/documents.po
+++ b/apps/documents/l10n/ka_GE/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ka_GE\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "დახურვა"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "გაზიარება"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "დიახ"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "ატვირთვა"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "პაროლი"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/km/documents.po
index edeb7af,0000000..fffe2b9
mode 100644,000000..100644
--- a/apps/documents/l10n/km/documents.po
+++ b/apps/documents/l10n/km/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Khmer (http://www.transifex.com/projects/p/owncloud/language/km/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: km\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/kn/documents.po
index 13fcd30,0000000..63403db
mode 100644,000000..100644
--- a/apps/documents/l10n/kn/documents.po
+++ b/apps/documents/l10n/kn/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Kannada (http://www.transifex.com/projects/p/owncloud/language/kn/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: kn\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ko.php
index f1df6d4,0000000..800eb2e
mode 100644,000000..100644
--- a/apps/documents/l10n/ko.php
+++ b/apps/documents/l10n/ko.php
@@@ -1,11 -1,0 +1,13 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "문서",
 +"Close" => "닫기",
 +"Share" => "공유",
 +"Failed to load documents." => "를 불러오는데 실패했습니다",
++"OK" => "확인",
 +"Sent" => "보내기",
 +"Declined" => "거절됨",
 +"Accepted" => "허",
 +"Upload" => "업로드",
++"Password" => "암호",
 +"Join" => "참여하기"
 +);
diff --cc apps/documents/l10n/ko/documents.po
index 78e0355,0000000..7bbb876
mode 100644,000000..100644
--- a/apps/documents/l10n/ko/documents.po
+++ b/apps/documents/l10n/ko/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# 책읽는달팽 <bjh13579 at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ko\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "문서"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "닫기"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "공유"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "를 불러오는데 실패했습니다"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "확인"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "보내기"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "거절됨"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "허"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "업로드"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "암호"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "참여하기"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ku_IQ.php
index 0c61c98,0000000..67b7839
mode 100644,000000..100644
--- a/apps/documents/l10n/ku_IQ.php
+++ b/apps/documents/l10n/ku_IQ.php
@@@ -1,5 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "داخستن",
 +"Share" => "هاوبەشی کردن",
- "Upload" => "بارکردن"
++"Upload" => "بارکردن",
++"Password" => "وشەی تێپەربو"
 +);
diff --cc apps/documents/l10n/ku_IQ/documents.po
index ba5c2c9,0000000..c2f8933
mode 100644,000000..100644
--- a/apps/documents/l10n/ku_IQ/documents.po
+++ b/apps/documents/l10n/ku_IQ/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ku_IQ\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "داخستن"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "هاوبەشی کردن"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "بارکردن"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "وشەی تێپەربو"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/lb.php
index 79b4e28,0000000..a17d1ee
mode 100644,000000..100644
--- a/apps/documents/l10n/lb.php
+++ b/apps/documents/l10n/lb.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Zoumaachen",
 +"Share" => "Deelen",
- "Upload" => "Eroplueden"
++"OK" => "OK",
++"Upload" => "Eroplueden",
++"Password" => "Passwuert"
 +);
diff --cc apps/documents/l10n/lb/documents.po
index ae5105d,0000000..037331e
mode 100644,000000..100644
--- a/apps/documents/l10n/lb/documents.po
+++ b/apps/documents/l10n/lb/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: lb\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zoumaachen"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Deelen"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Eroplueden"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Passwuert"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/lt_LT.php
index b87d6dd,0000000..7e2a4fa
mode 100644,000000..100644
--- a/apps/documents/l10n/lt_LT.php
+++ b/apps/documents/l10n/lt_LT.php
@@@ -1,20 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumentacija",
 +"Close" => "Užverti",
 +"Share" => "Dalintis",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Išėjimas iš šio puslapio redagavimo veiksenoje gali lemti duomenų neišsaugojimą. Rekomenduojama naudoti „Uždaryti“ mygtuką.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Nepavyko įkelti šio dokumento. Prašome patikrinti ar galima jį atverti su išoriniu odt redaktoriumi. Tai gali reikšti, kad jis nebebendrinamas arba neseniai pašalintas.",
 +"Failed to load documents." => "Nepavyko įkelti dokumentų.",
 +"No documents are found. Please upload or create a document!" => "Nerasta dokumentų. Prašome įkelti ar sukurti dokumentą!",
++"OK" => "Gerai",
 +"Sent" => "Išsiųsta",
 +"Declined" => "Atmesta",
 +"Accepted" => "Priimta",
 +"Incoming" => "Įeinantys",
 +"Upload" => "Įkelti",
 +"Save new documents to" => "Saugoti naujus dokumentus į",
++"Password" => "Slaptažodis",
 +"Please enter your nickname" => "Įveskite savo slapyvardį",
 +"Join" => "Prisijungti",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Šios nuorodos laikas baigėsi, arba ji neegzistavo. Prašome susisiekti su asmeniu pasidalinusiu ja su Jumis dėl informacijos.",
 +"Advanced feature-set" => "Išsamesni funkcijų nustatymai",
 +"(Unstable)" => "(Nestabilus)"
 +);
diff --cc apps/documents/l10n/lt_LT/documents.po
index 29f6ac5,0000000..09cf66f
mode 100644,000000..100644
--- a/apps/documents/l10n/lt_LT/documents.po
+++ b/apps/documents/l10n/lt_LT/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Dr. ROX <to.dr.rox at gmail.com>, 2013
 +# Liudas Ališauskas <liudas.alisauskas at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: lt_LT\n"
 +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumentacija"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Užverti"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Dalintis"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Išėjimas iš šio puslapio redagavimo veiksenoje gali lemti duomenų neišsaugojimą. Rekomenduojama naudoti „Uždaryti“ mygtuką."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Nepavyko įkelti šio dokumento. Prašome patikrinti ar galima jį atverti su išoriniu odt redaktoriumi. Tai gali reikšti, kad jis nebebendrinamas arba neseniai pašalintas."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Nepavyko įkelti dokumentų."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Nerasta dokumentų. Prašome įkelti ar sukurti dokumentą!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Gerai"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Išsiųsta"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Atmesta"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Priimta"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Įeinantys"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Įkelti"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Saugoti naujus dokumentus į"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Slaptažodis"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Įveskite savo slapyvardį"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Prisijungti"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Šios nuorodos laikas baigėsi, arba ji neegzistavo. Prašome susisiekti su asmeniu pasidalinusiu ja su Jumis dėl informacijos."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Išsamesni funkcijų nustatymai"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Nestabilus)"
diff --cc apps/documents/l10n/lv.php
index f802abd,0000000..9a8a495
mode 100644,000000..100644
--- a/apps/documents/l10n/lv.php
+++ b/apps/documents/l10n/lv.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Aizvērt",
 +"Share" => "Dalīties",
- "Upload" => "Augšupielādēt"
++"OK" => "Labi",
++"Upload" => "Augšupielādēt",
++"Password" => "Parole"
 +);
diff --cc apps/documents/l10n/lv/documents.po
index 53d619c,0000000..2d40167
mode 100644,000000..100644
--- a/apps/documents/l10n/lv/documents.po
+++ b/apps/documents/l10n/lv/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: lv\n"
 +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Aizvērt"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Dalīties"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Labi"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Augšupielādēt"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Parole"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/mk.php
index b202737,0000000..3d92a07
mode 100644,000000..100644
--- a/apps/documents/l10n/mk.php
+++ b/apps/documents/l10n/mk.php
@@@ -1,19 -1,0 +1,21 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Документи",
 +"Close" => "Затвори",
 +"Share" => "Сподели",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Оставањето на оваа страница во мод за уредување може да предизивка губиток на неснимените податоци. Се препорачува да се користи копчето 'Затвори'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Неуспешно вчитување на документот. Ве молиме да проверите дали може да се отвори со надворешен odt уредувач. Ова исто така може да значи дека истиот бил одстранет од споделување или пак претходно бил избришан.",
 +"Failed to load documents." => "Не успеав да го вчитам документот",
 +"No documents are found. Please upload or create a document!" => "Не се пронајдени документи. Ве молиме ставете или креирајте документ!",
++"OK" => "Во ред",
 +"Sent" => "Испратен",
 +"Declined" => "Одбиен",
 +"Accepted" => "Прифатен",
 +"Incoming" => "Надоаѓачки",
 +"Upload" => "Подигни",
 +"Save new documents to" => "Сними го новиот документ во",
++"Password" => "Лозинка",
 +"Join" => "Спои",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Овој линк истекол или никогаш не постоел. Ве молиме контактирајте го корисникот кој го споделил линкот со вас за повеќе детали.",
 +"Advanced feature-set" => "Напредни опции",
 +"(Unstable)" => "(Нестабилен)"
 +);
diff --cc apps/documents/l10n/mk/documents.po
index 16cd82c,0000000..bba744d
mode 100644,000000..100644
--- a/apps/documents/l10n/mk/documents.po
+++ b/apps/documents/l10n/mk/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# miroj <jmiroslav at softhome.net>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: mk\n"
 +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Документи"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Затвори"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Сподели"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Оставањето на оваа страница во мод за уредување може да предизивка губиток на неснимените податоци. Се препорачува да се користи копчето 'Затвори'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Неуспешно вчитување на документот. Ве молиме да проверите дали може да се отвори со надворешен odt уредувач. Ова исто така може да значи дека истиот бил одстранет од споделување или пак претходно бил избришан."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Не успеав да го вчитам документот"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Не се пронајдени документи. Ве молиме ставете или креирајте документ!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Во ред"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Испратен"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Одбиен"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Прифатен"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Надоаѓачки"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Подигни"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Сними го новиот документ во"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Лозинка"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Спои"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Овој линк истекол или никогаш не постоел. Ве молиме контактирајте го корисникот кој го споделил линкот со вас за повеќе детали."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Напредни опции"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Нестабилен)"
diff --cc apps/documents/l10n/ml_IN/documents.po
index 493fb94,0000000..c2aa6ce
mode 100644,000000..100644
--- a/apps/documents/l10n/ml_IN/documents.po
+++ b/apps/documents/l10n/ml_IN/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Malayalam (India) (http://www.transifex.com/projects/p/owncloud/language/ml_IN/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ml_IN\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ms_MY.php
index de66b5a,0000000..21a9c3f
mode 100644,000000..100644
--- a/apps/documents/l10n/ms_MY.php
+++ b/apps/documents/l10n/ms_MY.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Tutup",
 +"Share" => "Kongsi",
- "Upload" => "Muat naik"
++"OK" => "OK",
++"Upload" => "Muat naik",
++"Password" => "Kata laluan"
 +);
diff --cc apps/documents/l10n/ms_MY/documents.po
index 5d57063,0000000..d7d485d
mode 100644,000000..100644
--- a/apps/documents/l10n/ms_MY/documents.po
+++ b/apps/documents/l10n/ms_MY/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ms_MY\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Tutup"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Kongsi"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Muat naik"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Kata laluan"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/my_MM.php
index 0000000,0000000..a15edbe
new file mode 100644
--- /dev/null
+++ b/apps/documents/l10n/my_MM.php
@@@ -1,0 -1,0 +1,3 @@@
++<?php $TRANSLATIONS = array(
++"Password" => "စကားဝှက်"
++);
diff --cc apps/documents/l10n/my_MM/documents.po
index 581a197,0000000..fae0d75
mode 100644,000000..100644
--- a/apps/documents/l10n/my_MM/documents.po
+++ b/apps/documents/l10n/my_MM/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Burmese (Myanmar) (http://www.transifex.com/projects/p/owncloud/language/my_MM/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: my_MM\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "စကားဝှက်"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/nb_NO.php
index 4d80e89,0000000..6447bdc
mode 100644,000000..100644
--- a/apps/documents/l10n/nb_NO.php
+++ b/apps/documents/l10n/nb_NO.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Lukk",
 +"Share" => "Del",
- "Upload" => "Last opp"
++"OK" => "OK",
++"Upload" => "Last opp",
++"Password" => "Passord"
 +);
diff --cc apps/documents/l10n/nb_NO/documents.po
index 63cd81b,0000000..9868170
mode 100644,000000..100644
--- a/apps/documents/l10n/nb_NO/documents.po
+++ b/apps/documents/l10n/nb_NO/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nb_NO\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Lukk"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Del"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Last opp"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Passord"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/nds/documents.po
index 1857561,0000000..f854a52
mode 100644,000000..100644
--- a/apps/documents/l10n/nds/documents.po
+++ b/apps/documents/l10n/nds/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Low German (http://www.transifex.com/projects/p/owncloud/language/nds/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nds\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ne/documents.po
index d6a54d2,0000000..d12ab38
mode 100644,000000..100644
--- a/apps/documents/l10n/ne/documents.po
+++ b/apps/documents/l10n/ne/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Nepali (http://www.transifex.com/projects/p/owncloud/language/ne/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ne\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/nl.php
index 256def5,0000000..58e5dd8
mode 100644,000000..100644
--- a/apps/documents/l10n/nl.php
+++ b/apps/documents/l10n/nl.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documenten",
 +"Close" => "Sluiten",
 +"Share" => "Delen",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Deze pagina open laten in de Editor kan resulteren in niet opslaan. Geadviseerd wordt om de 'Sluiten' knop te gebruiken.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Kon dit document niet laden. Ga na of het met een externe odt editor wel kan worden geopend. Het kan zijn dat het niet meer is gedeeld of dat het recent is verwijderd.",
 +"Failed to load documents." => "Kon documenten niet laden.",
 +"No documents are found. Please upload or create a document!" => "Geen documenten gevonden. Upload of maak een document!",
++"OK" => "OK",
 +"Sent" => "Verzonden",
 +"Declined" => "Afgewezen",
 +"Accepted" => "Geaccepteerd",
 +"Incoming" => "Inkomend",
 +"Upload" => "Uploaden",
 +"Save new documents to" => "Bewaar nieuwe documenten  in",
++"Wrong password. Please retry." => "Onjuist wachtwoord. Probeer opnieuw.",
++"Password" => "Wachtwoord",
 +"Please enter your nickname" => "Geef uw roepnaam op",
 +"Join" => "Meedoen",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "De link is vervallen of heeft nooit bestaan. Neem contact op met de persoon die het deelde voor de details.",
 +"Advanced feature-set" => "Geavanceerde functies",
 +"(Unstable)" => "(Onstabiel)"
 +);
diff --cc apps/documents/l10n/nl/documents.po
index 0b623ee,0000000..6d93c5f
mode 100644,000000..100644
--- a/apps/documents/l10n/nl/documents.po
+++ b/apps/documents/l10n/nl/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# André Koot <meneer at tken.net>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nl\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documenten"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Sluiten"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Delen"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Deze pagina open laten in de Editor kan resulteren in niet opslaan. Geadviseerd wordt om de 'Sluiten' knop te gebruiken."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Kon dit document niet laden. Ga na of het met een externe odt editor wel kan worden geopend. Het kan zijn dat het niet meer is gedeeld of dat het recent is verwijderd."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Kon documenten niet laden."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Geen documenten gevonden. Upload of maak een document!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Verzonden"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Afgewezen"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Geaccepteerd"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Inkomend"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Uploaden"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Bewaar nieuwe documenten  in"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Onjuist wachtwoord. Probeer opnieuw."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Wachtwoord"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Geef uw roepnaam op"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Meedoen"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "De link is vervallen of heeft nooit bestaan. Neem contact op met de persoon die het deelde voor de details."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Geavanceerde functies"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Onstabiel)"
diff --cc apps/documents/l10n/nn_NO.php
index b60b709,0000000..6d22916
mode 100644,000000..100644
--- a/apps/documents/l10n/nn_NO.php
+++ b/apps/documents/l10n/nn_NO.php
@@@ -1,15 -1,0 +1,17 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokument",
 +"Close" => "Lukk",
 +"Share" => "Del",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Klarte ikkje å opna dette dokumentet. Ver venleg og sjekk om det kan opnast med eit eksternt ODT-skriveprogram. Det kan òg henda at dokumentet har blitt udelt eller sletta nyleg.",
 +"Failed to load documents." => "Klarte ikkje å lasta dokumenta.",
 +"No documents are found. Please upload or create a document!" => "Fann ingen dokument. Last opp eller opprett eit dokument!",
++"OK" => "Greitt",
 +"Sent" => "Sendt",
 +"Declined" => "Avvist",
 +"Accepted" => "Godtatt",
 +"Incoming" => "Inngåande",
 +"Upload" => "Last opp",
++"Password" => "Passord",
 +"Advanced feature-set" => "Avanserte funksjonar",
 +"(Unstable)" => "(Ustabil)"
 +);
diff --cc apps/documents/l10n/nn_NO/documents.po
index bae3298,0000000..4817034
mode 100644,000000..100644
--- a/apps/documents/l10n/nn_NO/documents.po
+++ b/apps/documents/l10n/nn_NO/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nn_NO\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokument"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Lukk"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Del"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Klarte ikkje å opna dette dokumentet. Ver venleg og sjekk om det kan opnast med eit eksternt ODT-skriveprogram. Det kan òg henda at dokumentet har blitt udelt eller sletta nyleg."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Klarte ikkje å lasta dokumenta."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Fann ingen dokument. Last opp eller opprett eit dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Greitt"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Sendt"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Avvist"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Godtatt"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Inngåande"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Last opp"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Passord"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Avanserte funksjonar"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Ustabil)"
diff --cc apps/documents/l10n/nqo/documents.po
index 2da8393,0000000..9695b4d
mode 100644,000000..100644
--- a/apps/documents/l10n/nqo/documents.po
+++ b/apps/documents/l10n/nqo/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: N'ko (http://www.transifex.com/projects/p/owncloud/language/nqo/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: nqo\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/oc.php
index 2c057e0,0000000..a8e36f6
mode 100644,000000..100644
--- a/apps/documents/l10n/oc.php
+++ b/apps/documents/l10n/oc.php
@@@ -1,4 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Share" => "Parteja",
- "Upload" => "Amontcarga"
++"OK" => "D'accòrdi",
++"Upload" => "Amontcarga",
++"Password" => "Senhal"
 +);
diff --cc apps/documents/l10n/oc/documents.po
index 3df897a,0000000..4b8add0
mode 100644,000000..100644
--- a/apps/documents/l10n/oc/documents.po
+++ b/apps/documents/l10n/oc/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: oc\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Parteja"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "D'accòrdi"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Amontcarga"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Senhal"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/pa.php
index f5b84ff,0000000..2a5799e
mode 100644,000000..100644
--- a/apps/documents/l10n/pa.php
+++ b/apps/documents/l10n/pa.php
@@@ -1,4 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Share" => "ਸਾਂਝਾ ਕਰੋ",
- "Upload" => "ਅੱਪਲੋਡ"
++"OK" => "ਠੀਕ ਹੈ",
++"Upload" => "ਅੱਪਲੋਡ",
++"Password" => "ਪਾਸਵਰ"
 +);
diff --cc apps/documents/l10n/pa/documents.po
index 057ac03,0000000..77d4fdb
mode 100644,000000..100644
--- a/apps/documents/l10n/pa/documents.po
+++ b/apps/documents/l10n/pa/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/projects/p/owncloud/language/pa/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pa\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "ਸਾਂਝਾ ਕਰੋ"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "ਠੀਕ ਹੈ"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "ਅੱਪਲੋਡ"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "ਪਾਸਵਰ"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/pl.php
index c4cff45,0000000..654fb89
mode 100644,000000..100644
--- a/apps/documents/l10n/pl.php
+++ b/apps/documents/l10n/pl.php
@@@ -1,20 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumenty",
 +"Close" => "Zamknij",
 +"Share" => "Udostępnij",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Opuszczając tę stronę w trybie Editor może spowodować niezapisanie danych. Zaleca się zamiast tego użyć przycisk 'Zamknij'.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Nie można załadować tego dokument. Proszę sprawdzić, czy można go otworzyć w edytorze zewnętrznym odt. Może to również oznaczać  nieudostępniony dokument lub jest już usunięty.",
 +"Failed to load documents." => "Nie można wczytać dokumentów.",
 +"No documents are found. Please upload or create a document!" => "Nie znaleziono dokumentów. Proszę załaduj lub stwórz dokument!",
++"OK" => "OK",
 +"Sent" => "Wyślij",
 +"Declined" => "Nie zaakceptowane",
 +"Accepted" => "Zaakceptowane",
 +"Incoming" => "Przychodzące",
 +"Upload" => "Wyślij",
 +"Save new documents to" => "Zapisz nowy dokument do",
++"Password" => "Hasło",
 +"Please enter your nickname" => "Wpisz swoja nazwę",
 +"Join" => "Dołącz",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Ten link już wygasła lub nigdy nie istniał. Proszę skontaktuj się z osobą, która udostępniła ci link, aby uzyskać szczegółowe informacje.",
 +"Advanced feature-set" => "Zaawansowany zestaw funkcji",
 +"(Unstable)" => "(Niestabilne)"
 +);
diff --cc apps/documents/l10n/pl/documents.po
index 7688c7f,0000000..c9f4cc6
mode 100644,000000..100644
--- a/apps/documents/l10n/pl/documents.po
+++ b/apps/documents/l10n/pl/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Cyryl Sochacki <cyrylsochacki at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pl\n"
 +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumenty"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zamknij"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Udostępnij"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Opuszczając tę stronę w trybie Editor może spowodować niezapisanie danych. Zaleca się zamiast tego użyć przycisk 'Zamknij'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Nie można załadować tego dokument. Proszę sprawdzić, czy można go otworzyć w edytorze zewnętrznym odt. Może to również oznaczać  nieudostępniony dokument lub jest już usunięty."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Nie można wczytać dokumentów."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Nie znaleziono dokumentów. Proszę załaduj lub stwórz dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Wyślij"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Nie zaakceptowane"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Zaakceptowane"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Przychodzące"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Wyślij"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Zapisz nowy dokument do"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Hasło"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Wpisz swoja nazwę"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Dołącz"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Ten link już wygasła lub nigdy nie istniał. Proszę skontaktuj się z osobą, która udostępniła ci link, aby uzyskać szczegółowe informacje."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Zaawansowany zestaw funkcji"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Niestabilne)"
diff --cc apps/documents/l10n/pt_BR.php
index 4dcd88b,0000000..05b369a
mode 100644,000000..100644
--- a/apps/documents/l10n/pt_BR.php
+++ b/apps/documents/l10n/pt_BR.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documentos",
 +"Close" => "Fechar",
 +"Share" => "Compartilhar",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Deixando esta página aberta para o modo de Edição pode causar o não salvamento de dados. É recomendado usar o botão \"Fechar\".",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Falha ao carregar o documento. Por favor verifique se o arquivo derá ser aberto com um editor externo odt. Isso também pode significar que o arquivo foi descompartilhado ou eliminado recentemente.",
 +"Failed to load documents." => "Falha ao carregar documentos.",
 +"No documents are found. Please upload or create a document!" => "Nenhum documento foi encontrado. Por favor envie ou crie um documento!",
++"OK" => "OK",
 +"Sent" => "Enviar",
 +"Declined" => "Declinado",
 +"Accepted" => "Aceito",
 +"Incoming" => "entrando",
 +"Upload" => "Upload",
 +"Save new documents to" => "Salvar o novo documento para",
++"Wrong password. Please retry." => "Senha errada. Por favor tente novamente.",
++"Password" => "Senha",
 +"Please enter your nickname" => "Por favor entre seu apelido",
 +"Join" => "Juntar",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Este link espirou ou numca existiu. Por favor faça contato com a pessoa que compartilhou este link com você para maiores detalhes.",
 +"Advanced feature-set" => "Avançado conjunto de funcionalidades",
 +"(Unstable)" => "(Instável)"
 +);
diff --cc apps/documents/l10n/pt_BR/documents.po
index d323dcf,0000000..0a063c7
mode 100644,000000..100644
--- a/apps/documents/l10n/pt_BR/documents.po
+++ b/apps/documents/l10n/pt_BR/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Flávio Veras <flaviove at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pt_BR\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documentos"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Fechar"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Compartilhar"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Deixando esta página aberta para o modo de Edição pode causar o não salvamento de dados. É recomendado usar o botão \"Fechar\"."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Falha ao carregar o documento. Por favor verifique se o arquivo derá ser aberto com um editor externo odt. Isso também pode significar que o arquivo foi descompartilhado ou eliminado recentemente."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Falha ao carregar documentos."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Nenhum documento foi encontrado. Por favor envie ou crie um documento!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Enviar"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Declinado"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Aceito"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "entrando"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Upload"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Salvar o novo documento para"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Senha errada. Por favor tente novamente."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Senha"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Por favor entre seu apelido"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Juntar"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Este link espirou ou numca existiu. Por favor faça contato com a pessoa que compartilhou este link com você para maiores detalhes."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Avançado conjunto de funcionalidades"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Instável)"
diff --cc apps/documents/l10n/pt_PT.php
index 2e60a1b,0000000..1ff8b2e
mode 100644,000000..100644
--- a/apps/documents/l10n/pt_PT.php
+++ b/apps/documents/l10n/pt_PT.php
@@@ -1,16 -1,0 +1,18 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Documentos",
 +"Close" => "Fechar",
 +"Share" => "Partilhar",
 +"Failed to load documents." => "O carregamento dos documentos falhou",
 +"No documents are found. Please upload or create a document!" => "Nenhum documento encontrado. Por favor carregue ou crie um documento!",
++"OK" => "OK",
 +"Sent" => "Enviado",
 +"Declined" => "Negado",
 +"Accepted" => "Aceite",
 +"Incoming" => "Chegada",
 +"Upload" => "Carregar",
 +"Save new documents to" => "Guardar novos documentos para",
++"Password" => "Palavra-passe",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Esta ligação expirou ou nunca existiu. Para mais detalhes, por favor contacte a pessoa que a partilhou consigo.",
 +"Advanced feature-set" => "Opções avançadas",
 +"(Unstable)" => "(Instável)"
 +);
diff --cc apps/documents/l10n/pt_PT/documents.po
index be7416a,0000000..8049e2c
mode 100644,000000..100644
--- a/apps/documents/l10n/pt_PT/documents.po
+++ b/apps/documents/l10n/pt_PT/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Duarte Velez Grilo <duartegrilo at gmail.com>, 2013
 +# Helder Meneses <helder.meneses at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: pt_PT\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Documentos"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Fechar"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Partilhar"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "O carregamento dos documentos falhou"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Nenhum documento encontrado. Por favor carregue ou crie um documento!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Enviado"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Negado"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Aceite"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Chegada"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Carregar"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Guardar novos documentos para"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Palavra-passe"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Esta ligação expirou ou nunca existiu. Para mais detalhes, por favor contacte a pessoa que a partilhou consigo."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Opções avançadas"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Instável)"
diff --cc apps/documents/l10n/ro.php
index becf6a9,0000000..f4371ad
mode 100644,000000..100644
--- a/apps/documents/l10n/ro.php
+++ b/apps/documents/l10n/ro.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Închide",
 +"Share" => "a imparti",
- "Upload" => "Încărcare"
++"OK" => "OK",
++"Upload" => "Încărcare",
++"Password" => "Parolă"
 +);
diff --cc apps/documents/l10n/ro/documents.po
index 5a97cb6,0000000..9144c68
mode 100644,000000..100644
--- a/apps/documents/l10n/ro/documents.po
+++ b/apps/documents/l10n/ro/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ro\n"
 +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Închide"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "a imparti"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Încărcare"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Parolă"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ru.php
index 013af57,0000000..88a3aad
mode 100644,000000..100644
--- a/apps/documents/l10n/ru.php
+++ b/apps/documents/l10n/ru.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Документы",
 +"Close" => "Закрыть",
 +"Share" => "Открыть доступ",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Если вы покинете эту страницу в режиме Редактора, то некоторые данные могут не сохраниться. Рекомендуется вместо этого использовать кнопку 'Закрыть'.",
- "Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Не удалось загрузить документ. Пожалуйста, проверьте не открыт ли документ с помощью внешнего odt редактора.",
++"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Не удалось загрузить документ. Пожалуйста, проверьте возможно ли открыть его с помощью обычного odt редактора.",
 +"Failed to load documents." => "Загрузка документов не удалась.",
- "No documents are found. Please upload or create a document!" => "Документы не найдены. Пожалуйста загрузите или создайте документ!",
++"No documents are found. Please upload or create a document!" => "Документов нет. Пожалуйста, загрузите или создайте документ!",
++"OK" => "ОК",
 +"Sent" => "Отправлено",
 +"Declined" => "Отклонено",
 +"Accepted" => "Принято",
 +"Incoming" => "Входящие",
 +"Upload" => "Загрузка",
 +"Save new documents to" => "Сохранять новые документы в",
++"Wrong password. Please retry." => "Неправильный пароль. Повторите попытку.",
++"Password" => "Пароль",
 +"Please enter your nickname" => "Пожалуйста, введите ваш псевдоним",
 +"Join" => "Присоединиться",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Срок действия ссылки истек, либо ссылка никогда не существовала. Пожалуйста, обратитесь к человеку, который поделился ею, за подробностями.",
 +"Advanced feature-set" => "Расширенные функции",
 +"(Unstable)" => "(Нестабильно)"
 +);
diff --cc apps/documents/l10n/ru/documents.po
index dca5dc9,0000000..c930d35
mode 100644,000000..100644
--- a/apps/documents/l10n/ru/documents.po
+++ b/apps/documents/l10n/ru/documents.po
@@@ -1,114 -1,0 +1,304 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Dmitry <linuxsquirrel.dev at gmail.com>, 2013
++# jekader <jekader at gmail.com>, 2013
 +# sk.avenger <sk.avenger at adygnet.ru>, 2013
++# VicDeo <victor.dubiniuk at gmail.com>, 2013
 +# 3lnc <slam.3lnc at live.com>, 2013
 +# vsapronov <vladimir.sapronov at gmail.com>, 2013
 +# navigator666 <yuriy.malyovaniy at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ru\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Документы"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Закрыть"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Открыть доступ"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Если вы покинете эту страницу в режиме Редактора, то некоторые данные могут не сохраниться. Рекомендуется вместо этого использовать кнопку 'Закрыть'."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
- msgstr "Не удалось загрузить документ. Пожалуйста, проверьте не открыт ли документ с помощью внешнего odt редактора."
++msgstr "Не удалось загрузить документ. Пожалуйста, проверьте возможно ли открыть его с помощью обычного odt редактора."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Загрузка документов не удалась."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
- msgstr "Документы не найдены. Пожалуйста загрузите или создайте документ!"
++msgstr "Документов нет. Пожалуйста, загрузите или создайте документ!"
++
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "ОК"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
 +
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Отправлено"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Отклонено"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Принято"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Входящие"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Загрузка"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Сохранять новые документы в"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Неправильный пароль. Повторите попытку."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Пароль"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Пожалуйста, введите ваш псевдоним"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Присоединиться"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Срок действия ссылки истек, либо ссылка никогда не существовала. Пожалуйста, обратитесь к человеку, который поделился ею, за подробностями."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Расширенные функции"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Нестабильно)"
diff --cc apps/documents/l10n/ru_RU.php
index 743b20e,0000000..8eda994
mode 100644,000000..100644
--- a/apps/documents/l10n/ru_RU.php
+++ b/apps/documents/l10n/ru_RU.php
@@@ -1,4 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Share" => "Сделать общим",
- "Upload" => "Загрузка"
++"OK" => "OK",
++"Upload" => "Загрузка",
++"Password" => "Пароль"
 +);
diff --cc apps/documents/l10n/ru_RU/documents.po
index 552190b,0000000..6d7c50b
mode 100644,000000..100644
--- a/apps/documents/l10n/ru_RU/documents.po
+++ b/apps/documents/l10n/ru_RU/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ru_RU\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Сделать общим"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Загрузка"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Пароль"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/si_LK.php
index af113ca,0000000..0888b9e
mode 100644,000000..100644
--- a/apps/documents/l10n/si_LK.php
+++ b/apps/documents/l10n/si_LK.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "වසන්න",
 +"Share" => "බෙදා හදා ගන්න",
- "Upload" => "උඩුගත කරන්න"
++"OK" => "හරි",
++"Upload" => "උඩුගත කරන්න",
++"Password" => "මුර පදය"
 +);
diff --cc apps/documents/l10n/si_LK/documents.po
index d841a7c,0000000..3719daf
mode 100644,000000..100644
--- a/apps/documents/l10n/si_LK/documents.po
+++ b/apps/documents/l10n/si_LK/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: si_LK\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "වසන්න"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "බෙදා හදා ගන්න"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "හරි"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "උඩුගත කරන්න"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "මුර පදය"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/sk/documents.po
index 4892a90,0000000..f727664
mode 100644,000000..100644
--- a/apps/documents/l10n/sk/documents.po
+++ b/apps/documents/l10n/sk/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sk\n"
 +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/sk_SK.php
index 8c3d681,0000000..aad6849
mode 100644,000000..100644
--- a/apps/documents/l10n/sk_SK.php
+++ b/apps/documents/l10n/sk_SK.php
@@@ -1,19 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokumenty",
 +"Close" => "Zavrieť",
 +"Share" => "Zdieľať",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Ponechaním tejto stránky v editačnom móde môže dôjsť k tomu, že sa zmeny neuložia. Doporučujeme použiť tlačidlo 'Zavrieť'",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Nepodarilo sa otvoriť tento dokument. Skontrolujte prosím, či je možné ho otvoriť externým editorom ODT súborov. Môže to však tiež znamenať, že bolo zdieľanie zrušené, alebo bol vymazaný.",
 +"Failed to load documents." => "Nepodarilo sa načítať dokumenty.",
- "No documents are found. Please upload or create a document!" => "Žiadne dokumenty neboli zájdené. Nahrajte, alebo vytvorte dokument!",
++"No documents are found. Please upload or create a document!" => "Žiadne dokumenty neboli nájdené. Nahrajte, alebo vytvorte dokument!",
++"OK" => "OK",
 +"Sent" => "Odoslané",
 +"Declined" => "Odmietnuté",
 +"Accepted" => "Schválené",
 +"Incoming" => "Prichádzajúci",
 +"Upload" => "Odoslať",
 +"Save new documents to" => "Uložiť nové dokumenty do",
++"Wrong password. Please retry." => "Chybné heslo. Skúste to znovu.",
++"Password" => "Heslo",
++"Please enter your nickname" => "Prosím, zadajte svoju prezývku",
 +"Join" => "Vstúpiť",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Tento odkaz vyexpiroval, alebo neexistuje. Pre podrobnosti kontaktujte osobu, ktorá ho s vami zdieľala.",
 +"Advanced feature-set" => "Rozšírená sada možností",
 +"(Unstable)" => "(Nestabilý)"
 +);
diff --cc apps/documents/l10n/sk_SK/documents.po
index f077553,0000000..8480afb
mode 100644,000000..100644
--- a/apps/documents/l10n/sk_SK/documents.po
+++ b/apps/documents/l10n/sk_SK/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# mhh <marian.hvolka at stuba.sk>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sk_SK\n"
 +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokumenty"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zavrieť"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Zdieľať"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Ponechaním tejto stránky v editačnom móde môže dôjsť k tomu, že sa zmeny neuložia. Doporučujeme použiť tlačidlo 'Zavrieť'"
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Nepodarilo sa otvoriť tento dokument. Skontrolujte prosím, či je možné ho otvoriť externým editorom ODT súborov. Môže to však tiež znamenať, že bolo zdieľanie zrušené, alebo bol vymazaný."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Nepodarilo sa načítať dokumenty."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
- msgstr "Žiadne dokumenty neboli zájdené. Nahrajte, alebo vytvorte dokument!"
++msgstr "Žiadne dokumenty neboli nájdené. Nahrajte, alebo vytvorte dokument!"
++
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
 +
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Odoslané"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Odmietnuté"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Schválené"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Prichádzajúci"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Odoslať"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Uložiť nové dokumenty do"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Chybné heslo. Skúste to znovu."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Heslo"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
- msgstr ""
++msgstr "Prosím, zadajte svoju prezývku"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Vstúpiť"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Tento odkaz vyexpiroval, alebo neexistuje. Pre podrobnosti kontaktujte osobu, ktorá ho s vami zdieľala."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Rozšírená sada možností"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Nestabilý)"
diff --cc apps/documents/l10n/sl.php
index b8df366,0000000..9f30459
mode 100644,000000..100644
--- a/apps/documents/l10n/sl.php
+++ b/apps/documents/l10n/sl.php
@@@ -1,5 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
++"Documents" => "Dokumenti",
 +"Close" => "Zapri",
 +"Share" => "Souporaba",
- "Upload" => "Pošlji"
++"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Odhod s strani v načinu urejevalnika lahko vpliva na shranjevanje podatkov. Priporočljivo je raje uporabiti gumb za 'zapiranje' okna.",
++"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Nalaganje dokumenta je spodletelo. Preverite, ali ga je mogoče odpreti v zunanjem urejevalniku datotek odt. Do napake je lahko prišlo tudi, če je datoteka izbrisana, ali pa ni več v souporabi.",
++"Failed to load documents." => "Nalaganje dokumentov je spodletelo.",
++"No documents are found. Please upload or create a document!" => "Ni najdenih dokumentov. Pošljite dokument na strežnik, ali pa ga ustvarite.",
++"OK" => "V redu",
++"Sent" => "Poslano",
++"Declined" => "Zavrnjeno",
++"Accepted" => "Sprejeto",
++"Incoming" => "Prihajajoče",
++"Upload" => "Pošlji",
++"Save new documents to" => "Shrani nove dokumente v",
++"Wrong password. Please retry." => "Napačno geslo. Poskusite znova.",
++"Password" => "Geslo",
++"Please enter your nickname" => "Vnesite vzdevek",
++"Join" => "Pridruži se",
++"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Povezava je pretekla ali pa ni nikoli obstajala. Za več podrobnosti stopite v stik z osebo, ki naj bi vam jo poslala.",
++"Advanced feature-set" => "Napredne zmožnosti",
++"(Unstable)" => "(nestabilno)"
 +);
diff --cc apps/documents/l10n/sl/documents.po
index 7cad683,0000000..ca32df1
mode 100644,000000..100644
--- a/apps/documents/l10n/sl/documents.po
+++ b/apps/documents/l10n/sl/documents.po
@@@ -1,109 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
++# mateju <>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sl\n"
 +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
- msgstr ""
++msgstr "Dokumenti"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zapri"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Souporaba"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
- msgstr ""
++msgstr "Odhod s strani v načinu urejevalnika lahko vpliva na shranjevanje podatkov. Priporočljivo je raje uporabiti gumb za 'zapiranje' okna."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
- msgstr ""
++msgstr "Nalaganje dokumenta je spodletelo. Preverite, ali ga je mogoče odpreti v zunanjem urejevalniku datotek odt. Do napake je lahko prišlo tudi, če je datoteka izbrisana, ali pa ni več v souporabi."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
- msgstr ""
++msgstr "Nalaganje dokumentov je spodletelo."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
++msgstr "Ni najdenih dokumentov. Pošljite dokument na strežnik, ali pa ga ustvarite."
++
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "V redu"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
 +msgstr ""
 +
 +#: lib/invite.php:64
 +msgid "Sent"
- msgstr ""
++msgstr "Poslano"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
- msgstr ""
++msgstr "Zavrnjeno"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
- msgstr ""
++msgstr "Sprejeto"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
- msgstr ""
++msgstr "Prihajajoče"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Pošlji"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
- msgstr ""
++msgstr "Shrani nove dokumente v"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Napačno geslo. Poskusite znova."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Geslo"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
- msgstr ""
++msgstr "Vnesite vzdevek"
 +
 +#: templates/public.php:18
 +msgid "Join"
- msgstr ""
++msgstr "Pridruži se"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
- msgstr ""
++msgstr "Povezava je pretekla ali pa ni nikoli obstajala. Za več podrobnosti stopite v stik z osebo, ki naj bi vam jo poslala."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
- msgstr ""
++msgstr "Napredne zmožnosti"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
- msgstr ""
++msgstr "(nestabilno)"
diff --cc apps/documents/l10n/sq.php
index ac3bcf7,0000000..152a689
mode 100644,000000..100644
--- a/apps/documents/l10n/sq.php
+++ b/apps/documents/l10n/sq.php
@@@ -1,4 -1,0 +1,5 @@@
 +<?php $TRANSLATIONS = array(
 +"Share" => "Nda",
- "Upload" => "Ngarko"
++"Upload" => "Ngarko",
++"Password" => "fjalëkalim"
 +);
diff --cc apps/documents/l10n/sq/documents.po
index b98efcc,0000000..30bf689
mode 100644,000000..100644
--- a/apps/documents/l10n/sq/documents.po
+++ b/apps/documents/l10n/sq/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Albanian (http://www.transifex.com/projects/p/owncloud/language/sq/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sq\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Nda"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Ngarko"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "fjalëkalim"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/sr.php
index 0af472a,0000000..cae51e5
mode 100644,000000..100644
--- a/apps/documents/l10n/sr.php
+++ b/apps/documents/l10n/sr.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Затвори",
 +"Share" => "Дели",
- "Upload" => "Отпреми"
++"OK" => "У реду",
++"Upload" => "Отпреми",
++"Password" => "Лозинка"
 +);
diff --cc apps/documents/l10n/sr/documents.po
index 777fb77,0000000..0345cfe
mode 100644,000000..100644
--- a/apps/documents/l10n/sr/documents.po
+++ b/apps/documents/l10n/sr/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sr\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Затвори"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Дели"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "У реду"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Отпреми"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Лозинка"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/sr at latin.php
index 1f88375,0000000..82f9ccd
mode 100644,000000..100644
--- a/apps/documents/l10n/sr at latin.php
+++ b/apps/documents/l10n/sr at latin.php
@@@ -1,5 -1,0 +1,6 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Zatvori",
 +"Share" => "Podeli",
- "Upload" => "Pošalji"
++"Upload" => "Pošalji",
++"Password" => "Lozinka"
 +);
diff --cc apps/documents/l10n/sr at latin/documents.po
index 411cd17,0000000..3539faa
mode 100644,000000..100644
--- a/apps/documents/l10n/sr at latin/documents.po
+++ b/apps/documents/l10n/sr at latin/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sr at latin\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Zatvori"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Podeli"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Pošalji"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Lozinka"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/sv.php
index 490b9b5,0000000..753ad8a
mode 100644,000000..100644
--- a/apps/documents/l10n/sv.php
+++ b/apps/documents/l10n/sv.php
@@@ -1,20 -1,0 +1,22 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Dokument",
 +"Close" => "Stäng",
 +"Share" => "Dela",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Att lämna denna sida i Redigera läget kan orsaka osparad data. Det är rekommenderat att använda 'Stäng' knappen i stället.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Misslyckades att ladda detta dokument. Försök gärna att öppna det med en extern textredigerare som har stöd för ODT. Detta fel kan bero på att dokumentet nyligen har slutat delas ut eller blivit borttagen.",
 +"Failed to load documents." => "Kunde inte ladda dokumenten.",
 +"No documents are found. Please upload or create a document!" => "Inga dokument funna. Ladda upp eller skapa ett dokument!",
++"OK" => "OK",
 +"Sent" => "Skickad",
 +"Declined" => "Nekad",
 +"Accepted" => "Accepterad",
 +"Incoming" => "Inkommande",
 +"Upload" => "Ladda upp",
 +"Save new documents to" => "Spara nya dokument till",
++"Password" => "Lösenord",
 +"Please enter your nickname" => "Skriv i ditt användarnamn",
 +"Join" => "Gå med",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Länken har löpt ut eller aldrig existerat. Kontakta personen som delade den med dig för ytterligare detaljer.",
 +"Advanced feature-set" => "Avancerade inställningar",
 +"(Unstable)" => "(Ej stabil)"
 +);
diff --cc apps/documents/l10n/sv/documents.po
index fd31a80,0000000..4018b35
mode 100644,000000..100644
--- a/apps/documents/l10n/sv/documents.po
+++ b/apps/documents/l10n/sv/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# Daniel Sandman <revoltism at gmail.com>, 2013
 +# Gustav Smedberg <shadow.elf at hotmail.com>, 2013
 +# Magnus Höglund <magnus at linux.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sv\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Dokument"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Stäng"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Dela"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Att lämna denna sida i Redigera läget kan orsaka osparad data. Det är rekommenderat att använda 'Stäng' knappen i stället."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Misslyckades att ladda detta dokument. Försök gärna att öppna det med en extern textredigerare som har stöd för ODT. Detta fel kan bero på att dokumentet nyligen har slutat delas ut eller blivit borttagen."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Kunde inte ladda dokumenten."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Inga dokument funna. Ladda upp eller skapa ett dokument!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Skickad"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Nekad"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Accepterad"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Inkommande"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Ladda upp"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Spara nya dokument till"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Lösenord"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Skriv i ditt användarnamn"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Gå med"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Länken har löpt ut eller aldrig existerat. Kontakta personen som delade den med dig för ytterligare detaljer."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Avancerade inställningar"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Ej stabil)"
diff --cc apps/documents/l10n/sw_KE/documents.po
index 2630784,0000000..fbf5d8e
mode 100644,000000..100644
--- a/apps/documents/l10n/sw_KE/documents.po
+++ b/apps/documents/l10n/sw_KE/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: sw_KE\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ta_LK.php
index c233844,0000000..1ed79e1
mode 100644,000000..100644
--- a/apps/documents/l10n/ta_LK.php
+++ b/apps/documents/l10n/ta_LK.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "மூடுக",
 +"Share" => "பகிர்வு",
- "Upload" => "பதிவேற்றுக"
++"OK" => "சரி ",
++"Upload" => "பதிவேற்றுக",
++"Password" => "கடவுச்சொல்"
 +);
diff --cc apps/documents/l10n/ta_LK/documents.po
index a412683,0000000..43ff576
mode 100644,000000..100644
--- a/apps/documents/l10n/ta_LK/documents.po
+++ b/apps/documents/l10n/ta_LK/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ta_LK\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "மூடுக"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "பகிர்வு"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "சரி "
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "பதிவேற்றுக"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "கடவுச்சொல்"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/te.php
index 20ae382,0000000..7a1b4c4
mode 100644,000000..100644
--- a/apps/documents/l10n/te.php
+++ b/apps/documents/l10n/te.php
@@@ -1,3 -1,0 +1,4 @@@
 +<?php $TRANSLATIONS = array(
- "Close" => "మూసివేయి"
++"Close" => "మూసివేయి",
++"Password" => "సంకేతపదం"
 +);
diff --cc apps/documents/l10n/te/documents.po
index 1024b85,0000000..6712b90
mode 100644,000000..100644
--- a/apps/documents/l10n/te/documents.po
+++ b/apps/documents/l10n/te/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Telugu (http://www.transifex.com/projects/p/owncloud/language/te/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: te\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "మూసివేయి"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "సంకేతపదం"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/templates/documents.pot
index 7a276ef,0000000..9362cb8
mode 100644,000000..100644
--- a/apps/documents/l10n/templates/documents.pot
+++ b/apps/documents/l10n/templates/documents.pot
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
 +#
 +#, fuzzy
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud documents 5.0.0\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\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"
 +"Language: \n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=CHARSET\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended "
 +"to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/th_TH.php
index e1311be,0000000..938beb2
mode 100644,000000..100644
--- a/apps/documents/l10n/th_TH.php
+++ b/apps/documents/l10n/th_TH.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "ปิด",
 +"Share" => "แชร์",
- "Upload" => "อัพโหลด"
++"OK" => "ตกลง",
++"Upload" => "อัพโหลด",
++"Password" => "รหัสผ่าน"
 +);
diff --cc apps/documents/l10n/th_TH/documents.po
index 50a0e6c,0000000..fba4832
mode 100644,000000..100644
--- a/apps/documents/l10n/th_TH/documents.po
+++ b/apps/documents/l10n/th_TH/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: th_TH\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "ปิด"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "แชร์"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "ตกลง"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "อัพโหลด"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "รหัสผ่าน"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/tr.php
index 8f620f7,0000000..f8b20ea
mode 100644,000000..100644
--- a/apps/documents/l10n/tr.php
+++ b/apps/documents/l10n/tr.php
@@@ -1,20 -1,0 +1,23 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "Belgeler",
 +"Close" => "Kapat",
 +"Share" => "Paylaş",
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended to use 'Close' button instead." => "Düzenleyici kipinde bu sayfadan ayrılmak kaydedilmemiş veriye sebep olabilir. Bunun yerine 'Kapat' düğmesi kullanılması önerilir.",
 +"Failed to load this document. Please check if it can be opened with an external odt editor. This might also mean it has been unshared or deleted recently." => "Bu belge yüklenemedi. Lütfen harici bir odt düzenleyicisi ile açılıp açılamayacağını denetleyin. Bu ayrıca paylaşımın yapılmadığı veya yakın zamanda silinmiş olabileceğinden de olabilir.",
 +"Failed to load documents." => "Belgeler yüklenemedi.",
 +"No documents are found. Please upload or create a document!" => "Hiçbir belge bulunamadı. Lütfen bir belge yükleyin veya oluşturun!",
++"OK" => "OK",
 +"Sent" => "Gönderildi",
 +"Declined" => "Reddedildi",
 +"Accepted" => "Kabul edildi",
 +"Incoming" => "Gelen",
 +"Upload" => "Yükle",
 +"Save new documents to" => "Yeni belgeleri şuraya kaydet",
++"Wrong password. Please retry." => "Yanlış parola. Lütfen yeniden deneyin.",
++"Password" => "Parola",
 +"Please enter your nickname" => "Lütfen takma adınızı girin",
 +"Join" => "Katıl",
 +"This link has been expired or is never existed. Please contact the person who shared it with you for details." => "Bu bağlantının süresi dolmuş veya hiç mevcut olmamış. Lütfen ayrıntılar için paylaşımı yapan kişi ile iletişime geçin.",
 +"Advanced feature-set" => "Gelişmiş özellik seti",
 +"(Unstable)" => "(Kararsız)"
 +);
diff --cc apps/documents/l10n/tr/documents.po
index ae3b252,0000000..179e0a1
mode 100644,000000..100644
--- a/apps/documents/l10n/tr/documents.po
+++ b/apps/documents/l10n/tr/documents.po
@@@ -1,112 -1,0 +1,300 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# DeeJaVu <ddejjavvu at gmail.com>, 2013
 +# Fatih Aşıcı <fatih.asici at gmail.com>, 2013
 +# volkangezer <volkangezer at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: tr\n"
 +"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "Belgeler"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Kapat"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Paylaş"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr "Düzenleyici kipinde bu sayfadan ayrılmak kaydedilmemiş veriye sebep olabilir. Bunun yerine 'Kapat' düğmesi kullanılması önerilir."
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr "Bu belge yüklenemedi. Lütfen harici bir odt düzenleyicisi ile açılıp açılamayacağını denetleyin. Bu ayrıca paylaşımın yapılmadığı veya yakın zamanda silinmiş olabileceğinden de olabilir."
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Belgeler yüklenemedi."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr "Hiçbir belge bulunamadı. Lütfen bir belge yükleyin veya oluşturun!"
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "Gönderildi"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "Reddedildi"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "Kabul edildi"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "Gelen"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Yükle"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "Yeni belgeleri şuraya kaydet"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
- msgstr ""
++msgstr "Yanlış parola. Lütfen yeniden deneyin."
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Parola"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "Lütfen takma adınızı girin"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "Katıl"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr "Bu bağlantının süresi dolmuş veya hiç mevcut olmamış. Lütfen ayrıntılar için paylaşımı yapan kişi ile iletişime geçin."
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "Gelişmiş özellik seti"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(Kararsız)"
diff --cc apps/documents/l10n/tzm/documents.po
index 6918dc6,0000000..7e1220b
mode 100644,000000..100644
--- a/apps/documents/l10n/tzm/documents.po
+++ b/apps/documents/l10n/tzm/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Central Atlas Tamazight (http://www.transifex.com/projects/p/owncloud/language/tzm/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: tzm\n"
 +"Plural-Forms: nplurals=2; plural=(n == 0 || n == 1 || (n > 10 && n < 100) ? 0 : 1;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ug.php
index 4ba85af,0000000..441c7f1
mode 100644,000000..100644
--- a/apps/documents/l10n/ug.php
+++ b/apps/documents/l10n/ug.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "ياپ",
 +"Share" => "ھەمبەھىر",
- "Upload" => "يۈكلە"
++"OK" => "جەزملە",
++"Upload" => "يۈكلە",
++"Password" => "ئىم"
 +);
diff --cc apps/documents/l10n/ug/documents.po
index 8bd96df,0000000..2dfc9ca
mode 100644,000000..100644
--- a/apps/documents/l10n/ug/documents.po
+++ b/apps/documents/l10n/ug/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Uighur (http://www.transifex.com/projects/p/owncloud/language/ug/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ug\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "ياپ"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "ھەمبەھىر"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "جەزملە"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "يۈكلە"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "ئىم"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/uk.php
index f1bce70,0000000..a5360c8
mode 100644,000000..100644
--- a/apps/documents/l10n/uk.php
+++ b/apps/documents/l10n/uk.php
@@@ -1,6 -1,0 +1,8 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Закрити",
 +"Share" => "Поділитися",
 +"Failed to load documents." => "Не вдалося завантажити документи.",
- "Upload" => "Вивантажити"
++"OK" => "OK",
++"Upload" => "Вивантажити",
++"Password" => "Пароль"
 +);
diff --cc apps/documents/l10n/uk/documents.po
index efb30c7,0000000..bbb6bb7
mode 100644,000000..100644
--- a/apps/documents/l10n/uk/documents.po
+++ b/apps/documents/l10n/uk/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# zubr139 <zubr139 at ukr.net>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: uk\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"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Закрити"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Поділитися"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "Не вдалося завантажити документи."
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Вивантажити"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Пароль"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/ur_PK.php
index 6cf4c19,0000000..745f2f9
mode 100644,000000..100644
--- a/apps/documents/l10n/ur_PK.php
+++ b/apps/documents/l10n/ur_PK.php
@@@ -1,3 -1,0 +1,3 @@@
 +<?php $TRANSLATIONS = array(
- "No people found" => "کوئی لوگ نہیں ملے۔"
++"Password" => "پاسورڈ"
 +);
diff --cc apps/documents/l10n/ur_PK/documents.po
index 66de8b5,0000000..726682a
mode 100644,000000..100644
--- a/apps/documents/l10n/ur_PK/documents.po
+++ b/apps/documents/l10n/ur_PK/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Urdu (Pakistan) (http://www.transifex.com/projects/p/owncloud/language/ur_PK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: ur_PK\n"
 +"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "پاسورڈ"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/uz/documents.po
index 1de83a7,0000000..091a58d
mode 100644,000000..100644
--- a/apps/documents/l10n/uz/documents.po
+++ b/apps/documents/l10n/uz/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Uzbek (http://www.transifex.com/projects/p/owncloud/language/uz/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: uz\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr ""
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr ""
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr ""
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr ""
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
 +msgstr ""
 +
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
- 
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/vi.php
index 55e7cb9,0000000..285bb44
mode 100644,000000..100644
--- a/apps/documents/l10n/vi.php
+++ b/apps/documents/l10n/vi.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "Đóng",
 +"Share" => "Chia sẻ",
- "Upload" => "Tải lên"
++"OK" => "Chấp nhận",
++"Upload" => "Tải lên",
++"Password" => "Mật khẩu"
 +);
diff --cc apps/documents/l10n/vi/documents.po
index fff2403,0000000..d2b485a
mode 100644,000000..100644
--- a/apps/documents/l10n/vi/documents.po
+++ b/apps/documents/l10n/vi/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: vi\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "Đóng"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "Chia sẻ"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "Chấp nhận"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "Tải lên"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "Mật khẩu"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/zh_CN.php
index 9e58f8e,0000000..0c1aba0
mode 100644,000000..100644
--- a/apps/documents/l10n/zh_CN.php
+++ b/apps/documents/l10n/zh_CN.php
@@@ -1,7 -1,0 +1,9 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "关闭",
 +"Share" => "共享",
 +"Failed to load documents." => "载入文档失败",
++"OK" => "OK",
 +"Sent" => "发送",
- "Upload" => "上传"
++"Upload" => "上传",
++"Password" => "密码"
 +);
diff --cc apps/documents/l10n/zh_CN/documents.po
index 44fe8b7,0000000..d952f81
mode 100644,000000..100644
--- a/apps/documents/l10n/zh_CN/documents.po
+++ b/apps/documents/l10n/zh_CN/documents.po
@@@ -1,110 -1,0 +1,298 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# hanfeng <appweb.cn at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: zh_CN\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "关闭"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "共享"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "载入文档失败"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "OK"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "发送"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "上传"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "密码"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/zh_HK.php
index 049e9b1,0000000..f5174ff
mode 100644,000000..100644
--- a/apps/documents/l10n/zh_HK.php
+++ b/apps/documents/l10n/zh_HK.php
@@@ -1,5 -1,0 +1,7 @@@
 +<?php $TRANSLATIONS = array(
 +"Close" => "關閉",
 +"Share" => "分享",
- "Upload" => "上傳"
++"OK" => "確定",
++"Upload" => "上傳",
++"Password" => "密碼"
 +);
diff --cc apps/documents/l10n/zh_HK/documents.po
index ecfed7d,0000000..3376c88
mode 100644,000000..100644
--- a/apps/documents/l10n/zh_HK/documents.po
+++ b/apps/documents/l10n/zh_HK/documents.po
@@@ -1,109 -1,0 +1,297 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: zh_HK\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr ""
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr "關閉"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "分享"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr ""
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "確定"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr ""
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr ""
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr ""
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr ""
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "上傳"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr ""
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "密碼"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr ""
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr ""
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr ""
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr ""
diff --cc apps/documents/l10n/zh_TW.php
index b4136c6,0000000..992f518
mode 100644,000000..100644
--- a/apps/documents/l10n/zh_TW.php
+++ b/apps/documents/l10n/zh_TW.php
@@@ -1,16 -1,0 +1,18 @@@
 +<?php $TRANSLATIONS = array(
 +"Documents" => "文件",
 +"Close" => " 關閉",
 +"Share" => "分享",
 +"Failed to load documents." => "載入文件失敗",
++"OK" => "好",
 +"Sent" => "已送出",
 +"Declined" => "已拒絕",
 +"Accepted" => "以接受",
 +"Incoming" => "新進的",
 +"Upload" => "上傳",
 +"Save new documents to" => "儲存新檔案至",
++"Password" => "密碼",
 +"Please enter your nickname" => "請輸入你的暱稱",
 +"Join" => "加入",
 +"Advanced feature-set" => "進階功能",
 +"(Unstable)" => "(不穩定)"
 +);
diff --cc apps/documents/l10n/zh_TW/documents.po
index 9db71ef,0000000..73f00c1
mode 100644,000000..100644
--- a/apps/documents/l10n/zh_TW/documents.po
+++ b/apps/documents/l10n/zh_TW/documents.po
@@@ -1,111 -1,0 +1,299 @@@
 +# SOME DESCRIPTIVE TITLE.
 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
 +# This file is distributed under the same license as the PACKAGE package.
 +# 
 +# Translators:
 +# sy6614 <sy6614 at yahoo.com.hk>, 2013
 +# pellaeon <nfsmwlin at gmail.com>, 2013
 +msgid ""
 +msgstr ""
 +"Project-Id-Version: ownCloud\n"
 +"Report-Msgid-Bugs-To: translations at owncloud.org\n"
- "POT-Creation-Date: 2013-11-11 02:51-0500\n"
- "PO-Revision-Date: 2013-11-11 07:51+0000\n"
++"POT-Creation-Date: 2013-11-15 20:04-0500\n"
++"PO-Revision-Date: 2013-11-16 01:04+0000\n"
 +"Last-Translator: I Robot <owncloud-bot at tmit.eu>\n"
 +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 +"MIME-Version: 1.0\n"
 +"Content-Type: text/plain; charset=UTF-8\n"
 +"Content-Transfer-Encoding: 8bit\n"
 +"Language: zh_TW\n"
 +"Plural-Forms: nplurals=1; plural=0;\n"
 +
 +#: appinfo/app.php:35 templates/personal.php:2 templates/settings.php:2
 +msgid "Documents"
 +msgstr "文件"
 +
- #: js/documents.js:23 js/viewer/viewer.js:50
++#: js/documents.js:23 js/locale.js:12 js/viewer/viewer.js:50
 +msgid "Close"
 +msgstr " 關閉"
 +
 +#: js/documents.js:26
 +msgid "Share"
 +msgstr "分享"
 +
- #: js/documents.js:132
++#: js/documents.js:102
++msgid "No connection to server. Trying to reconnect."
++msgstr ""
++
++#: js/documents.js:153
 +msgid ""
 +"Leaving this page in Editor mode might cause unsaved data. It is recommended"
 +" to use 'Close' button instead."
 +msgstr ""
 +
- #: js/documents.js:145
++#: js/documents.js:166
 +msgid ""
 +"Failed to load this document. Please check if it can be opened with an "
 +"external odt editor. This might also mean it has been unshared or deleted "
 +"recently."
 +msgstr ""
 +
- #: js/documents.js:305
++#: js/documents.js:332
 +msgid "Failed to load documents."
 +msgstr "載入文件失敗"
 +
- #: js/documents.js:348
++#: js/documents.js:375
 +msgid "No documents are found. Please upload or create a document!"
 +msgstr ""
 +
++#: js/locale.js:1
++msgid "Align Left"
++msgstr ""
++
++#: js/locale.js:2
++msgid "Alignment"
++msgstr ""
++
++#: js/locale.js:3
++msgid "Align Right"
++msgstr ""
++
++#: js/locale.js:4
++msgid "Annotate"
++msgstr ""
++
++#: js/locale.js:5
++msgid "Background"
++msgstr ""
++
++#: js/locale.js:6
++msgid "Bold"
++msgstr ""
++
++#: js/locale.js:7
++msgid "Bottom"
++msgstr ""
++
++#: js/locale.js:8
++msgid "Cancel"
++msgstr ""
++
++#: js/locale.js:9
++msgid "Center"
++msgstr ""
++
++#: js/locale.js:10
++msgid "Clone"
++msgstr ""
++
++#: js/locale.js:11
++msgid "Clone this Style"
++msgstr ""
++
++#: js/locale.js:13
++msgid "Color"
++msgstr ""
++
++#: js/locale.js:14
++msgid "Create"
++msgstr ""
++
++#: js/locale.js:15
++msgid "Decrease Indent"
++msgstr ""
++
++#: js/locale.js:16
++msgid "Default Style"
++msgstr ""
++
++#: js/locale.js:17
++msgid "Delete"
++msgstr ""
++
++#: js/locale.js:18
++msgid "Family"
++msgstr ""
++
++#: js/locale.js:19
++msgid "Font"
++msgstr ""
++
++#: js/locale.js:20
++msgid "Font Effects"
++msgstr ""
++
++#: js/locale.js:21
++msgid "Format"
++msgstr ""
++
++#: js/locale.js:22
++msgid "Increase Indent"
++msgstr ""
++
++#: js/locale.js:23
++msgid "Insert Image"
++msgstr ""
++
++#: js/locale.js:24
++msgid "Invite Members"
++msgstr ""
++
++#: js/locale.js:25
++msgid "Italic"
++msgstr ""
++
++#: js/locale.js:26
++msgid "Justified"
++msgstr ""
++
++#: js/locale.js:27
++msgid "Justify"
++msgstr ""
++
++#: js/locale.js:28
++msgid "Left"
++msgstr ""
++
++#: js/locale.js:29
++msgid "Loading"
++msgstr ""
++
++#: js/locale.js:30
++msgid "Members"
++msgstr ""
++
++#: js/locale.js:31
++msgid "New Name:"
++msgstr ""
++
++#: js/locale.js:32 templates/public.php:12
++msgid "OK"
++msgstr "好"
++
++#: js/locale.js:33
++msgid "Open"
++msgstr ""
++
++#: js/locale.js:34
++msgid "Options"
++msgstr ""
++
++#: js/locale.js:35
++msgid "Paragraph..."
++msgstr ""
++
++#: js/locale.js:36
++msgid "Paragraph Styles"
++msgstr ""
++
++#: js/locale.js:37
++msgid "Redo"
++msgstr ""
++
++#: js/locale.js:38
++msgid "Right"
++msgstr ""
++
++#: js/locale.js:39
++msgid "Save"
++msgstr ""
++
++#: js/locale.js:40
++msgid "Size"
++msgstr ""
++
++#: js/locale.js:41
++msgid "Spacing"
++msgstr ""
++
++#: js/locale.js:42
++msgid "Strikethrough"
++msgstr ""
++
++#: js/locale.js:43
++msgid "Style"
++msgstr ""
++
++#: js/locale.js:44
++msgid "Text"
++msgstr ""
++
++#: js/locale.js:45
++msgid "Top"
++msgstr ""
++
++#: js/locale.js:46
++msgid "Underline"
++msgstr ""
++
++#: js/locale.js:47
++msgid "Undo"
++msgstr ""
++
++#: js/locale.js:48
++msgid "Unknown Author"
++msgstr ""
++
 +#: lib/invite.php:64
 +msgid "Sent"
 +msgstr "已送出"
 +
 +#: lib/invite.php:65 lib/invite.php:75
 +msgid "Declined"
 +msgstr "已拒絕"
 +
 +#: lib/invite.php:66 lib/invite.php:76
 +msgid "Accepted"
 +msgstr "以接受"
 +
 +#: lib/invite.php:74
 +msgid "Incoming"
 +msgstr "新進的"
 +
 +#: templates/documents.php:7
 +msgid "Upload"
 +msgstr "上傳"
 +
 +#: templates/personal.php:4
 +msgid "Save new documents to"
 +msgstr "儲存新檔案至"
 +
 +#: templates/public.php:8
 +msgid "Wrong password. Please retry."
 +msgstr ""
 +
 +#: templates/public.php:11
 +msgid "Password"
- msgstr ""
- 
- #: templates/public.php:12
- msgid "OK"
- msgstr ""
++msgstr "密碼"
 +
 +#: templates/public.php:17
 +msgid "Please enter your nickname"
 +msgstr "請輸入你的暱稱"
 +
 +#: templates/public.php:18
 +msgid "Join"
 +msgstr "加入"
 +
 +#: templates/public.php:24
 +msgid ""
 +"This link has been expired or is never existed. Please contact the person "
 +"who shared it with you for details."
 +msgstr ""
 +
 +#: templates/settings.php:9
 +msgid "Advanced feature-set"
 +msgstr "進階功能"
 +
 +#: templates/settings.php:10
 +msgid "(Unstable)"
 +msgstr "(不穩定)"
diff --cc apps/documents/src/locale.sh
index 0000000,0000000..1a5dbd9
new file mode 100644
--- /dev/null
+++ b/apps/documents/src/locale.sh
@@@ -1,0 -1,0 +1,18 @@@
++#!/bin/bash
++#extracts strings for translation
++
++if [ ! -e "README.md" ]; then
++   echo "Call me in the toplevel dir of OwnCloud Documents."
++        exit 1
++fi
++
++JS_PATH=js/
++WEBODF_PATH=js/3rdparty/webodf/
++
++TMP=/tmp/documents-locale.js
++
++grep -ohEr "tr\([\"|'][^\"|']*[\"|']\)" ${WEBODF_PATH} | sed -e "s/\"/'/g" -e "s/^tr(/t('documents',\ /" -e "s/\$/;/" > ${TMP}
++
++grep -ohEr "text-i18n=[\"|'][^\"|']*[\"|']" ${WEBODF_PATH} | sed  -e "s/\"/'/g" -e "s/^text-i18n=/t('documents',\ /" -e "s/\$/);/" >> ${TMP}
++
++sort ${TMP} | uniq > ${JS_PATH}locale.js
diff --cc apps/documents/templates/documents.php
index f23eeab,0000000..0b461a7
mode 100644,000000..100644
--- a/apps/documents/templates/documents.php
+++ b/apps/documents/templates/documents.php
@@@ -1,38 -1,0 +1,38 @@@
 +<div id="documents-content">
 +	<ul class="documentslist">
 +		<li class="add-document">
 +			<a class="add svg" target="_blank" href="">
- 				<label><?php p('New document') ?></label>
++				<label><?php p($l->t('New document')) ?></label>
 +			</a> 
 +			<div id="upload" title="<?php p($l->t('Upload') . ' max. '.$_['uploadMaxHumanFilesize']) ?>">
 +				<form data-upload-id="1"
 +					  id="data-upload-form"
 +					  class="file_upload_form"
 +					  action="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>"
 +					  method="post"
 +					  enctype="multipart/form-data"
 +					  target="file_upload_target_1">
 +					<?php if($_['uploadMaxFilesize'] >= 0):?>
 +					<input type="hidden" name="MAX_FILE_SIZE" id="max_upload"
 +						   value="<?php p($_['uploadMaxFilesize']) ?>" />
 +					<?php endif;?>
 +					<!-- Send the requesttoken, this is needed for older IE versions
 +						 because they don't send the CSRF token via HTTP header in this case -->
 +					<input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" id="requesttoken" />
 +					<input type="hidden" class="max_human_file_size"
 +						   value="(max <?php p($_['uploadMaxHumanFilesize']); ?>)" />
 +					<input type="hidden" name="dir" value="<?php p($_['savePath']) ?>" id="dir" />
 +					<input type="file" id="file_upload_start" name='files[]' />
 +					<a href="#" class="upload svg">
- 					<label><?php p('Upload') ?></label></a>
++					<label><?php p($l->t('Upload')) ?></label></a>
 +				</form>
 +			</div>
 +		</li>
 +		<li class="progress"> </li>
 +		<li class="document template" data-id="" style="display:none;">
 +			<a target="_blank" href=""><label></label></a>
 +		</li>
 +	</ul>
 +</div>
 +<input type="hidden" id="webodf-unstable" value="<?php p($_['useUnstable']) ?>" />
 +<input type="hidden" name="allowShareWithLink" id="allowShareWithLink" value="<?php p($_['allowShareWithLink']) ?>" />
diff --cc apps/files_encryption/lib/helper.php
index 314ac57,0ac6fcf..0ac6fcf
mode 100644,100755..100644
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
diff --cc apps/files_encryption/lib/keymanager.php
index 6dadd12,3427e8a..3427e8a
mode 100644,100755..100644
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
diff --cc apps/files_encryption/tests/crypt.php
index 5146613,9c32ee0..9c32ee0
mode 100644,100755..100644
--- a/apps/files_encryption/tests/crypt.php
+++ b/apps/files_encryption/tests/crypt.php
diff --cc apps/files_encryption/tests/util.php
index 1b93bc3,e8dfb74..e8dfb74
mode 100644,100755..100644
--- a/apps/files_encryption/tests/util.php
+++ b/apps/files_encryption/tests/util.php
diff --cc core/doc/admin/_sources/maintenance/backup.txt
index c499570,0000000..cf79948
mode 100644,000000..100644
--- a/core/doc/admin/_sources/maintenance/backup.txt
+++ b/core/doc/admin/_sources/maintenance/backup.txt
@@@ -1,41 -1,0 +1,35 @@@
 +Backing Up ownCloud
 +================================
 +
 +To backup an ownCloud installation there are three main things you need to retain:
 +
 +#. The config folder
 +#. The data folder
- #. The database (found in the data folder for sqlite installs)
- 
- To restore an ownCloud instance:
- 
- #. Extract ownCloud to your webserver
- #. Copy over your config folder with your backed up config folder
- #. Copy over your data folder with your backed up data folder
- #. Import your database
- #. Update config.php of any changes to your database connection
++#. The database
 +
 +Backup Folders
 +------
 +
- Simply copy your config and data folder(or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment.
++Simply copy your config and data folder (or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment. You could use this command:
++
++    rsync -Aax owncloud/ owncloud-dirbkp_`date +"%Y%m%d"`/
 +
 +Backup Database
 +------
 +
 +MySQL
 +^^^^^
 +
 +MySQL is the recommended database engine. To backup MySQL:
 +
-     mysqldump --lock-tables -u [username] -p[password] > owncloud.sql
++    mysqldump --lock-tables -h [server] -u [username] -p[password] > owncloud-sqlbkp_`date +"%Y%m%d"`.bak
 +
 +SQLite
 +^^^^^
 +
-     sqlite3 owncloud.db .dump > owncloud.bak
++    sqlite3 data/owncloud.db .dump > owncloud-sqlbkp_`date +"%Y%m%d"`.bak
 +
 +PostgreSQL
 +^^^^^
 +
-     pg_dump owncloud > owncloud.bak
++    PGPASSWORD="password" pg_dump owncloud -h [server] -U [username] -f owncloud-sqlbkp_`date +"%Y%m%d"`.bak
diff --cc core/doc/admin/_sources/maintenance/index.txt
index 778d2cf,0000000..e5aed89
mode 100644,000000..100644
--- a/core/doc/admin/_sources/maintenance/index.txt
+++ b/core/doc/admin/_sources/maintenance/index.txt
@@@ -1,10 -1,0 +1,12 @@@
 +===========
 +Maintenance
 +===========
 +
 +.. toctree::
 +   :maxdepth: 1
 +
-    migrating
-    update
 +   backup
++   update
++   restore
++   migrating
++
diff --cc core/doc/admin/_sources/maintenance/migrating.txt
index 15affeb,0000000..4dea91c
mode 100644,000000..100644
--- a/core/doc/admin/_sources/maintenance/migrating.txt
+++ b/core/doc/admin/_sources/maintenance/migrating.txt
@@@ -1,16 -1,0 +1,10 @@@
 +Migrating ownCloud Installations
 +================================
 +
- To migrate an ownCloud install there are three things you need to retain:
 +
- #. The config folder
- #. The data folder
- #. The database (found in the data folder for sqlite installs)
++To migrate an ownCloud install, follow those steps:
 +
- To restore an ownCloud instance:
- 
- #. Extract ownCloud to your webserver
- #. Copy over your config folder
- #. Copy over your data folder
- #. Import your database
++#. Backup data/config folders and your database (look at "Backing Up ownCloud")
++#. Move your data
++#. Restore your data/config folders and your database (look at "Restore ownCloud")
 +#. Update config.php of any changes to your database connection
diff --cc core/doc/admin/_sources/maintenance/restore.txt
index 0000000,0000000..48a4c9a
new file mode 100644
--- /dev/null
+++ b/core/doc/admin/_sources/maintenance/restore.txt
@@@ -1,0 -1,0 +1,39 @@@
++Restoring ownCloud
++================================
++
++To restore an ownCloud installation there are three main things you need to restore:
++
++#. The config folder
++#. The data folder
++#. The database
++
++Restore Folders
++------
++
++.. note:: This guide assumes that your previous backup is called "owncloud-dirbkp"
++
++Simply copy your config and data folder (or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment. You could use this command:
++
++    rsync -Aax owncloud-dirbkp/ owncloud/
++
++Restore Database
++------
++
++.. note:: This guide assumes that your previous backup is called "owncloud-sqlbkp.bak"
++
++MySQL
++^^^^^
++
++MySQL is the recommended database engine. To backup MySQL:
++
++    mysql -h [server] -u [username] -p[password] < owncloud-sqlbkp.bak
++
++SQLite
++^^^^^
++
++    sqlite3 data/owncloud.db .dump < owncloud-sqlbkp.bak
++
++PostgreSQL
++^^^^^
++
++    PGPASSWORD="password" pg_restore -c -d owncloud -h [server] -U [username] owncloud-sqlbkp.bak
diff --cc core/doc/admin/_sources/maintenance/update.txt
index 4f1d8cf,0000000..9f556b4
mode 100644,000000..100644
--- a/core/doc/admin/_sources/maintenance/update.txt
+++ b/core/doc/admin/_sources/maintenance/update.txt
@@@ -1,65 -1,0 +1,48 @@@
 +Updating ownCloud
 +=================
 +
++.. note:: If you have installed ownCloud from a repository, your package management should take care of it. Probably you will need to look for compatible third party applications yourself. **Always do backups anyway.**
++
 +Update
 +------
- Updating means updating ownCloud to the latest *point release*, e.g. ownCloud 4.0.6 → 4.0.7. To update an ownCloud installation manually, follow those steps:
- 
- .. note:: If you have installed ownCloud from a repository, your package management should take care of it.
- 
- #. Make a backup.
- #. Unpack the release tarball in the owncloud directory, i.e. copy all new files into the ownCloud installation.
- #. Make sure that the file permissions are correct.
- #. After the next page request the update procedures will run.
- 
- Assuming your ownCloud installation is at **./owncloud/** and you want to update to the latest version, you could do the following:
- 
- Use rsync in archive mode (this leaves file owner, permissions, and time stamps untouched) to recursively copy all content from **./owncloud/** to a backup directory which contains the current date::
- 
-   rsync -a owncloud/ owncloud_bkp`date +"%Y%m%d"`/
- 
- Download the latest version to the working directory::
- 
-   wget http://download.owncloud.org/community/owncloud-latest.tar.bz2
++Updating means updating ownCloud to the latest *point release*, e.g. ownCloud 4.0.6 → 4.0.7. This procedure uses the ownCloud updater plugin called "Updater": it's an internal application already present in your ownCloud installation.
 +
- Extract content of archive to **./owncloud_latest/**::
++To update ownCloud, follow those steps:
 +
-   mkdir owncloud_latest; tar -C owncloud_latest -xjf owncloud-latest.tar.bz2
++#. Make a backup of the ownCloud folder and the database.
++#. Make sure that updater plugin is enabled.
++#. Navigate to the 'Admin' page.
++#. Click 'Update'.
++#. Refresh the page with Ctrl+F5.
 +
- Use rsync to recursivly copy extracted files (new) to ownCloud installation (old) using modification times of the new files, but preserving owner and permissions of the old files:
- 
- .. warning:: You should not use this [--inplace] option to update files that are being accessed by others *(from rysnc man page)*
- 
- ::
- 
-   rsync --inplace -rtv owncloud_latest/owncloud/ owncloud/
- 
- Clean up::
- 
-   rm -rf owncloud-latest.tar.bz2 owncloud_latest/
++If this procedure doesn't work (for example, ownCloud 5.0.10 doesn't show new any new version) you could try to perform a full upgrade to update to the lastest point release (see below).
 +
 +Upgrade
 +-------
 +Upgrade is to bring an ownCloud instance to a new *major release*, e.g.
 +ownCloud 4.0.7 → 4.5.0. Always do backups anyway.
 +
 +To upgrade ownCloud, follow those steps:
 +
 +#. Make sure that you ran the latest point release of the major ownCloud
 +   version, e.g. 4.0.7 in the 4.0 series. If not, update to that version first
 +   (see above).
- #. **Make a backup of the ownCloud folder and the database**
++#. Make a backup of the ownCloud folder and the database.
++#. Download the latest version to the working directory:
++    
++    wget http://download.owncloud.org/community/owncloud-latest.tar.bz2
++
 +#. Deactivate all third party applications.
 +#. Delete everything from your ownCloud installation directory, except data and
-    config.
++   config. Assuming that it's your working directory, you could execute this command:
++    
++    ls | grep -v '\(data\)\|\(config\)' | xargs rm -r
++
 +#. Unpack the release tarball in the owncloud directory (or copy the
-    files thereto).
- #. Make sure that the file permissions are correct.
++   files thereto). Assuming that your installation directory is called 'owncloud' and that it's inside your working directory, you could execute this command:
++   
++    tar xfj owncloud-latest.tar.bz2
++   
 +#. With the next page request the update procedures will run.
 +#. If you had 3rd party applications, check if they provide versions compatible
-    with the new release.
- 
- If so, install and enable them, update procedures will run if needed.  9. If
- you installed ownCloud from a repository, your package management should take
- care of it. Probably you will need to look for compatible third party
- applications yourself. Always do backups anyway.
++   with the new release. If so, install and enable them, update procedures will run if needed. 
diff --cc core/doc/admin/contents.html
index 5cd40fa,0000000..ec97d70
mode 100644,000000..100644
--- a/core/doc/admin/contents.html
+++ b/core/doc/admin/contents.html
@@@ -1,333 -1,0 +1,338 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>ownCloud documentation contents — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="index.html" />
 +    <link rel="next" title="Admin Documentation" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="#">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="#">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">Admin Documentation</a></li>
 +</ul>
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="maintenance/index.html">Maintenance</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="issues/index.html">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="owncloud-documentation-contents">
 +<span id="contents"></span><h1>ownCloud documentation contents<a class="headerlink" href="#owncloud-documentation-contents" title="Permalink to this headline">¶</a></h1>
 +<div class="toctree-wrapper compound">
 +</div>
 +<div class="toctree-wrapper compound">
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="installation/index.html">Installation</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_appliance.html">Appliances</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_appliance.html#software-appliances">Software Appliances</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_appliance.html#owncloud-on-hardware-appliances">ownCloud on Hardware Appliances</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_linux.html">Linux Distributions</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#archlinux">Archlinux</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#opensuse">openSUSE</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#fedora">Fedora</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#centos-5-6">CentOS 5 & 6</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#gentoo">Gentoo</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#pclinuxos">PCLinuxOS</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_linux.html#ubuntu-debian">Ubuntu / Debian</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_macos.html">Mac OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_windows.html">Windows 7 and Windows Server 2008</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_windows.html#activate-iis-with-cgi-support">Activate IIS with CGI Support</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_windows.html#installing-php">Installing PHP</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_windows.html#installing-mysql">Installing MySQL</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_windows.html#installing-owncloud">Installing ownCloud</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_windows.html#ensure-proper-http-verb-handling">Ensure Proper HTTP-Verb handling</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_windows.html#configuring-owncloud-php-and-iis-for-large-file-uploads">Configuring ownCloud, PHP and IIS for Large File Uploads</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_ucs.html">Univention Corporate Server</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_ucs.html#pre-configuration">Pre configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_ucs.html#installation">Installation</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_ucs.html#postconfiguration-optional">Postconfiguration (optional)</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_ucs.html#using-owncloud">Using ownCloud</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_source.html">Manual Installation</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_source.html#prerequisites">Prerequisites</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_source.html#extract-owncloud-and-copy-to-your-webserver">Extract ownCloud and Copy to Your Webserver</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_source.html#set-the-directory-permissions">Set the Directory Permissions</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_source.html#enable-htaccess-and-mod-rewrite-if-running-apache">Enable .htaccess and mod_rewrite if Running Apache</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_source.html#follow-the-install-wizard">Follow the Install Wizard</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_source.html#test-your-installation">Test your Installation</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="installation/installation_others.html">Other Web Servers</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_others.html#nginx-configuration">Nginx Configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_others.html#lighttpd-configuration">Lighttpd Configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_others.html#yaws-configuration">Yaws Configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_others.html#hiawatha-configuration">Hiawatha Configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_others.html#pagekite-configuration">PageKite Configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="installation/installation_others.html#open-wrt">Open Wrt</a></li>
 +</ul>
 +</li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="configuration/index.html">Configuration</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/auth_ldap.html">User Authentication with LDAP</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#basic-settings">Basic Settings</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#advanced-settings">Advanced Settings</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#expert-settings-owncloud-5-0-7">Expert Settings (>= ownCloud 5.0.7)</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#testing-the-configuration">Testing the configuration</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#troubleshooting-tips-and-tricks">Troubleshooting, Tips and Tricks</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#ssl-certificate-verification-ldaps-tls">SSL Certificate Verification (LDAPS, TLS)</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#microsoft-active-directory">Microsoft Active Directory</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#duplicating-server-configurations">Duplicating Server Configurations</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#owncloud-ldap-internals">ownCloud LDAP Internals</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#user-and-group-mapping">User and Group Mapping</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#caching">Caching</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/auth_ldap.html#handling-with-backup-server">Handling with Backup Server</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/background_jobs.html">Background Jobs</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/background_jobs.html#parameters">Parameters</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/background_jobs.html#cron-jobs">Cron-Jobs</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_3rdparty.html">3rd-Party Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_3rdparty.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_apps.html">Apps Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_apps.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_automation.html">Automatic Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_automation.html#parameters">Parameters</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_automation.html#sample-automatic-configurations">Sample Automatic Configurations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_custom_clients.html">Custom Client Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_custom_clients.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_database.html">Database Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_database.html#requirements">Requirements</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_database.html#parameters">Parameters</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_database.html#trouble-shooting">Trouble Shooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_encryption.html">Use Server-Side Encryption</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_encryption.html#enable-file-recovery-feature">Enable File Recovery Feature</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_encryption.html#recover-user-files">Recover User Files</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_encryption.html#ldap-and-other-external-user-back-ends">LDAP and other external user back-ends</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_knowledgebase.html">Knowledge Base Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_knowledgebase.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_language.html">Language Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_language.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_logging.html">Logging Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_logging.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_mail.html">Mail Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_mail.html#requirements">Requirements</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_mail.html#parameters">Parameters</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_mail.html#send-a-test-email">Send a Test Email</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_mail.html#trouble-shooting">Trouble shooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_maintenance.html">Maintenance Mode Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_maintenance.html#parameters">Parameters</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuration_reverseproxy.html">Reverse Proxy Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_reverseproxy.html#parameters">Parameters</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuration_reverseproxy.html#example">Example</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuring_big_file_upload.html">Uploading big files > 512MB (as set by default)</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuring_big_file_upload.html#not-outnumberable-upload-limits">Not outnumberable upload limits:</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/configuring_big_file_upload.html#other-recommendable-preconditions">Other recommendable preconditions:</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/configuring_big_file_upload.html#enabling-uploading-big-files">Enabling uploading big files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/custom_mount_config_gui.html">Custom Mount Configuration Web-GUI</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/custom_mount_config_gui.html#id1">Dropbox</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/custom_mount_config_gui.html#id2">Google Drive</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/custom_mount_config.html">Custom Mount Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/custom_mount_config.html#example">Example</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/custom_mount_config.html#backends">Backends</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/custom_user_backend.html">Custom User Backend Configuration</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/custom_user_backend.html#imap">IMAP</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/custom_user_backend.html#smb">SMB</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="configuration/xsendfile.html">Serving static files via web server</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/xsendfile.html#apache2-x-sendfile">Apache2 (X-Sendfile)</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/xsendfile.html#lighttpd-x-sendfile2">LigHTTPd (X-Sendfile2)</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/xsendfile.html#nginx-x-accel-redirect">Nginx (X-Accel-Redirect)</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="configuration/xsendfile.html#how-to-check-if-it-s-working">How to check if it’s working?</a></li>
 +</ul>
 +</li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="maintenance/index.html">Maintenance</a><ul>
- <li class="toctree-l2"><a class="reference internal" href="maintenance/migrating.html">Migrating ownCloud Installations</a></li>
++<li class="toctree-l2"><a class="reference internal" href="maintenance/backup.html">Backing Up ownCloud</a><ul>
++<li class="toctree-l3"><a class="reference internal" href="maintenance/backup.html#backup-folders">Backup Folders</a></li>
++<li class="toctree-l3"><a class="reference internal" href="maintenance/backup.html#backup-database">Backup Database</a></li>
++</ul>
++</li>
 +<li class="toctree-l2"><a class="reference internal" href="maintenance/update.html">Updating ownCloud</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="maintenance/update.html#update">Update</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="maintenance/update.html#upgrade">Upgrade</a></li>
 +</ul>
 +</li>
- <li class="toctree-l2"><a class="reference internal" href="maintenance/backup.html">Backing Up ownCloud</a><ul>
- <li class="toctree-l3"><a class="reference internal" href="maintenance/backup.html#backup-folders">Backup Folders</a></li>
- <li class="toctree-l3"><a class="reference internal" href="maintenance/backup.html#backup-database">Backup Database</a></li>
++<li class="toctree-l2"><a class="reference internal" href="maintenance/restore.html">Restoring ownCloud</a><ul>
++<li class="toctree-l3"><a class="reference internal" href="maintenance/restore.html#restore-folders">Restore Folders</a></li>
++<li class="toctree-l3"><a class="reference internal" href="maintenance/restore.html#restore-database">Restore Database</a></li>
 +</ul>
 +</li>
++<li class="toctree-l2"><a class="reference internal" href="maintenance/migrating.html">Migrating ownCloud Installations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="issues/index.html">Issues</a></li>
 +</ul>
 +</div>
 +<div class="section" id="indices-and-tables">
 +<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
 +<ul class="simple">
 +<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
 +</ul>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/issues/index.html
index 175a3c9,0000000..340f050
mode 100644,000000..100644
--- a/core/doc/admin/issues/index.html
+++ b/core/doc/admin/issues/index.html
@@@ -1,161 -1,0 +1,161 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Issues — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="../index.html" />
-     <link rel="prev" title="Backing Up ownCloud" href="../maintenance/backup.html" />
++    <link rel="prev" title="Migrating ownCloud Installations" href="../maintenance/migrating.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">Admin Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../maintenance/index.html">Maintenance</a></li>
 +<li class="toctree-l1 current"><a class="current reference internal" href="">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="issues">
 +<h1>Issues<a class="headerlink" href="#issues" title="Permalink to this headline">¶</a></h1>
 +<p>If you think you have found a bug in ownCloud, please:</p>
 +<ul class="simple">
 +<li>Search for a solution</li>
 +<li>Double check your configuration</li>
 +</ul>
 +<p>If you can’t find a solution, please file an issue:</p>
 +<ul class="simple">
 +<li>If the issue is with the ownCloud server, report it to the <a class="reference external" href="https://github.com/owncloud/core">GitHub core repository</a></li>
 +<li>If the issue is with the ownCloud client, report it to the <a class="reference external" href="https://github.com/owncloud/mirall">GitHub mirall repository</a></li>
 +<li>If the issue with with an ownCloud app, report it to where that app is developed<ul>
 +<li>If the app is listed <a class="reference external" href="https://github.com/owncloud">here</a> report it to the correct repository</li>
 +<li>If the app is listed <a class="reference external" href="https://github.com/owncloud/apps">here</a> report it to the apps repository</li>
 +</ul>
 +</li>
 +</ul>
 +<p>Please note that the mailing list should not be used for bug reports, as it is hard to track them there.</p>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/maintenance/backup.html
index 5f7d90b,0000000..0631171
mode 100644,000000..100644
--- a/core/doc/admin/maintenance/backup.html
+++ b/core/doc/admin/maintenance/backup.html
@@@ -1,193 -1,0 +1,188 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Backing Up ownCloud — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Maintenance" href="index.html" />
-     <link rel="next" title="Issues" href="../issues/index.html" />
-     <link rel="prev" title="Updating ownCloud" href="update.html" />
++    <link rel="next" title="Updating ownCloud" href="update.html" />
++    <link rel="prev" title="Maintenance" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">Admin Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Maintenance</a><ul class="current">
- <li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
- <li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Backing Up ownCloud</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#backup-folders">Backup Folders</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#backup-database">Backup Database</a></li>
 +</ul>
 +</li>
++<li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="restore.html">Restoring ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../issues/index.html">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="backing-up-owncloud">
 +<h1>Backing Up ownCloud<a class="headerlink" href="#backing-up-owncloud" title="Permalink to this headline">¶</a></h1>
 +<p>To backup an ownCloud installation there are three main things you need to retain:</p>
 +<ol class="arabic simple">
 +<li>The config folder</li>
 +<li>The data folder</li>
- <li>The database (found in the data folder for sqlite installs)</li>
- </ol>
- <p>To restore an ownCloud instance:</p>
- <ol class="arabic simple">
- <li>Extract ownCloud to your webserver</li>
- <li>Copy over your config folder with your backed up config folder</li>
- <li>Copy over your data folder with your backed up data folder</li>
- <li>Import your database</li>
- <li>Update config.php of any changes to your database connection</li>
++<li>The database</li>
 +</ol>
 +<div class="section" id="backup-folders">
 +<h2>Backup Folders<a class="headerlink" href="#backup-folders" title="Permalink to this headline">¶</a></h2>
- <p>Simply copy your config and data folder(or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment.</p>
++<p>Simply copy your config and data folder (or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment. You could use this command:</p>
++<blockquote>
++<div>rsync -Aax owncloud/ owncloud-dirbkp_`date +”%Y%m%d”<a href="#id1"><span class="problematic" id="id2">`</span></a>/</div></blockquote>
 +</div>
 +<div class="section" id="backup-database">
 +<h2>Backup Database<a class="headerlink" href="#backup-database" title="Permalink to this headline">¶</a></h2>
 +<div class="section" id="mysql">
 +<h3>MySQL<a class="headerlink" href="#mysql" title="Permalink to this headline">¶</a></h3>
 +<p>MySQL is the recommended database engine. To backup MySQL:</p>
 +<blockquote>
- <div>mysqldump –lock-tables -u [username] -p[password] > owncloud.sql</div></blockquote>
++<div>mysqldump –lock-tables -h [server] -u [username] -p[password] > owncloud-sqlbkp_`date +”%Y%m%d”<a href="#id3"><span class="problematic" id="id4">`</span></a>.bak</div></blockquote>
 +</div>
 +<div class="section" id="sqlite">
 +<h3>SQLite<a class="headerlink" href="#sqlite" title="Permalink to this headline">¶</a></h3>
 +<blockquote>
- <div>sqlite3 owncloud.db .dump > owncloud.bak</div></blockquote>
++<div>sqlite3 data/owncloud.db .dump > owncloud-sqlbkp_`date +”%Y%m%d”<a href="#id5"><span class="problematic" id="id6">`</span></a>.bak</div></blockquote>
 +</div>
 +<div class="section" id="postgresql">
 +<h3>PostgreSQL<a class="headerlink" href="#postgresql" title="Permalink to this headline">¶</a></h3>
 +<blockquote>
- <div>pg_dump owncloud > owncloud.bak</div></blockquote>
++<div>PGPASSWORD=”password” pg_dump owncloud -h [server] -U [username] -f owncloud-sqlbkp_`date +”%Y%m%d”<a href="#id7"><span class="problematic" id="id8">`</span></a>.bak</div></blockquote>
 +</div>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/maintenance/index.html
index b584029,0000000..8654067
mode 100644,000000..100644
--- a/core/doc/admin/maintenance/index.html
+++ b/core/doc/admin/maintenance/index.html
@@@ -1,158 -1,0 +1,160 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Maintenance — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="../index.html" />
-     <link rel="next" title="Migrating ownCloud Installations" href="migrating.html" />
++    <link rel="next" title="Backing Up ownCloud" href="backup.html" />
 +    <link rel="prev" title="Serving static files via web server" href="../configuration/xsendfile.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">Admin Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1 current"><a class="current reference internal" href="">Maintenance</a><ul>
- <li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
- <li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="backup.html">Backing Up ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="restore.html">Restoring ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../issues/index.html">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="maintenance">
 +<h1>Maintenance<a class="headerlink" href="#maintenance" title="Permalink to this headline">¶</a></h1>
 +<div class="toctree-wrapper compound">
 +<ul>
- <li class="toctree-l1"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
- <li class="toctree-l1"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="backup.html">Backing Up ownCloud</a></li>
++<li class="toctree-l1"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
++<li class="toctree-l1"><a class="reference internal" href="restore.html">Restoring ownCloud</a></li>
++<li class="toctree-l1"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
 +</ul>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/maintenance/migrating.html
index 46604f9,0000000..2abdfeb
mode 100644,000000..100644
--- a/core/doc/admin/maintenance/migrating.html
+++ b/core/doc/admin/maintenance/migrating.html
@@@ -1,166 -1,0 +1,160 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Migrating ownCloud Installations — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Maintenance" href="index.html" />
-     <link rel="next" title="Updating ownCloud" href="update.html" />
-     <link rel="prev" title="Maintenance" href="index.html" />
++    <link rel="next" title="Issues" href="../issues/index.html" />
++    <link rel="prev" title="Restoring ownCloud" href="restore.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">Admin Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Maintenance</a><ul class="current">
- <li class="toctree-l2 current"><a class="current reference internal" href="">Migrating ownCloud Installations</a></li>
- <li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="backup.html">Backing Up ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="restore.html">Restoring ownCloud</a></li>
++<li class="toctree-l2 current"><a class="current reference internal" href="">Migrating ownCloud Installations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../issues/index.html">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="migrating-owncloud-installations">
 +<h1>Migrating ownCloud Installations<a class="headerlink" href="#migrating-owncloud-installations" title="Permalink to this headline">¶</a></h1>
- <p>To migrate an ownCloud install there are three things you need to retain:</p>
- <ol class="arabic simple">
- <li>The config folder</li>
- <li>The data folder</li>
- <li>The database (found in the data folder for sqlite installs)</li>
- </ol>
- <p>To restore an ownCloud instance:</p>
++<p>To migrate an ownCloud install, follow those steps:</p>
 +<ol class="arabic simple">
- <li>Extract ownCloud to your webserver</li>
- <li>Copy over your config folder</li>
- <li>Copy over your data folder</li>
- <li>Import your database</li>
++<li>Backup data/config folders and your database (look at “Backing Up ownCloud”)</li>
++<li>Move your data</li>
++<li>Restore your data/config folders and your database (look at “Restore ownCloud”)</li>
 +<li>Update config.php of any changes to your database connection</li>
 +</ol>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/maintenance/restore.html
index 5f7d90b,0000000..37d147c
mode 100644,000000..100644
--- a/core/doc/admin/maintenance/restore.html
+++ b/core/doc/admin/maintenance/restore.html
@@@ -1,193 -1,0 +1,196 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
-     <title>Backing Up ownCloud — ownCloud Administrators Manual 6.0 documentation</title>
++    <title>Restoring ownCloud — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Maintenance" href="index.html" />
-     <link rel="next" title="Issues" href="../issues/index.html" />
++    <link rel="next" title="Migrating ownCloud Installations" href="migrating.html" />
 +    <link rel="prev" title="Updating ownCloud" href="update.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">Admin Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Maintenance</a><ul class="current">
- <li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
++<li class="toctree-l2"><a class="reference internal" href="backup.html">Backing Up ownCloud</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="update.html">Updating ownCloud</a></li>
- <li class="toctree-l2 current"><a class="current reference internal" href="">Backing Up ownCloud</a><ul>
- <li class="toctree-l3"><a class="reference internal" href="#backup-folders">Backup Folders</a></li>
- <li class="toctree-l3"><a class="reference internal" href="#backup-database">Backup Database</a></li>
++<li class="toctree-l2 current"><a class="current reference internal" href="">Restoring ownCloud</a><ul>
++<li class="toctree-l3"><a class="reference internal" href="#restore-folders">Restore Folders</a></li>
++<li class="toctree-l3"><a class="reference internal" href="#restore-database">Restore Database</a></li>
 +</ul>
 +</li>
++<li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../issues/index.html">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
-   <div class="section" id="backing-up-owncloud">
- <h1>Backing Up ownCloud<a class="headerlink" href="#backing-up-owncloud" title="Permalink to this headline">¶</a></h1>
- <p>To backup an ownCloud installation there are three main things you need to retain:</p>
++  <div class="section" id="restoring-owncloud">
++<h1>Restoring ownCloud<a class="headerlink" href="#restoring-owncloud" title="Permalink to this headline">¶</a></h1>
++<p>To restore an ownCloud installation there are three main things you need to restore:</p>
 +<ol class="arabic simple">
 +<li>The config folder</li>
 +<li>The data folder</li>
- <li>The database (found in the data folder for sqlite installs)</li>
- </ol>
- <p>To restore an ownCloud instance:</p>
- <ol class="arabic simple">
- <li>Extract ownCloud to your webserver</li>
- <li>Copy over your config folder with your backed up config folder</li>
- <li>Copy over your data folder with your backed up data folder</li>
- <li>Import your database</li>
- <li>Update config.php of any changes to your database connection</li>
++<li>The database</li>
 +</ol>
- <div class="section" id="backup-folders">
- <h2>Backup Folders<a class="headerlink" href="#backup-folders" title="Permalink to this headline">¶</a></h2>
- <p>Simply copy your config and data folder(or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment.</p>
++<div class="section" id="restore-folders">
++<h2>Restore Folders<a class="headerlink" href="#restore-folders" title="Permalink to this headline">¶</a></h2>
++<div class="admonition note">
++<p class="first admonition-title">Note</p>
++<p class="last">This guide assumes that your previous backup is called “owncloud-dirbkp”</p>
++</div>
++<p>Simply copy your config and data folder (or even your whole ownCloud install and data folder) to a place outside of your ownCloud environment. You could use this command:</p>
++<blockquote>
++<div>rsync -Aax owncloud-dirbkp/ owncloud/</div></blockquote>
++</div>
++<div class="section" id="restore-database">
++<h2>Restore Database<a class="headerlink" href="#restore-database" title="Permalink to this headline">¶</a></h2>
++<div class="admonition note">
++<p class="first admonition-title">Note</p>
++<p class="last">This guide assumes that your previous backup is called “owncloud-sqlbkp.bak”</p>
 +</div>
- <div class="section" id="backup-database">
- <h2>Backup Database<a class="headerlink" href="#backup-database" title="Permalink to this headline">¶</a></h2>
 +<div class="section" id="mysql">
 +<h3>MySQL<a class="headerlink" href="#mysql" title="Permalink to this headline">¶</a></h3>
 +<p>MySQL is the recommended database engine. To backup MySQL:</p>
 +<blockquote>
- <div>mysqldump –lock-tables -u [username] -p[password] > owncloud.sql</div></blockquote>
++<div>mysql -h [server] -u [username] -p[password] < owncloud-sqlbkp.bak</div></blockquote>
 +</div>
 +<div class="section" id="sqlite">
 +<h3>SQLite<a class="headerlink" href="#sqlite" title="Permalink to this headline">¶</a></h3>
 +<blockquote>
- <div>sqlite3 owncloud.db .dump > owncloud.bak</div></blockquote>
++<div>sqlite3 data/owncloud.db .dump < owncloud-sqlbkp.bak</div></blockquote>
 +</div>
 +<div class="section" id="postgresql">
 +<h3>PostgreSQL<a class="headerlink" href="#postgresql" title="Permalink to this headline">¶</a></h3>
 +<blockquote>
- <div>pg_dump owncloud > owncloud.bak</div></blockquote>
++<div>PGPASSWORD=”password” pg_restore -c -d owncloud -h [server] -U [username] owncloud-sqlbkp.bak</div></blockquote>
 +</div>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/maintenance/update.html
index 2788e5b,0000000..61c5fc7
mode 100644,000000..100644
--- a/core/doc/admin/maintenance/update.html
+++ b/core/doc/admin/maintenance/update.html
@@@ -1,215 -1,0 +1,212 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Updating ownCloud — ownCloud Administrators Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud Administrators Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Maintenance" href="index.html" />
-     <link rel="next" title="Backing Up ownCloud" href="backup.html" />
-     <link rel="prev" title="Migrating ownCloud Installations" href="migrating.html" />
++    <link rel="next" title="Restoring ownCloud" href="restore.html" />
++    <link rel="prev" title="Backing Up ownCloud" href="backup.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud Administrators Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">Admin Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../configuration/index.html">Configuration</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Maintenance</a><ul class="current">
- <li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
++<li class="toctree-l2"><a class="reference internal" href="backup.html">Backing Up ownCloud</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Updating ownCloud</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#update">Update</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#upgrade">Upgrade</a></li>
 +</ul>
 +</li>
- <li class="toctree-l2"><a class="reference internal" href="backup.html">Backing Up ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="restore.html">Restoring ownCloud</a></li>
++<li class="toctree-l2"><a class="reference internal" href="migrating.html">Migrating ownCloud Installations</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../issues/index.html">Issues</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="updating-owncloud">
 +<h1>Updating ownCloud<a class="headerlink" href="#updating-owncloud" title="Permalink to this headline">¶</a></h1>
- <div class="section" id="update">
- <h2>Update<a class="headerlink" href="#update" title="Permalink to this headline">¶</a></h2>
- <p>Updating means updating ownCloud to the latest <em>point release</em>, e.g. ownCloud 4.0.6 → 4.0.7. To update an ownCloud installation manually, follow those steps:</p>
 +<div class="admonition note">
 +<p class="first admonition-title">Note</p>
- <p class="last">If you have installed ownCloud from a repository, your package management should take care of it.</p>
++<p class="last">If you have installed ownCloud from a repository, your package management should take care of it. Probably you will need to look for compatible third party applications yourself. <strong>Always do backups anyway.</strong></p>
 +</div>
++<div class="section" id="update">
++<h2>Update<a class="headerlink" href="#update" title="Permalink to this headline">¶</a></h2>
++<p>Updating means updating ownCloud to the latest <em>point release</em>, e.g. ownCloud 4.0.6 → 4.0.7. This procedure uses the ownCloud updater plugin called “Updater”: it’s an internal application already present in your ownCloud installation.</p>
++<p>To update ownCloud, follow those steps:</p>
 +<ol class="arabic simple">
- <li>Make a backup.</li>
- <li>Unpack the release tarball in the owncloud directory, i.e. copy all new files into the ownCloud installation.</li>
- <li>Make sure that the file permissions are correct.</li>
- <li>After the next page request the update procedures will run.</li>
++<li>Make a backup of the ownCloud folder and the database.</li>
++<li>Make sure that updater plugin is enabled.</li>
++<li>Navigate to the ‘Admin’ page.</li>
++<li>Click ‘Update’.</li>
++<li>Refresh the page with Ctrl+F5.</li>
 +</ol>
- <p>Assuming your ownCloud installation is at <strong>./owncloud/</strong> and you want to update to the latest version, you could do the following:</p>
- <p>Use rsync in archive mode (this leaves file owner, permissions, and time stamps untouched) to recursively copy all content from <strong>./owncloud/</strong> to a backup directory which contains the current date:</p>
- <div class="highlight-python"><pre>rsync -a owncloud/ owncloud_bkp`date +"%Y%m%d"`/</pre>
- </div>
- <p>Download the latest version to the working directory:</p>
- <div class="highlight-python"><pre>wget http://download.owncloud.org/community/owncloud-latest.tar.bz2</pre>
- </div>
- <p>Extract content of archive to <strong>./owncloud_latest/</strong>:</p>
- <div class="highlight-python"><pre>mkdir owncloud_latest; tar -C owncloud_latest -xjf owncloud-latest.tar.bz2</pre>
- </div>
- <p>Use rsync to recursivly copy extracted files (new) to ownCloud installation (old) using modification times of the new files, but preserving owner and permissions of the old files:</p>
- <div class="admonition warning">
- <p class="first admonition-title">Warning</p>
- <p class="last">You should not use this [–inplace] option to update files that are being accessed by others <em>(from rysnc man page)</em></p>
- </div>
- <div class="highlight-python"><pre>rsync --inplace -rtv owncloud_latest/owncloud/ owncloud/</pre>
- </div>
- <p>Clean up:</p>
- <div class="highlight-python"><pre>rm -rf owncloud-latest.tar.bz2 owncloud_latest/</pre>
- </div>
++<p>If this procedure doesn’t work (for example, ownCloud 5.0.10 doesn’t show new any new version) you could try to perform a full upgrade to update to the lastest point release (see below).</p>
 +</div>
 +<div class="section" id="upgrade">
 +<h2>Upgrade<a class="headerlink" href="#upgrade" title="Permalink to this headline">¶</a></h2>
 +<p>Upgrade is to bring an ownCloud instance to a new <em>major release</em>, e.g.
 +ownCloud 4.0.7 → 4.5.0. Always do backups anyway.</p>
 +<p>To upgrade ownCloud, follow those steps:</p>
- <ol class="arabic simple">
- <li>Make sure that you ran the latest point release of the major ownCloud
++<ol class="arabic">
++<li><p class="first">Make sure that you ran the latest point release of the major ownCloud
 +version, e.g. 4.0.7 in the 4.0 series. If not, update to that version first
- (see above).</li>
- <li><strong>Make a backup of the ownCloud folder and the database</strong></li>
- <li>Deactivate all third party applications.</li>
- <li>Delete everything from your ownCloud installation directory, except data and
- config.</li>
- <li>Unpack the release tarball in the owncloud directory (or copy the
- files thereto).</li>
- <li>Make sure that the file permissions are correct.</li>
- <li>With the next page request the update procedures will run.</li>
- <li>If you had 3rd party applications, check if they provide versions compatible
- with the new release.</li>
++(see above).</p>
++</li>
++<li><p class="first">Make a backup of the ownCloud folder and the database.</p>
++</li>
++<li><p class="first">Download the latest version to the working directory:</p>
++<blockquote>
++<div><p>wget <a class="reference external" href="http://download.owncloud.org/community/owncloud-latest.tar.bz2">http://download.owncloud.org/community/owncloud-latest.tar.bz2</a></p>
++</div></blockquote>
++</li>
++<li><p class="first">Deactivate all third party applications.</p>
++</li>
++<li><p class="first">Delete everything from your ownCloud installation directory, except data and
++config. Assuming that it’s your working directory, you could execute this command:</p>
++<blockquote>
++<div><p>ls | grep -v ‘(data)|(config)’ | xargs rm -r</p>
++</div></blockquote>
++</li>
++<li><p class="first">Unpack the release tarball in the owncloud directory (or copy the
++files thereto). Assuming that your installation directory is called ‘owncloud’ and that it’s inside your working directory, you could execute this command:</p>
++<blockquote>
++<div><p>tar xfj owncloud-latest.tar.bz2</p>
++</div></blockquote>
++</li>
++<li><p class="first">With the next page request the update procedures will run.</p>
++</li>
++<li><p class="first">If you had 3rd party applications, check if they provide versions compatible
++with the new release. If so, install and enable them, update procedures will run if needed.</p>
++</li>
 +</ol>
- <p>If so, install and enable them, update procedures will run if needed.  9. If
- you installed ownCloud from a repository, your package management should take
- care of it. Probably you will need to look for compatible third party
- applications yourself. Always do backups anyway.</p>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/admin/searchindex.js
index 6005162,0000000..baba201
mode 100644,000000..100644
--- a/core/doc/admin/searchindex.js
+++ b/core/doc/admin/searchindex.js
@@@ -1,1 -1,0 +1,1 @@@
- Search.setIndex({objects:{},terms:{retain:[18,35],four:28,token_secret:27,sorri:21,loginfilt:32,aur:25,swap:14,under:[22,19,17,14],worth:19,everi:[32,19,6,21,31],affect:[25,21],upload:[12,33,2,22,14,9,11],verif:[5,11,21],seper:32,"10g":33,enjoi:32,second:[32,21],even:[18,22,33],dialogu:21,followsymlink:25,asid:22,"10t15":7,"new":[12,25,32,4,5,31,21],subtre:32,abov:[15,25,4,6,14,31,21],never:[31,21],here:[15,0,33,2,22,21],studio:1,path:[15,23,24,2,33,26,27,29,21],apps_path:26,uuidattribu [...]
++Search.setIndex({objects:{},terms:{retain:19,four:29,token_secret:28,sorri:12,loginfilt:33,aur:26,swap:15,under:[23,20,21,15],worth:20,everi:[33,20,7,12,32],affect:[26,12],upload:[13,34,2,23,15,10,22],verif:[6,22,12],seper:33,"10g":34,enjoi:33,second:[33,12],even:[19,23,35,34],dialogu:12,followsymlink:26,asid:23,"10t15":8,"new":[13,26,33,5,6,32,12],xfj:5,abov:[16,26,5,7,15,32,12],never:[32,12],here:[16,0,34,2,23,12],studio:1,path:[16,24,25,2,34,27,28,30,12],apps_path:27,uuidattribut:33, [...]
diff --cc core/doc/user/_images/external_google_drive_1_sign_in.png
index 0000000,0000000..43db0e1
new file mode 100644
Binary files differ
diff --cc core/doc/user/_images/external_google_drive_2_verify.png
index 0000000,0000000..e055bc0
new file mode 100644
Binary files differ
diff --cc core/doc/user/_images/external_google_drive_3_create_project.png
index 0000000,0000000..5c4d660
new file mode 100644
Binary files differ
diff --cc core/doc/user/_images/external_google_drive_4_enable_api.png
index 0000000,0000000..5d695e3
new file mode 100644
Binary files differ
diff --cc core/doc/user/_images/external_google_drive_5_setup_ownCloud.png
index 0000000,0000000..35b4ce4
new file mode 100644
Binary files differ
diff --cc core/doc/user/_images/external_google_drive_6_accept.png
index 0000000,0000000..450474a
new file mode 100644
Binary files differ
diff --cc core/doc/user/_sources/contents.txt
index 9e20c6c,0000000..e92d37e
mode 100644,000000..100644
--- a/core/doc/user/_sources/contents.txt
+++ b/core/doc/user/_sources/contents.txt
@@@ -1,27 -1,0 +1,28 @@@
 +.. _contents:
 +
 +===============================
 +ownCloud documentation contents
 +===============================
 +
 +.. toctree::
 +    :hidden:
 +
 +    index
 +
 +.. toctree::
 +    :maxdepth: 3
 +
 +    webinterface
 +    files/index
 +    pim/index
 +    bookmarks
 +    mediaplayer
 +    migration
-     
++    external_storage/google_drive
++
 +
 +
 +Indices and tables
 +==================
 +
 +* :ref:`genindex`
diff --cc core/doc/user/_sources/external_storage/google_drive.txt
index 0000000,0000000..86e7cfa
new file mode 100644
--- /dev/null
+++ b/core/doc/user/_sources/external_storage/google_drive.txt
@@@ -1,0 -1,0 +1,61 @@@
++External storage
++================
++
++Google Drive
++------------
++
++1. All applications that access a Google API must be registered through the "Google Cloud Console" which can be accessed using the following URL:
++
++::
++
++  https://cloud.google.com/console
++
++2. Enter your Google login credentials and press the "Sign in" button.
++
++.. image:: ../images/external_google_drive_1_sign_in.png
++
++3. Enter your verification code which has been sent to you by SMS or the Authenticator App and press the "Verify" button.
++
++.. image:: ../images/external_google_drive_2_verify.png
++
++4. Create a project, e.g. "ownCloud-Project"
++
++.. image:: ../images/external_google_drive_3_create_project.png
++
++5. Select the project and choose the APIs & auth menu entry.
++
++6. Make sure that the "Drive API" / "Drive SDK" status is set to "ON" in the APIs menu.
++
++.. image:: ../images/external_google_drive_4_enable_api.png
++
++7. Click on the gear-wheel-button behind "Drive API" or "Drive SDK" and choose the "API access" menu entry.
++
++8. Click on the Create another "client ID..." button and fill in the branding information.
++
++9. Click on the "Next" button and create a new client ID by selecting "Web application" as application type.
++
++10. Next to your site or hostname click on the "Edit settings ..." button.
++
++11. Enter the following URLs to the "Authorized Redirect URIs" list and press the Update-button.
++
++::
++
++  https://your-internet-domain/owncloud/index.php/settings/personal
++  https://your-internet-domain/owncloud/index.php/settings/admin
++
++**Attention:** Make sure that the URLs contain a valid Internet domain name and that this domain name is also used to access ownCloud, otherwise these URLs will not be accepted. This does not mean that ownCloud need to be accessible from the Internet, but that the domain name is send to Google to verify if the redirect URIs are valid.
++
++12. Login into ownCloud using the previously entered Internet domain.
++
++13. Click on the "Add storage" button in the ownCloud Admin settings dialog to add a Google Drive.
++
++14. Enter the folder name which should be used to access the share, e.g. "GDrive", enter the Google OAuth 2.0 client id and client secret and choose the user or group who should be allowed to access the Google Drive (Applicable).
++
++.. image:: ../images/external_google_drive_5_setup_ownCloud.png
++
++15. Now press the "Grant Access" button and you will finally be redirected to a Google website.
++
++
++16. Click on the "Accept" button to confirm that you accept the Google data usage and data security policy.
++
++.. image:: ../images/external_google_drive_6_accept.png
diff --cc core/doc/user/_sources/files/index.txt
index 00e5cf2,0000000..b41dd8b
mode 100644,000000..100644
--- a/core/doc/user/_sources/files/index.txt
+++ b/core/doc/user/_sources/files/index.txt
@@@ -1,12 -1,0 +1,14 @@@
 +=======================
 +Files & Synchronization
 +=======================
 +
 +.. toctree::
 +   :maxdepth: 1
 +
 +   files
 +   versioncontrol
 +   deletedfiles
 +   sync
 +   encryption
++   quota
++   configuring_big_file_upload
diff --cc core/doc/user/_sources/files/quota.txt
index 0000000,0000000..09209fc
new file mode 100644
--- /dev/null
+++ b/core/doc/user/_sources/files/quota.txt
@@@ -1,0 -1,0 +1,83 @@@
++Storage Quota
++=============
++
++ownCloud makes it possible to specify a storage quota for users which is the **maximum space** a user is allowed to use for files located in their individual home storage.
++
++.. note:: When setting a quota, administrators need to be aware that it **only applies to actual files**, not application metadata. This means that when allocating a quota, they need to make sure there at least 10% more space available for a given user.
++
++Checking the available space
++----------------------------
++
++You can check your available space by going to the "Personal" page from the top-right menu.
++
++The available space of a given user is calculated using the following formula::
++
++    available_space = min(quota, disk_free_space) - used_space
++
++``disk_free_space`` is the space available on the partition on which the user's home storage is located on the server. It could happen that the available space on that partition is less than the user's quota.
++
++Sharing
++-------
++
++When sharing files or directories, their used space is counted in the owner's quota.
++
++Shared files
++~~~~~~~~~~~~
++
++If user A shares a file F with user B, the size of F will be counted in user A's storage, even if the file is modified or its size is increased by user B.
++
++Shared directories
++~~~~~~~~~~~~~~~~~~
++
++If user A shares a directory D with user B, any file that is modified or uploaded by user B inside of directory D will count in user A's used space.
++
++Resharing
++~~~~~~~~~
++
++When resharing a file or a directory, the used space is still counted in the quota of the owner who shared it initially.
++
++Public sharing with upload permission
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++If user A publicly shares (share with link) a directory D and enables the "public upload" permission, people with the link will be able to upload files into D and their sizes will be counted in user A's used space.
++
++Excluded from quota
++-------------------
++
++Metadata and cache
++~~~~~~~~~~~~~~~~~~
++
++Application metadata and cached information are excluded from the total used space.
++
++Such data could be thumbnails (icon previews, pictures app), temporary files, encryption keys, etc.
++
++Some apps are also storing information directly in the database (not as files) like the :doc:`calendar <../pim/calendar>` and :doc:`contacts <../pim/contacts>` apps. This data is also excluded from the total used space.
++
++
++Deleted files
++~~~~~~~~~~~~~
++
++When deleting files, these are moved/copied to the :doc:`trashbin <deletedfiles>` at first. These files do not count in the user's used space.
++
++For example with a quota of 10 GB, if the user has 4 GB used space and 5 GB in the trashbin, they will still see 6 GB free space. If the user uploads 6 GB of files at this point, the :doc:`trashbin app <deletedfiles>` will discard deleted files when necessary to make room for the new files.
++
++Version Control
++~~~~~~~~~~~~~~~
++
++The size of older file versions does not count in the used space.
++
++For example with a quota of 10 GB, if the user has 4 GB used space and 5 GB of older file versions, they will still see 6 GB free space. If the user uploads 6 GB of files at this point, the :doc:`versions app <versioncontrol>` will discard older versions when necessary to make room for the new files.
++
++See :doc:`versioncontrol` for details about the version expiration behavior. 
++
++Encryption
++~~~~~~~~~~
++
++When files are :doc:`encrypted <encryption>`, they take slightly more physical space than the original files. Only the original size will be counted in the used space.
++
++External storage
++~~~~~~~~~~~~~~~~
++
++When mounting external storage, either as administrator or as user, the space available on that storage is not taken into account for the user's quota.
++It is currently not possible to set a quota for external storage.
++
diff --cc core/doc/user/_sources/index.txt
index 7632042,0000000..9119fd4
mode 100644,000000..100644
--- a/core/doc/user/_sources/index.txt
+++ b/core/doc/user/_sources/index.txt
@@@ -1,63 -1,0 +1,64 @@@
 +.. _index:
 +
 +==================
 +User Documentation
 +==================
 +**Welcome to ownCloud, your self-hosted file sync and share solution.**
 +
 +OwnCloud is open source file sync and share software for everyone from individuals operating the free Community Edition, to large enterprises and service providers operating ownCloud Enterprise Edition. ownCloud provides a safe, secure and compliant file sync and share solution on servers you control.
 +
 +With ownCloud you can share one or more folders on your PC, and sync them with your ownCloud server. Place files in your local shared directories, and those files are immediately synced to the server, and then to other PCs via the desktop client. Not near a desktop client? No problem, simply log in with the web client and manage your files there. The Android and iOS mobile apps allow you to browse, download and upload photos and videos. On Android, you may also create, download, edit an [...]
 +
 +Whether using a mobile device, a workstation, or a web client, ownCloud provides the ability to put the right files in the right hands at the right time on any device in one simple-to-use, secure, private and controlled solution. After all, with ownCloud, it’s Your Cloud, Your Data, Your Way.
 +
 +Webinterface
 +============
 +This chapter contains a general overview how you access ownCloud from a Browser like Firefox, Chrome or Internet Explorer
 +
 +* :doc:`webinterface`
 +
 +Files & Synchronization
 +=======================
 +This chapter contains information about accessing your files via WebDav and Synchronization.
 +
 +* :doc:`files/files`
 +* :doc:`files/sync`
 +* :doc:`files/versioncontrol`
 +* :doc:`files/deletedfiles`
 +* :doc:`files/encryption`
++* :doc:`files/quota`
 +* :doc:`files/configuring_big_file_upload`
 +
 +
 +Contacts & Calendar
 +===================
 +Contacts & Calendar web interface, export, import and synchronization.
 +
 +* :doc:`pim/calendar`
 +* :doc:`pim/contacts`
 +* :doc:`pim/sync_ios`
 +* :doc:`pim/sync_kde`
 +* :doc:`pim/sync_osx`
 +
 +Bookmarks
 +=========
 +Web interface for managing your bookmarks.
 +
 +* :doc:`bookmarks`
 +
- Mediaplayer
- ===========
- Web interface for playing music in your browser.
- 
- * :doc:`mediaplayer`
- 
 +Backup
 +======
 +Import and export your user account settings.
 +
 +* :doc:`migration`
 +
++External storage
++================
++Mount external storages into ownCloud.
++
++* :doc:`external_storage/google_drive`
++
 +Indices and tables
 +==================
 +
 +* :ref:`genindex`
diff --cc core/doc/user/bookmarks.html
index 08876eb,0000000..117415e
mode 100644,000000..100644
--- a/core/doc/user/bookmarks.html
+++ b/core/doc/user/bookmarks.html
@@@ -1,203 -1,0 +1,203 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Using the Bookmarks App — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="index.html" />
-     <link rel="next" title="Native Media Player Support" href="mediaplayer.html" />
++    <link rel="next" title="User Account Migration" href="migration.html" />
 +    <link rel="prev" title="Troubleshooting" href="pim/troubleshooting.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1 current"><a class="current reference internal" href="">Using the Bookmarks App</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="#the-main-interface">The main interface</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#add-a-bookmark">Add a bookmark</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#edit-delete-a-bookmark">Edit/delete a bookmark</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#search">Search</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="#the-bookmarklet">The bookmarklet</a></li>
 +</ul>
 +</li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="using-the-bookmarks-app">
 +<h1>Using the Bookmarks App<a class="headerlink" href="#using-the-bookmarks-app" title="Permalink to this headline">¶</a></h1>
 +<p>If you want to add a bookmark to the Bookmarks application,
 +you can either use the main interface or the bookmarklet.</p>
 +<div class="section" id="the-main-interface">
 +<h2>The main interface<a class="headerlink" href="#the-main-interface" title="Permalink to this headline">¶</a></h2>
 +<div class="section" id="add-a-bookmark">
 +<h3>Add a bookmark<a class="headerlink" href="#add-a-bookmark" title="Permalink to this headline">¶</a></h3>
 +<p>The main ownCloud interface contains 3 fields at the top where
 +you can enter the website address (or URL), the title of your bookmark and
 +a set of tags separated from each other by a space.</p>
 +<div class="figure">
 +<img alt="_images/bookmark_addurl.jpg" src="_images/bookmark_addurl.jpg" />
 +</div>
 +<p>In this example, we have added the page : <a class="reference external" href="http://wikipedia.org">http://wikipedia.org</a> with the title “Wikipedia”
 +and some tags describing what wikipedia is (for an easier search later on).</p>
 +</div>
 +<div class="section" id="edit-delete-a-bookmark">
 +<h3>Edit/delete a bookmark<a class="headerlink" href="#edit-delete-a-bookmark" title="Permalink to this headline">¶</a></h3>
 +<p>You also have the possibility to edit or delete your bookmark.
 +For that, just hover on the bookmark and click on the little pencil if you wish to edit the bookmark
 +or on the cross if you want to the delete it.</p>
 +<p>The bookmark will then be filled into the 3 fields at the top of the screen.
 +Modify your bookmark to your need then hit the save button to persist the change.</p>
 +</div>
 +<div class="section" id="search">
 +<h3>Search<a class="headerlink" href="#search" title="Permalink to this headline">¶</a></h3>
 +<p>If you click on a tag, ownCloud will only display the bookmarks that
 +are described with this tag.</p>
 +<p>You can also use the search bar of owncloud in the top right of your screen.</p>
 +<p>Simply click on the “Bookmarks” menu in the sidebar to come back to
 +the default view.</p>
 +</div>
 +</div>
 +<div class="section" id="the-bookmarklet">
 +<h2>The bookmarklet<a class="headerlink" href="#the-bookmarklet" title="Permalink to this headline">¶</a></h2>
 +<div class="figure">
 +<img alt="_images/bookmark_setting.jpg" src="_images/bookmark_setting.jpg" />
 +</div>
 +<p>The creator of this app understand that people won’t come,
 +open the ownCloud page to add the bookmark when the see a cool site.
 +This is why they have made this cool “bookmarklet”.</p>
 +<p>A bookmarklet is small button that you can drag and drop in your bookmarks.
 +The next time you see a cool new site, press on this special bookmark,
 +it will add the site to your ownCloud bookmarks.</p>
 +<p>To find this bookmark go to your personnal preference and search for
 +the “Bookmarklet” item.</p>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/contents.html
index 2e9fdaf,0000000..a9aff4d
mode 100644,000000..100644
--- a/core/doc/user/contents.html
+++ b/core/doc/user/contents.html
@@@ -1,231 -1,0 +1,241 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>ownCloud documentation contents — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="index.html" />
 +    <link rel="next" title="User Documentation" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="#">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="#">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">User Documentation</a></li>
 +</ul>
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="owncloud-documentation-contents">
 +<span id="contents"></span><h1>ownCloud documentation contents<a class="headerlink" href="#owncloud-documentation-contents" title="Permalink to this headline">¶</a></h1>
 +<div class="toctree-wrapper compound">
 +</div>
 +<div class="toctree-wrapper compound">
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="webinterface.html#overview">Overview</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="files/files.html">Accessing your Files (WebDav)</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="files/files.html#linux">Linux</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="files/files.html#macos">MacOS</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="files/files.html#windows">Windows</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="files/files.html#sync-client">Sync Client</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="files/files.html#mobile">Mobile</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="files/versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="files/deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="files/sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="files/encryption.html">Files Encryption</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="files/encryption.html#what-gets-encrypted">What gets encrypted</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="files/encryption.html#decrypt-your-data-again">Decrypt your data again</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="files/encryption.html#settings">Settings</a></li>
 +</ul>
 +</li>
++<li class="toctree-l2"><a class="reference internal" href="files/quota.html">Storage Quota</a><ul>
++<li class="toctree-l3"><a class="reference internal" href="files/quota.html#checking-the-available-space">Checking the available space</a></li>
++<li class="toctree-l3"><a class="reference internal" href="files/quota.html#sharing">Sharing</a></li>
++<li class="toctree-l3"><a class="reference internal" href="files/quota.html#excluded-from-quota">Excluded from quota</a></li>
++</ul>
++</li>
++<li class="toctree-l2"><a class="reference internal" href="files/configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="pim/contacts.html">Using the Contacts App</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="pim/contacts.html#adding-contacts">Adding contacts</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/contacts.html#creating-new-address-books">Creating new address books</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/contacts.html#keeping-your-address-book-in-sync">Keeping your address book in sync</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="pim/calendar.html">Using the Calendar App</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="pim/calendar.html#creating-a-calendar">Creating a calendar</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/calendar.html#synchronising-calendars-with-caldav">Synchronising Calendars with CalDav</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/calendar.html#creating-events">Creating events</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/calendar.html#exporting-importing-events">Exporting / Importing events</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/calendar.html#why-is-the-calendar-app-asking-for-my-current-location">Why is the calendar app asking for my current location?</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="pim/sync_ios.html">iOS - Synchronize iPhone/iPad</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="pim/sync_ios.html#calendar">Calendar</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="pim/sync_ios.html#address-book">Address book</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="pim/sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="pim/sync_thunderbird.html">Thunderbird - Synchronize Address Book</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="pim/sync_thunderbird.html#address-book">Address book</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="pim/sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="pim/troubleshooting.html">Troubleshooting</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="pim/troubleshooting.html#service-discovery">Service discovery</a></li>
 +</ul>
 +</li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="bookmarks.html#the-main-interface">The main interface</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="bookmarks.html#add-a-bookmark">Add a bookmark</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="bookmarks.html#edit-delete-a-bookmark">Edit/delete a bookmark</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="bookmarks.html#search">Search</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="bookmarks.html#the-bookmarklet">The bookmarklet</a></li>
 +</ul>
 +</li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="migration.html#export">Export</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="migration.html#import">Import</a></li>
 +</ul>
 +</li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a><ul>
++<li class="toctree-l2"><a class="reference internal" href="external_storage/google_drive.html#google-drive">Google Drive</a></li>
++</ul>
++</li>
 +</ul>
 +</div>
 +<div class="section" id="indices-and-tables">
 +<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
 +<ul class="simple">
 +<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
 +</ul>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/external_storage/google_drive.html
index 0000000,0000000..e182653
new file mode 100644
--- /dev/null
+++ b/core/doc/user/external_storage/google_drive.html
@@@ -1,0 -1,0 +1,197 @@@
++
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
++  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
++
++
++<html xmlns="http://www.w3.org/1999/xhtml">
++  <head>
++    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
++    
++    <title>External storage — ownCloud User Manual 6.0 documentation</title>
++    
++    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
++    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
++    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
++    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
++    
++    <script type="text/javascript">
++      var DOCUMENTATION_OPTIONS = {
++        URL_ROOT:    '../',
++        VERSION:     '6.0',
++        COLLAPSE_INDEX: false,
++        FILE_SUFFIX: '.html',
++        HAS_SOURCE:  true
++      };
++    </script>
++    <script type="text/javascript" src="../_static/jquery.js"></script>
++    <script type="text/javascript" src="../_static/underscore.js"></script>
++    <script type="text/javascript" src="../_static/doctools.js"></script>
++    <script type="text/javascript" src="../_static/bootstrap.js"></script>
++    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
++    <link rel="prev" title="User Account Migration" href="../migration.html" />
++<script type="text/javascript">
++(function () {
++  /**
++   * Patch TOC list.
++   *
++   * Will mutate the underlying span to have a correct ul for nav.
++   *
++   * @param $span: Span containing nested UL's to mutate.
++   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
++   */
++  var patchToc = function ($ul, minLevel) {
++    var findA;
++
++    // Find all a "internal" tags, traversing recursively.
++    findA = function ($elem, level) {
++      var level = level || 0,
++        $items = $elem.find("> li > a.internal, > ul, > li > ul");
++
++      // Iterate everything in order.
++      $items.each(function (index, item) {
++        var $item = $(item),
++          tag = item.tagName.toLowerCase(),
++          pad = 15 + ((level - minLevel) * 10);
++
++        if (tag === 'a' && level >= minLevel) {
++          // Add to existing padding.
++          $item.css('padding-left', pad + "px");
++          console.log(level, $item, 'padding-left', pad + "px");
++        } else if (tag === 'ul') {
++          // Recurse.
++          findA($item, level + 1);
++        }
++      });
++    };
++
++    console.log("HERE");
++    findA($ul);
++  };
++
++  $(document).ready(function () {
++    // Add styling, structure to TOC's.
++    $(".dropdown-menu").each(function () {
++      $(this).find("ul").each(function (index, item){
++        var $item = $(item);
++        $item.addClass('unstyled');
++      });
++      $(this).find("li").each(function () {
++        $(this).parent().append(this);
++      });
++    });
++
++    // Patch in level.
++    patchToc($("ul.globaltoc"), 2);
++    patchToc($("ul.localtoc"), 2);
++
++    // Enable dropdown.
++    $('.dropdown-toggle').dropdown();
++  });
++}());
++</script>
++
++  </head>
++  <body>
++  
++
++<div class="container">
++  <div class="content">
++    <div class="page-header">
++      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
++
++    </div>
++    
++			<div class="row">
++				<div class="span3">
++					<div class="sidebar">
++						<div class="well">
++							<div class="menu-support-container">
++								<ul id="menu-support" class="menu">
++									<ul>
++										<li><a href="../contents.html">Overview</a></li>
++									</ul>
++                  <ul>
++<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
++</ul>
++<ul class="current">
++<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1 current"><a class="current reference internal" href="">External storage</a><ul>
++<li class="toctree-l2"><a class="reference internal" href="#google-drive">Google Drive</a></li>
++</ul>
++</li>
++</ul>
++
++								</ul>
++							</div>
++						</div>
++					</div>
++				</div>
++        
++
++				<div class="span9">
++					<div class="page-content">
++						
++  <div class="section" id="external-storage">
++<h1>External storage<a class="headerlink" href="#external-storage" title="Permalink to this headline">¶</a></h1>
++<div class="section" id="google-drive">
++<h2>Google Drive<a class="headerlink" href="#google-drive" title="Permalink to this headline">¶</a></h2>
++<ol class="arabic simple">
++<li>All applications that access a Google API must be registered through the “Google Cloud Console” which can be accessed using the following URL:</li>
++</ol>
++<div class="highlight-python"><pre>https://cloud.google.com/console</pre>
++</div>
++<ol class="arabic simple" start="2">
++<li>Enter your Google login credentials and press the “Sign in” button.</li>
++</ol>
++<img alt="../_images/external_google_drive_1_sign_in.png" src="../_images/external_google_drive_1_sign_in.png" />
++<ol class="arabic simple" start="3">
++<li>Enter your verification code which has been sent to you by SMS or the Authenticator App and press the “Verify” button.</li>
++</ol>
++<img alt="../_images/external_google_drive_2_verify.png" src="../_images/external_google_drive_2_verify.png" />
++<ol class="arabic simple" start="4">
++<li>Create a project, e.g. “ownCloud-Project”</li>
++</ol>
++<img alt="../_images/external_google_drive_3_create_project.png" src="../_images/external_google_drive_3_create_project.png" />
++<ol class="arabic simple" start="5">
++<li>Select the project and choose the APIs & auth menu entry.</li>
++<li>Make sure that the “Drive API” / “Drive SDK” status is set to “ON” in the APIs menu.</li>
++</ol>
++<img alt="../_images/external_google_drive_4_enable_api.png" src="../_images/external_google_drive_4_enable_api.png" />
++<ol class="arabic simple" start="7">
++<li>Click on the gear-wheel-button behind “Drive API” or “Drive SDK” and choose the “API access” menu entry.</li>
++<li>Click on the Create another “client ID...” button and fill in the branding information.</li>
++<li>Click on the “Next” button and create a new client ID by selecting “Web application” as application type.</li>
++<li>Next to your site or hostname click on the “Edit settings ...” button.</li>
++<li>Enter the following URLs to the “Authorized Redirect URIs” list and press the Update-button.</li>
++</ol>
++<div class="highlight-python"><pre>https://your-internet-domain/owncloud/index.php/settings/personal
++https://your-internet-domain/owncloud/index.php/settings/admin</pre>
++</div>
++<p><strong>Attention:</strong> Make sure that the URLs contain a valid Internet domain name and that this domain name is also used to access ownCloud, otherwise these URLs will not be accepted. This does not mean that ownCloud need to be accessible from the Internet, but that the domain name is send to Google to verify if the redirect URIs are valid.</p>
++<ol class="arabic simple" start="12">
++<li>Login into ownCloud using the previously entered Internet domain.</li>
++<li>Click on the “Add storage” button in the ownCloud Admin settings dialog to add a Google Drive.</li>
++<li>Enter the folder name which should be used to access the share, e.g. “GDrive”, enter the Google OAuth 2.0 client id and client secret and choose the user or group who should be allowed to access the Google Drive (Applicable).</li>
++</ol>
++<img alt="../_images/external_google_drive_5_setup_ownCloud.png" src="../_images/external_google_drive_5_setup_ownCloud.png" />
++<ol class="arabic simple" start="15">
++<li>Now press the “Grant Access” button and you will finally be redirected to a Google website.</li>
++<li>Click on the “Accept” button to confirm that you accept the Google data usage and data security policy.</li>
++</ol>
++<img alt="../_images/external_google_drive_6_accept.png" src="../_images/external_google_drive_6_accept.png" />
++</div>
++</div>
++
++
++					</div>
++				</div>
++			</div>
++    
++  </div>
++</div>
++  </body>
++</html>
diff --cc core/doc/user/files/configuring_big_file_upload.html
index 0af473d,0000000..11d54bb
mode 100644,000000..100644
--- a/core/doc/user/files/configuring_big_file_upload.html
+++ b/core/doc/user/files/configuring_big_file_upload.html
@@@ -1,154 -1,0 +1,166 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Big Files — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
++    <link rel="up" title="Files & Synchronization" href="index.html" />
++    <link rel="next" title="Contacts & Calendar" href="../pim/index.html" />
++    <link rel="prev" title="Storage Quota" href="quota.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
- <ul>
++<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
- <li class="toctree-l1"><a class="reference internal" href="index.html">Files & Synchronization</a></li>
++<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
++<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
++<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
++<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
++<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
++<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2 current"><a class="current reference internal" href="">Big Files</a></li>
++</ul>
++</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="big-files">
 +<h1>Big Files<a class="headerlink" href="#big-files" title="Permalink to this headline">¶</a></h1>
 +<p>There are a few default configuration settings that you will want to change to enable ownCloud to operate
 +more effectively as a self hosted file sync and share server.
 +When uploading through the web client, ownCloud is governed by PHP and Apache.
 +As a default, PHP is configured for only 2 MB uploads.
 +This is not entirely useful, so it is important to increase these variables to the sizes you want to
 +support on your server.
 +Ask your administrator to increase these variables for you or read the section in concern <a class="reference external" href="http://doc.owncloud.com/server/5.0EE/admin_manual/configuration/configuring_big_file_upload.html">within the
 +Admin Documentation.</a></p>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/files/deletedfiles.html
index 58694a4,0000000..1266b0b
mode 100644,000000..100644
--- a/core/doc/user/files/deletedfiles.html
+++ b/core/doc/user/files/deletedfiles.html
@@@ -1,170 -1,0 +1,172 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Deleted Files — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Files & Synchronization" href="index.html" />
 +    <link rel="next" title="Desktop Synchronisation" href="sync.html" />
 +    <link rel="prev" title="Version Control" href="versioncontrol.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Deleted Files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="deleted-files">
 +<h1>Deleted Files<a class="headerlink" href="#deleted-files" title="Permalink to this headline">¶</a></h1>
 +<p>ownCloud keeps a copy of your deleted files in case you need them again. To
 +make sure that the user doesn’t run out of memory the deleted files app
 +manages the size of the deleted files for the user. The app takes care to never
 +use more that 50% of your currently available free space. If your deleted files
 +exceed this limit ownCloud deletes the oldest versions until it meets the memory
 +usage limit again.</p>
 +<p>Beside that ownCloud checks the age of the files every time a new files gets moved
 +to the deleted files. By default deleted files stay in the trash bin for 180 days.
 +The Administrator can adjust this value in the config.php by setting the
 +<strong>*”trashbin_retention_obligation”*</strong> value. Files older than the
 +<strong>*”trashbin_retention_obligation”*</strong> will be deleted permanently.
 +Additionally ownCloud calculates the maximum available space every time
 +a new file was added. If the deleted files exceed the new maximum available space
 +ownCloud will expire old deleted files until we meet the limit again.</p>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/files/encryption.html
index 90f48be,0000000..dadede6
mode 100644,000000..100644
--- a/core/doc/user/files/encryption.html
+++ b/core/doc/user/files/encryption.html
@@@ -1,219 -1,0 +1,221 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Files Encryption — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Files & Synchronization" href="index.html" />
-     <link rel="next" title="Contacts & Calendar" href="../pim/index.html" />
++    <link rel="next" title="Storage Quota" href="quota.html" />
 +    <link rel="prev" title="Desktop Synchronisation" href="sync.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Files Encryption</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#what-gets-encrypted">What gets encrypted</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#decrypt-your-data-again">Decrypt your data again</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#settings">Settings</a></li>
 +</ul>
 +</li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="files-encryption">
 +<h1>Files Encryption<a class="headerlink" href="#files-encryption" title="Permalink to this headline">¶</a></h1>
 +<p>ownCloud ships a encryption app, which allows to encrypt all files stored in
 +your ownCloud. Once the encryption app was enabled by the admin all your files
 +will be encrypted automatically. Encryption and decryption always happens
 +server-side. This enables the user to continue to use all the other apps to
 +view and edit his data. But this also means that the server administrator could
 +intercept your data. Server-Side encryption is especially interesting if you
 +use external storages. This way you can make sure that the storage provider is
 +not able to read your data.</p>
 +<p>Please remember. Once the encryption app is enabled you need your log-in
 +password to decrypt and access your data. By default your data will be lost if
 +you loss your log-in pasword. If you want to protect yourself against password
 +loss store your log-in password on a secure place or enable the recovery key
 +as described below.</p>
 +<div class="section" id="what-gets-encrypted">
 +<h2>What gets encrypted<a class="headerlink" href="#what-gets-encrypted" title="Permalink to this headline">¶</a></h2>
 +<p>The current version encrypts all your files stored in ownCloud.</p>
 +<p>At the moment we don’t encrypt:</p>
 +<ul class="simple">
 +<li>old versions (versions created before the encryption app was enabled)</li>
 +<li>old files in the trash bin (files which were deleted before the encryption app was enabled)</li>
 +<li>image thumbnails from the gallery app</li>
 +<li>search index from the full text search app</li>
 +</ul>
 +<p>All this data is stored directly on your ownCloud server, so you don’t have to worry to expose
 +your data to a third party storage provider.</p>
 +</div>
 +<div class="section" id="decrypt-your-data-again">
 +<h2>Decrypt your data again<a class="headerlink" href="#decrypt-your-data-again" title="Permalink to this headline">¶</a></h2>
 +<p>Corrently there is no way to decrypt your files directly on the server if you decide to stop
 +using the encryption app. The only way to get a comlete copy of your unencrypted data is
 +to download/sync all files as long as the encryption app is enabled. After the encryption
 +app was disabled you can upload your unencrypted data again.</p>
 +<p>It is already planned to add a option to switch from encrypted to unencrypted files
 +directly on the server.</p>
 +</div>
 +<div class="section" id="settings">
 +<h2>Settings<a class="headerlink" href="#settings" title="Permalink to this headline">¶</a></h2>
 +<p>Once the encryption app is enabled you will find some additional settings on
 +your personal settings page.</p>
 +<div class="section" id="recovery-key">
 +<h3>Recovery Key<a class="headerlink" href="#recovery-key" title="Permalink to this headline">¶</a></h3>
 +<p>If the admin enabled the recovery-key you can decide by your own if you
 +want to use this feature for your account. If you enable “Password recovery”
 +the admin will be able to read your data with a special password. This allows
 +him to recover your files in case of password loss. If the recovery-key is not
 +enabled than there is no way to restore your files if you loss your log-in
 +password.</p>
 +</div>
 +<div class="section" id="change-private-key-password">
 +<h3>Change Private Key Password<a class="headerlink" href="#change-private-key-password" title="Permalink to this headline">¶</a></h3>
 +<p>This option will be only available if your log-in password but not your
 +encryption password was changed by your admin. This can happen if your ownCloud
 +provider uses a external user back-end, e.g. LDAP, and changed your log-in
 +password there. In this case you can set your encryption password to your new
 +log-in password by providing your old and new log-in password. The encryption
 +app only works if log-in password and encryption password is identical.</p>
 +</div>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/files/files.html
index 89ce52d,0000000..e6334d3
mode 100644,000000..100644
--- a/core/doc/user/files/files.html
+++ b/core/doc/user/files/files.html
@@@ -1,383 -1,0 +1,385 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Accessing your Files (WebDav) — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Files & Synchronization" href="index.html" />
 +    <link rel="next" title="Version Control" href="versioncontrol.html" />
 +    <link rel="prev" title="Files & Synchronization" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Accessing your Files (WebDav)</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#linux">Linux</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#macos">MacOS</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#windows">Windows</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#sync-client">Sync Client</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#mobile">Mobile</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="accessing-your-files-webdav">
 +<h1>Accessing your Files (WebDav)<a class="headerlink" href="#accessing-your-files-webdav" title="Permalink to this headline">¶</a></h1>
 +<p>Your ownCloud instance can be accessed on every platform via the web interface. There are also options to integrate it with your desktop.</p>
 +<div class="admonition note">
 +<p class="first admonition-title">Note</p>
 +<p class="last">You will have to adjust <strong>youraddress.com/</strong> to the URL of your ownCloud server installation</p>
 +</div>
 +<div class="section" id="linux">
 +<h2>Linux<a class="headerlink" href="#linux" title="Permalink to this headline">¶</a></h2>
 +<div class="section" id="gnome-3-nautilus">
 +<h3>Gnome 3/Nautilus<a class="headerlink" href="#gnome-3-nautilus" title="Permalink to this headline">¶</a></h3>
 +<p>The URL that you have to use to connect to the owncloud installation in nautilus is:</p>
 +<div class="highlight-python"><pre>davs://youraddress.com/owncloud/remote.php/webdav</pre>
 +</div>
 +<img alt="../_images/gnome3_nautilus_webdav.png" src="../_images/gnome3_nautilus_webdav.png" />
 +<p>If your server connection is not HTTPS-secured, use <cite>dav://</cite> instead of <cite>davs://</cite> .</p>
 +</div>
 +<div class="section" id="kde-dolphin">
 +<h3>KDE/Dolphin<a class="headerlink" href="#kde-dolphin" title="Permalink to this headline">¶</a></h3>
 +<p>Click in the adress area and enter:</p>
 +<div class="highlight-python"><pre>webdav://youraddress.com/owncloud/remote.php/webdav</pre>
 +</div>
 +<img alt="../_images/dolphin_webdav.png" src="../_images/dolphin_webdav.png" />
 +<p>or:</p>
 +<ol class="arabic simple">
 +<li>Open Dolphin and click on where it says Network in the left hand Places column.</li>
 +<li>Click on the icon labeled <strong>Add a Network Folder</strong>.</li>
 +<li>It should come up with WebDAV already selected. Make sure it is and then click <strong>Next</strong>.</li>
 +<li>Enter the following settings:</li>
 +</ol>
 +<ul>
 +<li><p class="first">Name: The name you’ll see in the <strong>Places</strong> bookmark, for example ownCloud</p>
 +</li>
 +<li><p class="first">User: Your ownCloud username you use to log in, for example admin</p>
 +</li>
 +<li><p class="first">Server: Your ownCloud domain name, for example <strong>youraddress.com</strong> (without <strong>http://</strong> before or directories afterwards).</p>
 +</li>
 +<li><p class="first">Folder: Enter:</p>
 +<div class="highlight-python"><div class="highlight"><pre><span class="n">owncloud</span><span class="o">/</span><span class="n">remote</span><span class="o">.</span><span class="n">php</span><span class="o">/</span><span class="n">webdav</span>
 +</pre></div>
 +</div>
 +</li>
 +</ul>
 +<ol class="arabic simple" start="5">
 +<li>Create icon checkbox: Tick to get a bookmark in the Places column</li>
 +<li>Port & Encrypted checkbox: Leave as it is unless you have special settings or an SSL certificate.</li>
 +</ol>
 +</div>
 +<div class="section" id="mounting-from-command-line">
 +<h3>Mounting from command line<a class="headerlink" href="#mounting-from-command-line" title="Permalink to this headline">¶</a></h3>
 +<ol class="arabic">
 +<li><p class="first">Install the WebDAV support using the davfs package. On Debian/Ubuntu, you can use:</p>
 +<div class="highlight-python"><pre>sudo apt-get install davfs2</pre>
 +</div>
 +</li>
 +<li><p class="first">Reconfigure davfs2 to allow access to normal users (select Yes when prompted):</p>
 +<div class="highlight-python"><pre>sudo dpkg-reconfigure davfs2</pre>
 +</div>
 +</li>
 +<li><p class="first">Add the users you want to be able to mount the share to the davfs2 group:</p>
 +<div class="highlight-python"><pre>sudo usermod -aG davfs2 <user></pre>
 +</div>
 +</li>
 +<li><p class="first">Edit <tt class="file docutils literal"><span class="pre">/etc/fstab</span></tt> and add the following line for each user who wants to mount the folder (with your details where appropriate):</p>
 +<div class="highlight-python"><pre>youraddress.com/owncloud/remote.php/webdav /home/<username>/owncloud davfs user,rw,noauto 0 0</pre>
 +</div>
 +</li>
 +</ol>
 +<p>Then, as each user who wants to mount the folder:</p>
 +<ol class="arabic">
 +<li><p class="first">Create the folders <strong>owncloud/</strong> and <strong>.davfs2/</strong> in your home directory</p>
 +</li>
 +<li><p class="first">Create the file secrets inside <strong>.davfs2/</strong>, fill it with the following (with your credentials where appropriate):</p>
 +<div class="highlight-python"><pre>youraddress.com/owncloud/remote.php/webdav <username> <password></pre>
 +</div>
 +</li>
 +<li><p class="first">Ensure the file is only writable by you either through the file manager, or via:</p>
 +<div class="highlight-python"><pre>chmod 600 ~/.davfs2/secrets</pre>
 +</div>
 +</li>
 +<li><p class="first">Run the command:</p>
 +<div class="highlight-python"><pre>mount ~/owncloud</pre>
 +</div>
 +</li>
 +<li><p class="first">To automatically mount the folder on login, add the command you used in step 4 to <tt class="file docutils literal"><span class="pre">./.bashrc</span></tt></p>
 +</li>
 +</ol>
 +<div class="section" id="known-issues">
 +<h4>Known Issues<a class="headerlink" href="#known-issues" title="Permalink to this headline">¶</a></h4>
 +<p><strong>Problem:</strong> Resource temporarily unavailable</p>
 +<p><strong>Solution:</strong> If you experience trouble when you create a file in the directory, edit <tt class="file docutils literal"><span class="pre">/etc/davfs2/davfs2.conf</span></tt> and add:</p>
 +<div class="highlight-python"><pre>use_locks 0</pre>
 +</div>
 +<p><strong>Problem:</strong> Certificate warnings</p>
 +<p><strong>Solution:</strong> If you use a self-signed certificate, you will get a warning. If you are willing to take the risk of a man in the middle attack, run this command instead:</p>
 +<div class="highlight-python"><pre>echo "y" | mount ~/owncloud > /dev/null 2>&1</pre>
 +</div>
 +</div>
 +</div>
 +</div>
 +<div class="section" id="macos">
 +<h2>MacOS<a class="headerlink" href="#macos" title="Permalink to this headline">¶</a></h2>
 +<div class="admonition note">
 +<p class="first admonition-title">Note</p>
 +<p class="last">Finder suffers from a <a class="reference external" href="http://code.google.com/p/sabredav/wiki/Finder">series of implementation problems</a> and should only be used if the ownCloud server runs on <strong>Apache</strong> and <strong>mod_php</strong></p>
 +</div>
 +<p>In the Finder, choose <strong>Go > Connect to Server,</strong> type the address of the server in the <strong>Server Address</strong> field, and click <strong>Connect</strong>.</p>
 +<img alt="../_images/osx_webdav1.png" src="../_images/osx_webdav1.png" />
 +<p>The URL that you have to use to connect to the owncloud installation in finder is:</p>
 +<div class="highlight-python"><pre>http://youraddress.com/owncloud/remote.php/webdav</pre>
 +</div>
 +<img alt="../_images/osx_webdav2.png" src="../_images/osx_webdav2.png" />
 +<p>For details, check the respective <a class="reference external" href="http://docs.info.apple.com/article.html?path=Mac/10.6/en/8160.html">vendor documentation</a> at the Apple website.</p>
 +</div>
 +<div class="section" id="windows">
 +<h2>Windows<a class="headerlink" href="#windows" title="Permalink to this headline">¶</a></h2>
 +<p>For Windows a seperate webdav client is recommended to access the files from your server. Choose one from the <a class="reference external" href="http://www.webdav.org/projects/">WebDav Project page</a></p>
 +<p>Should you have to use the native implementation then you can assign ownCloud a drive letter.  This allows you to browse files stored on an ownCloudserver the way you would files stored in a mapped network drive.</p>
 +<p>Using this feature requires network connectivity. If you want to store
 +your files offline, use the ownCloud Client to sync all files on your
 +ownCloud to one or more directories of your local hard drive.</p>
 +<div class="admonition note">
 +<p class="first admonition-title">Note</p>
 +<p class="last">Prior to mapping your drive, you will need to permit the use of Basic Authentication in the Windows Registry. The procedure is documented in <a class="reference external" href="http://support.microsoft.com/kb/841215">KB841215</a> and differs between Windows XP/Server 2003 and Windows Vista/7. Please follow the Knowledge Base article before proceeding, and follow the Vista instructions if you run Windows 7.</p>
 +</div>
 +<div class="section" id="mapping-via-the-command-line">
 +<h3>Mapping via the command line<a class="headerlink" href="#mapping-via-the-command-line" title="Permalink to this headline">¶</a></h3>
 +<p>Suppose your ownCloud is installed at <strong>https://youraddress.com/owncloud</strong>,
 +that is, entering this URL in your webbrowser will bring up the login screen.
 +Running:</p>
 +<div class="highlight-python"><pre>net use Z: https://youraddress.com/owncloud/remote.php/webdav /user:youruser yourpassword</pre>
 +</div>
 +<p>will map the files of your ownCloud account to the drive letter Z:. An alternative
 +syntax is:</p>
 +<div class="highlight-python"><pre>net use Z: \\youraddress.com at ssl\owncloud\remote.php\webdav /user:youruser yourpassword</pre>
 +</div>
 +<p>Appending <strong>/persistent</strong> makes the connection persistent across reboots.</p>
 +<p>You can also mount your ownCloud via HTTP, leaving the connection unencrypted.
 +Use either of the following syntaxes:</p>
 +<div class="highlight-python"><pre>net use Z: http://youraddress.com/owncloud/remote.php/webdav /user:youruser yourpassword
 +net use Z: \\youraddress.com\owncloud\remote.php\webdav /user:youruser yourpassword</pre>
 +</div>
 +<p>Please note that this allows anyone to sniff your ownCloud data with ease, especially on public WiFi hotspots. Plain HTTP should therefore only be used in conjunction with a VPN tunnel when used on Laptops.</p>
 +</div>
 +<div class="section" id="using-windows-explorer">
 +<h3>Using Windows Explorer<a class="headerlink" href="#using-windows-explorer" title="Permalink to this headline">¶</a></h3>
 +<p>Right-click on <strong>Computer</strong> entry and select <strong>Map network drive...</strong>. Choose a local network drive to map ownCloud to. Finally, enter the address to your ownCloud instance, followed by <strong>/remote.php/webdav</strong>, e.g.</p>
 +<div class="highlight-python"><pre>https://youraddress.com/owncloud/remote.php/webdav</pre>
 +</div>
 +<p>for an SSL protected server. Check <strong>Reconnect at logon</strong> to make this mapping persistent across reboots. If you want to connect as another user, check <strong>Connect using different credentials</strong>.</p>
 +<div class="figure">
 +<a class="reference internal image-reference" href="../_images/explorer_webdav.png"><img alt="../_images/explorer_webdav.png" src="../_images/explorer_webdav.png" /></a>
 +<p class="caption">Mapping WebDAV on Windows Explorer.</p>
 +</div>
 +<p>After pressing <strong>Finish</strong>, Windows Explorer will map the network drive and your ownCloud instance should be available</p>
 +</div>
 +<div class="section" id="using-cyberduck-4-2-1">
 +<h3>Using Cyberduck (4.2.1)<a class="headerlink" href="#using-cyberduck-4-2-1" title="Permalink to this headline">¶</a></h3>
 +<p>Specify a server without any leading protocol information. e.g.:</p>
 +<dl class="docutils">
 +<dt>Server</dt>
 +<dd>youraddress.com</dd>
 +</dl>
 +<p>The port depends on whether your ownCloud server supports SSL or not. Cyberduck requires that you select a different connection type depending on whethr SSL is to be used (‘WebDAV’ or ‘WebDAV (HTTPS/SSL)’):</p>
 +<dl class="docutils">
 +<dt>Port</dt>
 +<dd>80 (for WebDAV)
 +443 (for WebDAV (HTTPS/SSL))</dd>
 +</dl>
 +<p>Use the ‘More Options’ drop-down menu to add the rest of your webdav URL into the ‘Path’ field. e.g.:</p>
 +<dl class="docutils">
 +<dt>Path</dt>
 +<dd>remote.php/webdav</dd>
 +</dl>
 +</div>
 +<div class="section" id="known-problems">
 +<h3>Known Problems<a class="headerlink" href="#known-problems" title="Permalink to this headline">¶</a></h3>
 +<dl class="docutils">
 +<dt>Problem</dt>
 +<dd>Windows refuses to connect via HTTPS</dd>
 +<dt>Solution</dt>
 +<dd>The Windows WebDAV Client does not support Server Name Indication (SNI) on
 +encrypted connections. If you encounter an error mounting an SSL-encrypted
 +ownCloud instance, please contact your provider about assigning a dedicated
 +IP address for your SSL-based server.</dd>
 +<dt>Problem</dt>
 +<dd>I receive the error <strong>Error 0x800700DF: The file size exceeds the limit allowed and cannot be saved.</strong></dd>
 +<dt>Solution</dt>
 +<dd>Windows limits the maximum size a file transferred from or to  a WebDAV
 +share may have.  You can increase the value <strong>FileSizeLimitInBytes</strong> in
 +<strong>HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWebClientParameters</strong>.
 +by clicking on <strong>Modify</strong>. In order to increase the limit to the maximum
 +value of 4GB, pick <strong>Decimal</strong> and enter <strong>4294967295</strong> as value. Afterwards,
 +reboot Windows or restart the <strong>WebClient</strong> service.</dd>
 +</dl>
 +<div class="admonition-todo admonition" id="index-0">
 +<p class="first admonition-title">Todo</p>
 +<p class="last">document registry keys on file size limit and not complaining in no network cases</p>
 +</div>
 +</div>
 +</div>
 +<div class="section" id="sync-client">
 +<h2>Sync Client<a class="headerlink" href="#sync-client" title="Permalink to this headline">¶</a></h2>
 +<p>However, some applications only allow you to save to a local folder. To
 +get around this issue, you can use the <a class="reference internal" href="index.html"><em>ownCloud sync clients</em></a></p>
 +</div>
 +<div class="section" id="mobile">
 +<h2>Mobile<a class="headerlink" href="#mobile" title="Permalink to this headline">¶</a></h2>
 +<p>To connect to your ownCloud server with the <strong>ownCloud</strong> mobile apps, use the base URL and folder only:</p>
 +<div class="highlight-python"><div class="highlight"><pre><span class="n">youraddress</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">owncloud</span>
 +</pre></div>
 +</div>
 +<p>No need to add remote.php/webdav as you do for any other WebDAV client.</p>
 +<p>There are apps in development for both <a class="reference external" href="http://gitorious.org/owncloud/android">Android</a> and <a class="reference external" href="http://gitorious.org/owncloud/webos">webOS</a>. Feel
 +free to <a class="reference external" href="/contribute/">contribute, if you can</a>! Right now you can use other apps to
 +connect to ownCloud from your phone via WebDAV. <a class="reference external" href="http://seanashton.net/webdav/">WebDAV Navigator</a> is a
 +good (proprietary) app for <a class="reference external" href="http://market.android.com/details?id=com.schimera.webdavnavlite">Android App</a> , <a class="reference external" href="http://itunes.apple.com/app/webdav-navigator/id382551345">iPhone</a> & <a class="reference external" href="http://appworld.blackberry.com/webstore/content/46279">BlackBerry</a>.</p>
 +<p>The URL for these is:</p>
 +<div class="highlight-python"><div class="highlight"><pre><span class="n">youraddress</span><span class="o">.</span><span class="n">com</span><span class="o">/</span><span class="n">owncloud</span><span class="o">/</span><span class="n">remote</span><span class="o">.</span><span class="n">php</span><span class="o">/</span><span class="n">webdav</span>
 +</pre></div>
 +</div>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/files/index.html
index deacccf,0000000..c39e4ef
mode 100644,000000..100644
--- a/core/doc/user/files/index.html
+++ b/core/doc/user/files/index.html
@@@ -1,164 -1,0 +1,168 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Files & Synchronization — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="next" title="Accessing your Files (WebDav)" href="files.html" />
 +    <link rel="prev" title="The ownCloud Web Interface" href="../webinterface.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1 current"><a class="current reference internal" href="">Files & Synchronization</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="files-synchronization">
 +<h1>Files & Synchronization<a class="headerlink" href="#files-synchronization" title="Permalink to this headline">¶</a></h1>
 +<div class="toctree-wrapper compound">
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l1"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l1"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/files/quota.html
index 0000000,0000000..6c35cea
new file mode 100644
--- /dev/null
+++ b/core/doc/user/files/quota.html
@@@ -1,0 -1,0 +1,226 @@@
++
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
++  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
++
++
++<html xmlns="http://www.w3.org/1999/xhtml">
++  <head>
++    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
++    
++    <title>Storage Quota — ownCloud User Manual 6.0 documentation</title>
++    
++    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
++    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
++    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
++    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
++    
++    <script type="text/javascript">
++      var DOCUMENTATION_OPTIONS = {
++        URL_ROOT:    '../',
++        VERSION:     '6.0',
++        COLLAPSE_INDEX: false,
++        FILE_SUFFIX: '.html',
++        HAS_SOURCE:  true
++      };
++    </script>
++    <script type="text/javascript" src="../_static/jquery.js"></script>
++    <script type="text/javascript" src="../_static/underscore.js"></script>
++    <script type="text/javascript" src="../_static/doctools.js"></script>
++    <script type="text/javascript" src="../_static/bootstrap.js"></script>
++    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
++    <link rel="up" title="Files & Synchronization" href="index.html" />
++    <link rel="next" title="Big Files" href="configuring_big_file_upload.html" />
++    <link rel="prev" title="Files Encryption" href="encryption.html" />
++<script type="text/javascript">
++(function () {
++  /**
++   * Patch TOC list.
++   *
++   * Will mutate the underlying span to have a correct ul for nav.
++   *
++   * @param $span: Span containing nested UL's to mutate.
++   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
++   */
++  var patchToc = function ($ul, minLevel) {
++    var findA;
++
++    // Find all a "internal" tags, traversing recursively.
++    findA = function ($elem, level) {
++      var level = level || 0,
++        $items = $elem.find("> li > a.internal, > ul, > li > ul");
++
++      // Iterate everything in order.
++      $items.each(function (index, item) {
++        var $item = $(item),
++          tag = item.tagName.toLowerCase(),
++          pad = 15 + ((level - minLevel) * 10);
++
++        if (tag === 'a' && level >= minLevel) {
++          // Add to existing padding.
++          $item.css('padding-left', pad + "px");
++          console.log(level, $item, 'padding-left', pad + "px");
++        } else if (tag === 'ul') {
++          // Recurse.
++          findA($item, level + 1);
++        }
++      });
++    };
++
++    console.log("HERE");
++    findA($ul);
++  };
++
++  $(document).ready(function () {
++    // Add styling, structure to TOC's.
++    $(".dropdown-menu").each(function () {
++      $(this).find("ul").each(function (index, item){
++        var $item = $(item);
++        $item.addClass('unstyled');
++      });
++      $(this).find("li").each(function () {
++        $(this).parent().append(this);
++      });
++    });
++
++    // Patch in level.
++    patchToc($("ul.globaltoc"), 2);
++    patchToc($("ul.localtoc"), 2);
++
++    // Enable dropdown.
++    $('.dropdown-toggle').dropdown();
++  });
++}());
++</script>
++
++  </head>
++  <body>
++  
++
++<div class="container">
++  <div class="content">
++    <div class="page-header">
++      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
++
++    </div>
++    
++			<div class="row">
++				<div class="span3">
++					<div class="sidebar">
++						<div class="well">
++							<div class="menu-support-container">
++								<ul id="menu-support" class="menu">
++									<ul>
++										<li><a href="../contents.html">Overview</a></li>
++									</ul>
++                  <ul>
++<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
++</ul>
++<ul class="current">
++<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
++<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
++<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
++<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
++<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
++<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
++<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2 current"><a class="current reference internal" href="">Storage Quota</a><ul>
++<li class="toctree-l3"><a class="reference internal" href="#checking-the-available-space">Checking the available space</a></li>
++<li class="toctree-l3"><a class="reference internal" href="#sharing">Sharing</a></li>
++<li class="toctree-l3"><a class="reference internal" href="#excluded-from-quota">Excluded from quota</a></li>
++</ul>
++</li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
++</ul>
++</li>
++<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
++</ul>
++
++								</ul>
++							</div>
++						</div>
++					</div>
++				</div>
++        
++
++				<div class="span9">
++					<div class="page-content">
++						
++  <div class="section" id="storage-quota">
++<h1>Storage Quota<a class="headerlink" href="#storage-quota" title="Permalink to this headline">¶</a></h1>
++<p>ownCloud makes it possible to specify a storage quota for users which is the <strong>maximum space</strong> a user is allowed to use for files located in their individual home storage.</p>
++<div class="admonition note">
++<p class="first admonition-title">Note</p>
++<p class="last">When setting a quota, administrators need to be aware that it <strong>only applies to actual files</strong>, not application metadata. This means that when allocating a quota, they need to make sure there at least 10% more space available for a given user.</p>
++</div>
++<div class="section" id="checking-the-available-space">
++<h2>Checking the available space<a class="headerlink" href="#checking-the-available-space" title="Permalink to this headline">¶</a></h2>
++<p>You can check your available space by going to the “Personal” page from the top-right menu.</p>
++<p>The available space of a given user is calculated using the following formula:</p>
++<div class="highlight-python"><div class="highlight"><pre><span class="n">available_space</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">quota</span><span class="p">,</span> <span class="n">disk_free_space</span><span class="p">)</span> <span class="o">-</span> <span class="n">used_space</span>
++</pre></div>
++</div>
++<p><tt class="docutils literal"><span class="pre">disk_free_space</span></tt> is the space available on the partition on which the user’s home storage is located on the server. It could happen that the available space on that partition is less than the user’s quota.</p>
++</div>
++<div class="section" id="sharing">
++<h2>Sharing<a class="headerlink" href="#sharing" title="Permalink to this headline">¶</a></h2>
++<p>When sharing files or directories, their used space is counted in the owner’s quota.</p>
++<div class="section" id="shared-files">
++<h3>Shared files<a class="headerlink" href="#shared-files" title="Permalink to this headline">¶</a></h3>
++<p>If user A shares a file F with user B, the size of F will be counted in user A’s storage, even if the file is modified or its size is increased by user B.</p>
++</div>
++<div class="section" id="shared-directories">
++<h3>Shared directories<a class="headerlink" href="#shared-directories" title="Permalink to this headline">¶</a></h3>
++<p>If user A shares a directory D with user B, any file that is modified or uploaded by user B inside of directory D will count in user A’s used space.</p>
++</div>
++<div class="section" id="resharing">
++<h3>Resharing<a class="headerlink" href="#resharing" title="Permalink to this headline">¶</a></h3>
++<p>When resharing a file or a directory, the used space is still counted in the quota of the owner who shared it initially.</p>
++</div>
++<div class="section" id="public-sharing-with-upload-permission">
++<h3>Public sharing with upload permission<a class="headerlink" href="#public-sharing-with-upload-permission" title="Permalink to this headline">¶</a></h3>
++<p>If user A publicly shares (share with link) a directory D and enables the “public upload” permission, people with the link will be able to upload files into D and their sizes will be counted in user A’s used space.</p>
++</div>
++</div>
++<div class="section" id="excluded-from-quota">
++<h2>Excluded from quota<a class="headerlink" href="#excluded-from-quota" title="Permalink to this headline">¶</a></h2>
++<div class="section" id="metadata-and-cache">
++<h3>Metadata and cache<a class="headerlink" href="#metadata-and-cache" title="Permalink to this headline">¶</a></h3>
++<p>Application metadata and cached information are excluded from the total used space.</p>
++<p>Such data could be thumbnails (icon previews, pictures app), temporary files, encryption keys, etc.</p>
++<p>Some apps are also storing information directly in the database (not as files) like the <a class="reference internal" href="../pim/calendar.html"><em>calendar</em></a> and <a class="reference internal" href="../pim/contacts.html"><em>contacts</em></a> apps. This data is also excluded from the total used space.</p>
++</div>
++<div class="section" id="deleted-files">
++<h3>Deleted files<a class="headerlink" href="#deleted-files" title="Permalink to this headline">¶</a></h3>
++<p>When deleting files, these are moved/copied to the <a class="reference internal" href="deletedfiles.html"><em>trashbin</em></a> at first. These files do not count in the user’s used space.</p>
++<p>For example with a quota of 10 GB, if the user has 4 GB used space and 5 GB in the trashbin, they will still see 6 GB free space. If the user uploads 6 GB of files at this point, the <a class="reference internal" href="deletedfiles.html"><em>trashbin app</em></a> will discard deleted files when necessary to make room for the new files.</p>
++</div>
++<div class="section" id="version-control">
++<h3>Version Control<a class="headerlink" href="#version-control" title="Permalink to this headline">¶</a></h3>
++<p>The size of older file versions does not count in the used space.</p>
++<p>For example with a quota of 10 GB, if the user has 4 GB used space and 5 GB of older file versions, they will still see 6 GB free space. If the user uploads 6 GB of files at this point, the <a class="reference internal" href="versioncontrol.html"><em>versions app</em></a> will discard older versions when necessary to make room for the new files.</p>
++<p>See <a class="reference internal" href="versioncontrol.html"><em>Version Control</em></a> for details about the version expiration behavior.</p>
++</div>
++<div class="section" id="encryption">
++<h3>Encryption<a class="headerlink" href="#encryption" title="Permalink to this headline">¶</a></h3>
++<p>When files are <a class="reference internal" href="encryption.html"><em>encrypted</em></a>, they take slightly more physical space than the original files. Only the original size will be counted in the used space.</p>
++</div>
++<div class="section" id="external-storage">
++<h3>External storage<a class="headerlink" href="#external-storage" title="Permalink to this headline">¶</a></h3>
++<p>When mounting external storage, either as administrator or as user, the space available on that storage is not taken into account for the user’s quota.
++It is currently not possible to set a quota for external storage.</p>
++</div>
++</div>
++</div>
++
++
++					</div>
++				</div>
++			</div>
++    
++  </div>
++</div>
++  </body>
++</html>
diff --cc core/doc/user/files/sync.html
index b3c772e,0000000..74ea6b7
mode 100644,000000..100644
--- a/core/doc/user/files/sync.html
+++ b/core/doc/user/files/sync.html
@@@ -1,168 -1,0 +1,170 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Desktop Synchronisation — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Files & Synchronization" href="index.html" />
 +    <link rel="next" title="Files Encryption" href="encryption.html" />
 +    <link rel="prev" title="Deleted Files" href="deletedfiles.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="versioncontrol.html">Version Control</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Desktop Synchronisation</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="desktop-synchronisation">
 +<h1>Desktop Synchronisation<a class="headerlink" href="#desktop-synchronisation" title="Permalink to this headline">¶</a></h1>
 +<p>For synchronizing files with your desktop computer, we recommend using the
 +<a class="reference external" href="http://owncloud.org/sync-client/">ownCloud Client</a> for Windows, Mac OS X and Linux.</p>
 +<p>The ownCloud Desktop Client enables you to connect to your private ownCloud Server.
 +You can create folders in your home directory, and keep the contents of those
 +folders synced with your ownCloud server. Simply copy a file into the directory
 +and the ownCloud desktop client does the rest. Make a change to the files on one
 +computer, it will flow across the others using these desktop sync clients. Always
 +have your latest files with you wherever you are.</p>
 +<p>Its usage is documented separately in the <a class="reference external" href="http://doc.owncloud.com/desktop/1.2/">ownCloud Desktop Client Manual</a>.</p>
 +<p>Furthermore, It is possible to synchronize your ownCloud calendar and address book
 +with a variety of different operating systems and devices. It is also possible to
 +mount your ownCloud storage via WebDAV, which is also documented in the next chapters.</p>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/files/versioncontrol.html
index 483cd3a,0000000..97eb298
mode 100644,000000..100644
--- a/core/doc/user/files/versioncontrol.html
+++ b/core/doc/user/files/versioncontrol.html
@@@ -1,177 -1,0 +1,179 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Version Control — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Files & Synchronization" href="index.html" />
 +    <link rel="next" title="Deleted Files" href="deletedfiles.html" />
 +    <link rel="prev" title="Accessing your Files (WebDav)" href="files.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Files & Synchronization</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="files.html">Accessing your Files (WebDav)</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Version Control</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="deletedfiles.html">Deleted Files</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync.html">Desktop Synchronisation</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="encryption.html">Files Encryption</a></li>
++<li class="toctree-l2"><a class="reference internal" href="quota.html">Storage Quota</a></li>
++<li class="toctree-l2"><a class="reference internal" href="configuring_big_file_upload.html">Big Files</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="version-control">
 +<h1>Version Control<a class="headerlink" href="#version-control" title="Permalink to this headline">¶</a></h1>
 +<p>ownCloud supports simple version control for files. Versioning is
 +enabled by default, and creates backups of files which are accessible
 +via the history tab. This tab also links to the history page, where you
 +can roll back a file to any previous version. Changes made at intervals
 +greater than two minutes are saved in data/[user]/versions, and made
 +accessible using the above pages.</p>
 +<p>The versioning app expires old versions automatically to make sure that
 +the user doesn’t run out of space. Following pattern is used to delete
 +old versions:</p>
 +<ul class="simple">
 +<li>For the first 10 seconds ownCloud keeps one version every 2 seconds</li>
 +<li>For the first hour ownCloud keeps one version every minute</li>
 +<li>For the first 24 hours ownCloud keeps one version every hour</li>
 +<li>For the first 30 days ownCloud keeps one version every day</li>
 +<li>After the first 30 days ownCloud keeps one version every week</li>
 +</ul>
 +<p>The versions are adjusted along this pattern every time a new version gets
 +created.</p>
 +<p>Beside that the version app takes care to never use more that 50% of the users
 +currently available free space. If the stored versions exceed this limit ownCloud
 +delete the oldest versions until it meets the memory usage limit again.</p>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/genindex.html
index d49cc39,0000000..db9613a
mode 100644,000000..100644
--- a/core/doc/user/genindex.html
+++ b/core/doc/user/genindex.html
@@@ -1,151 -1,0 +1,151 @@@
 +
 +
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Index — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">User Documentation</a></li>
 +</ul>
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +
 +<h1 id="index">Index</h1>
 +
 +<div class="genindex-jumpbox">
 + 
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/index.html
index 28528bf,ede62f0..bdd7099
--- a/core/doc/user/index.html
+++ b/core/doc/user/index.html
@@@ -1,218 -1,2 +1,219 @@@
 -Here goes the user documentation
 -In the meantime go to <a href="http://owncloud.org/support/" target="_blank">ownCloud.org/support</a>
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>User Documentation — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="#" />
 +    <link rel="next" title="The ownCloud Web Interface" href="webinterface.html" />
 +    <link rel="prev" title="ownCloud documentation contents" href="contents.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="contents.html">Overview</a></li>
 +									</ul>
 +                  <ul class="current">
 +<li class="toctree-l1 current"><a class="current reference internal" href="">User Documentation</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="#webinterface">Webinterface</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="#files-synchronization">Files & Synchronization</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="#contacts-calendar">Contacts & Calendar</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="#bookmarks">Bookmarks</a></li>
- <li class="toctree-l2"><a class="reference internal" href="#mediaplayer">Mediaplayer</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="#backup">Backup</a></li>
++<li class="toctree-l2"><a class="reference internal" href="#external-storage">External storage</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
 +</ul>
 +</li>
 +</ul>
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="user-documentation">
 +<span id="index"></span><h1>User Documentation<a class="headerlink" href="#user-documentation" title="Permalink to this headline">¶</a></h1>
 +<p><strong>Welcome to ownCloud, your self-hosted file sync and share solution.</strong></p>
 +<p>OwnCloud is open source file sync and share software for everyone from individuals operating the free Community Edition, to large enterprises and service providers operating ownCloud Enterprise Edition. ownCloud provides a safe, secure and compliant file sync and share solution on servers you control.</p>
 +<p>With ownCloud you can share one or more folders on your PC, and sync them with your ownCloud server. Place files in your local shared directories, and those files are immediately synced to the server, and then to other PCs via the desktop client. Not near a desktop client? No problem, simply log in with the web client and manage your files there. The Android and iOS mobile apps allow you to browse, download and upload photos and videos. On Android, you may also create, download, edit [...]
 +<p>Whether using a mobile device, a workstation, or a web client, ownCloud provides the ability to put the right files in the right hands at the right time on any device in one simple-to-use, secure, private and controlled solution. After all, with ownCloud, it’s Your Cloud, Your Data, Your Way.</p>
 +<div class="section" id="webinterface">
 +<h2>Webinterface<a class="headerlink" href="#webinterface" title="Permalink to this headline">¶</a></h2>
 +<p>This chapter contains a general overview how you access ownCloud from a Browser like Firefox, Chrome or Internet Explorer</p>
 +<ul class="simple">
 +<li><a class="reference internal" href="webinterface.html"><em>The ownCloud Web Interface</em></a></li>
 +</ul>
 +</div>
 +<div class="section" id="files-synchronization">
 +<h2>Files & Synchronization<a class="headerlink" href="#files-synchronization" title="Permalink to this headline">¶</a></h2>
 +<p>This chapter contains information about accessing your files via WebDav and Synchronization.</p>
 +<ul class="simple">
 +<li><a class="reference internal" href="files/files.html"><em>Accessing your Files (WebDav)</em></a></li>
 +<li><a class="reference internal" href="files/sync.html"><em>Desktop Synchronisation</em></a></li>
 +<li><a class="reference internal" href="files/versioncontrol.html"><em>Version Control</em></a></li>
 +<li><a class="reference internal" href="files/deletedfiles.html"><em>Deleted Files</em></a></li>
 +<li><a class="reference internal" href="files/encryption.html"><em>Files Encryption</em></a></li>
++<li><a class="reference internal" href="files/quota.html"><em>Storage Quota</em></a></li>
 +<li><a class="reference internal" href="files/configuring_big_file_upload.html"><em>Big Files</em></a></li>
 +</ul>
 +</div>
 +<div class="section" id="contacts-calendar">
 +<h2>Contacts & Calendar<a class="headerlink" href="#contacts-calendar" title="Permalink to this headline">¶</a></h2>
 +<p>Contacts & Calendar web interface, export, import and synchronization.</p>
 +<ul class="simple">
 +<li><a class="reference internal" href="pim/calendar.html"><em>Using the Calendar App</em></a></li>
 +<li><a class="reference internal" href="pim/contacts.html"><em>Using the Contacts App</em></a></li>
 +<li><a class="reference internal" href="pim/sync_ios.html"><em>iOS - Synchronize iPhone/iPad</em></a></li>
 +<li><a class="reference internal" href="pim/sync_kde.html"><em>Synchronizing with KDE SC</em></a></li>
 +<li><a class="reference internal" href="pim/sync_osx.html"><em>Synchronizing with OS X</em></a></li>
 +</ul>
 +</div>
 +<div class="section" id="bookmarks">
 +<h2>Bookmarks<a class="headerlink" href="#bookmarks" title="Permalink to this headline">¶</a></h2>
 +<p>Web interface for managing your bookmarks.</p>
 +<ul class="simple">
 +<li><a class="reference internal" href="bookmarks.html"><em>Using the Bookmarks App</em></a></li>
 +</ul>
 +</div>
- <div class="section" id="mediaplayer">
- <h2>Mediaplayer<a class="headerlink" href="#mediaplayer" title="Permalink to this headline">¶</a></h2>
- <p>Web interface for playing music in your browser.</p>
- <ul class="simple">
- <li><a class="reference internal" href="mediaplayer.html"><em>Native Media Player Support</em></a></li>
- </ul>
- </div>
 +<div class="section" id="backup">
 +<h2>Backup<a class="headerlink" href="#backup" title="Permalink to this headline">¶</a></h2>
 +<p>Import and export your user account settings.</p>
 +<ul class="simple">
 +<li><a class="reference internal" href="migration.html"><em>User Account Migration</em></a></li>
 +</ul>
 +</div>
++<div class="section" id="external-storage">
++<h2>External storage<a class="headerlink" href="#external-storage" title="Permalink to this headline">¶</a></h2>
++<p>Mount external storages into ownCloud.</p>
++<ul class="simple">
++<li><a class="reference internal" href="external_storage/google_drive.html"><em>External storage</em></a></li>
++</ul>
++</div>
 +<div class="section" id="indices-and-tables">
 +<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2>
 +<ul class="simple">
 +<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
 +</ul>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/migration.html
index 6875b42,0000000..4c533cd
mode 100644,000000..100644
--- a/core/doc/user/migration.html
+++ b/core/doc/user/migration.html
@@@ -1,170 -1,0 +1,171 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>User Account Migration — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="index.html" />
-     <link rel="prev" title="Native Media Player Support" href="mediaplayer.html" />
++    <link rel="next" title="External storage" href="external_storage/google_drive.html" />
++    <link rel="prev" title="Using the Bookmarks App" href="bookmarks.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1 current"><a class="current reference internal" href="">User Account Migration</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="#export">Export</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="#import">Import</a></li>
 +</ul>
 +</li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="user-account-migration">
 +<h1>User Account Migration<a class="headerlink" href="#user-account-migration" title="Permalink to this headline">¶</a></h1>
 +<p>User account migration support is provided by the user_migrate app. It is important to note that only data from apps that support migration will be migrated. While we encoruage all apps to support migration, it is not a requirement and it the responsibility of the app developer.</p>
 +<div class="section" id="export">
 +<h2>Export<a class="headerlink" href="#export" title="Permalink to this headline">¶</a></h2>
 +<p>To export your user account, simply visit Settings > Personal and click on the ‘Export’ button. A compressed zip file will be generated on the fly and downloaded to your computer. This file includes all of your files and application data that was stored on your ownCloud account. You may use this as a method of backing up your personal account.</p>
 +</div>
 +<div class="section" id="import">
 +<h2>Import<a class="headerlink" href="#import" title="Permalink to this headline">¶</a></h2>
 +<p>To import your user account, you must first have an existing account on your new ownCloud install. Then follow this procedure:</p>
 +<ol class="arabic simple">
 +<li>Login to your new account on the new ownCloud instance</li>
 +<li>Navigate to the Settings > Personal page</li>
 +<li>Select the ‘Import’ button, and locate the zip file that you downloaded from your old ownCloud instance</li>
 +<li>Wait for the file to be uploaded and imported</li>
 +</ol>
 +<div class="admonition note">
 +<p class="first admonition-title">Note</p>
 +<p class="last">Your user account credentials will <strong>not</strong> be migrated.</p>
 +</div>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/calendar.html
index 1f1a189,0000000..b907094
mode 100644,000000..100644
--- a/core/doc/user/pim/calendar.html
+++ b/core/doc/user/pim/calendar.html
@@@ -1,252 -1,0 +1,252 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Using the Calendar App — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="iOS - Synchronize iPhone/iPad" href="sync_ios.html" />
 +    <link rel="prev" title="Using the Contacts App" href="contacts.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Using the Calendar App</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#creating-a-calendar">Creating a calendar</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#synchronising-calendars-with-caldav">Synchronising Calendars with CalDav</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#creating-events">Creating events</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#exporting-importing-events">Exporting / Importing events</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#why-is-the-calendar-app-asking-for-my-current-location">Why is the calendar app asking for my current location?</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="using-the-calendar-app">
 +<h1>Using the Calendar App<a class="headerlink" href="#using-the-calendar-app" title="Permalink to this headline">¶</a></h1>
 +<div class="section" id="creating-a-calendar">
 +<h2>Creating a calendar<a class="headerlink" href="#creating-a-calendar" title="Permalink to this headline">¶</a></h2>
 +<div class="figure">
 +<a class="reference internal image-reference" href="../_images/calendar_manage-calendars.png"><img alt="../_images/calendar_manage-calendars.png" src="../_images/calendar_manage-calendars.png" /></a>
 +</div>
 +<p>If you use the calendar the first time, there will be already a calendar called
 +“Default calendar”. You can manage your calendars with a click on the “Calendar”
 +button in the top right corner. In the dialog, which will appear, you can add,
 +edit, export, enable, disable and delete your calendars. There will be also a
 +link for CalDav access.</p>
 +</div>
 +<div class="section" id="synchronising-calendars-with-caldav">
 +<h2>Synchronising Calendars with CalDav<a class="headerlink" href="#synchronising-calendars-with-caldav" title="Permalink to this headline">¶</a></h2>
 +<p>Assuming you access your web interface via an address like this:</p>
 +<div class="highlight-python"><pre>http://ADDRESS</pre>
 +</div>
 +<p>Then you can access your calendars with CalDAV-compatible programs like
 +Kontact, Evolution, Thunderbird using the following URL:</p>
 +<div class="highlight-python"><pre>http://ADDRESS/remote.php/caldav</pre>
 +</div>
 +<p>To use the ownCloud calendar with Apple iCal you will need to use the following
 +URL, including the trailing slash:</p>
 +<div class="highlight-python"><pre>http://ADDRESS/remote.php/caldav/principals/username/</pre>
 +</div>
 +<p>Mozilla Lightning users need to this URL scheme:</p>
 +<div class="highlight-python"><pre>https://ADDRESS/remote.php/caldav/calendars/USERNAME/CALENDARNAME
 +
 + Example for a simple calendar: The "Default calendar" is referred to as "defaultcalendar",
 + and the users' name here is "test".
 + The full URL (which on the picture can't be seen because of the
 + short edit field) is then::
 +
 +     https://localhost/owncloud/remote.php/caldav/calendars/test/defaultcalendar</pre>
 +</div>
 +</div>
 +<div class="section" id="creating-events">
 +<h2>Creating events<a class="headerlink" href="#creating-events" title="Permalink to this headline">¶</a></h2>
 +<p>To create an event just click on the date in the month view or choose the
 +timeframe in the weekview. In the dialog which will appear you can enter your
 +information like title, category, etc.</p>
 +<div class="figure">
 +<a class="reference internal image-reference" href="../_images/calendar_createevent.png"><img alt="../_images/calendar_createevent.png" src="../_images/calendar_createevent.png" /></a>
 +</div>
 +<p>With the advanced options you can set the
 +description, the location and the repetition rate of an event. If the repeating
 +should end you can choose between setting the end by date or by occurrences. If
 +you choose in the weekview all days from Monday to Friday it will automatically
 +set the repeat rule to “every weekday”. If the interval of the weekview can be
 +devided by two it automatically set the repeat rule to “Bi-Weekly”.</p>
 +</div>
 +<div class="section" id="exporting-importing-events">
 +<h2>Exporting / Importing events<a class="headerlink" href="#exporting-importing-events" title="Permalink to this headline">¶</a></h2>
 +<div class="section" id="export">
 +<h3>Export<a class="headerlink" href="#export" title="Permalink to this headline">¶</a></h3>
 +<div class="figure">
 +<a class="reference internal image-reference" href="../_images/calendar_export.png"><img alt="../_images/calendar_export.png" src="../_images/calendar_export.png" /></a>
 +</div>
 +<p>You can export either a single event or a whole calendar. If you want to export
 +a single event click on it and press the export button in the bottom right
 +corner. If you want to export a whole calendar use the “Calendar” button as
 +described in the chapter “Creating a calendar”.</p>
 +</div>
 +<div class="section" id="import">
 +<h3>Import<a class="headerlink" href="#import" title="Permalink to this headline">¶</a></h3>
 +<div class="figure">
 +<a class="reference internal image-reference" href="../_images/calendar_import.png"><img alt="../_images/calendar_import.png" src="../_images/calendar_import.png" /></a>
 +</div>
 +<p>Import your calendar as ical file using the files app. Just click on the
 +calendar file to open the import dialog. You can import the calendar into a new
 +calendar or into an already existing calendar.</p>
 +<div class="admonition note">
 +<p class="first admonition-title">Note</p>
 +<p class="last">If the progressbar does not work properly, the folder
 +<tt class="docutils literal"><span class="pre">apps/calendar/import_tmp/</span></tt> has probably no write permission.</p>
 +</div>
 +</div>
 +</div>
 +<div class="section" id="why-is-the-calendar-app-asking-for-my-current-location">
 +<h2>Why is the calendar app asking for my current location?<a class="headerlink" href="#why-is-the-calendar-app-asking-for-my-current-location" title="Permalink to this headline">¶</a></h2>
 +<div class="figure">
 +<a class="reference internal image-reference" href="../_images/calendar_newtimezone1.png"><img alt="../_images/calendar_newtimezone1.png" src="../_images/calendar_newtimezone1.png" /></a>
 +</div>
 +<p>The calendar needs your current position in order to detect your timezone.
 +Without the correct timezone there will be a time offset between the events in
 +ownCloud and your desktop calendar you synchronise with ownCloud. You can also
 +set the timezone manually in the personal settings.</p>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/contacts.html
index c616862,0000000..7cbac40
mode 100644,000000..100644
--- a/core/doc/user/pim/contacts.html
+++ b/core/doc/user/pim/contacts.html
@@@ -1,277 -1,0 +1,277 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Using the Contacts App — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="Using the Calendar App" href="calendar.html" />
 +    <link rel="prev" title="Contacts & Calendar" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Using the Contacts App</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#adding-contacts">Adding contacts</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#creating-new-address-books">Creating new address books</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#keeping-your-address-book-in-sync">Keeping your address book in sync</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="using-the-contacts-app">
 +<h1>Using the Contacts App<a class="headerlink" href="#using-the-contacts-app" title="Permalink to this headline">¶</a></h1>
 +<p>The contacts app of ownCloud is like any other mobile contact app but with more functionality.
 +Just as you open your account you will get the a default addressbook available.
 +We will see later that Of course you can always add and remove addressbooks in here.</p>
 +<div class="section" id="adding-contacts">
 +<h2>Adding contacts<a class="headerlink" href="#adding-contacts" title="Permalink to this headline">¶</a></h2>
 +<p>There are two ways in which you can add contacts</p>
 +<ol class="arabic simple">
 +<li>Add them manually</li>
 +<li>Import a VCF file</li>
 +</ol>
 +<div class="section" id="importing">
 +<h3>Importing<a class="headerlink" href="#importing" title="Permalink to this headline">¶</a></h3>
 +<p>So first we’ll check out how to import all the VCF files as they are a lot
 +more faster way of creating contacts.
 +Just below the contact list, 3 buttons: The middle one let you upload files.</p>
 +<img alt="../_images/contact_bottombar.jpg" src="../_images/contact_bottombar.jpg" />
 +<p>Once you’ve clicked it, the upload window let you choose your files.
 +We can upload the files one by one or upload all of them at one go.</p>
 +<p>Let me demonstrate.
 +Open the directory in which you store all the files and then do the following
 +Keep pressing CTRL and select the files to upload.
 +After you are done just click on the open button
 +After the upload it should look something like this in which all the names and contacts will be sorted alphabetically</p>
 +<img alt="../_images/contact_vcfpick.jpg" src="../_images/contact_vcfpick.jpg" />
 +<p>Then, the interface ask you where to put your imported contacts.
 +You have the ability to choose an existing addressbook or to create a new one.
 +Then click on “OK” and that’s all for the import of contacts.</p>
 +<img alt="../_images/contact_import.jpg" src="../_images/contact_import.jpg" />
 +</div>
 +<div class="section" id="create-contacts-manually">
 +<h3>Create contacts manually<a class="headerlink" href="#create-contacts-manually" title="Permalink to this headline">¶</a></h3>
 +<p>In the picture of the bottom bar, you could see the new contact button (first one).
 +Click on it. You can now see an empty contact in the main part of the interface.
 +You have the ability to add all your informations about the contact:
 +the name, the address, the e-mail, the telephone nr, ...</p>
 +<p>Just click on a field and start typing the information.
 +You can use the “Add Field” button to add another types of information for this contact.</p>
 +<img alt="../_images/contact_emptycontact.jpg" src="../_images/contact_emptycontact.jpg" />
 +<p>When you want to remove an information of your contact, just click on little delete icon
 +at the right of the field you want to remove.</p>
 +</div>
 +<div class="section" id="adding-picture-to-the-contact">
 +<h3>Adding picture to the contact<a class="headerlink" href="#adding-picture-to-the-contact" title="Permalink to this headline">¶</a></h3>
 +<p>There are two methods in which you can give a picture id to the specific contact</p>
 +<img alt="../_images/contact_picture.jpg" src="../_images/contact_picture.jpg" />
 +<ol class="arabic simple">
 +<li><strong>Direct upload</strong></li>
 +<li><strong>Select pics already uploaded in ownCloud files.</strong></li>
 +</ol>
 +<p>After you have selected the picture for the contact you get
 +an option to crop the picture to suit your requirements</p>
 +<img alt="../_images/contact_crop.jpg" src="../_images/contact_crop.jpg" />
 +<p>You can crop the picture however you wish and then press OK.</p>
 +<p>As you can see it is really easy to set things right in this app.
 +It automatically pics up the First name, Middle name (if any) and the last name
 +You may add or delete any section you want for your own convenience.</p>
 +</div>
 +</div>
 +<div class="section" id="creating-new-address-books">
 +<h2>Creating new address books<a class="headerlink" href="#creating-new-address-books" title="Permalink to this headline">¶</a></h2>
 +<p>When you click on the third button of the bottom bar,
 +you will have access to the application’s settings.
 +Then, press on the “More button” to access the options of your Addressbooks.</p>
 +<img alt="../_images/contact_del_ab.jpg" src="../_images/contact_del_ab.jpg" />
 +<p>You have there the ability to add, delete, download or share your addressbooks.
 +Hover your cursor on every icon to see what they mean.</p>
 +</div>
 +<div class="section" id="keeping-your-address-book-in-sync">
 +<h2>Keeping your address book in sync<a class="headerlink" href="#keeping-your-address-book-in-sync" title="Permalink to this headline">¶</a></h2>
 +<p>One of the most important thing in any contact app is to keep it in Sync.
 +You can sync this contact app to your phone which has the following OS’s- Android and IOS</p>
 +<div class="section" id="syncing-with-android">
 +<h3>Syncing with Android<a class="headerlink" href="#syncing-with-android" title="Permalink to this headline">¶</a></h3>
 +<ol class="arabic simple">
 +<li>Install cardDav- Sync free from Google play store by visiting this link-  <a class="reference external" href="https://play.google.com/store/apps/details?id=org.dmfs.carddav.sync">https://play.google.com/store/apps/details?id=org.dmfs.carddav.sync</a></li>
 +<li>This app supports auto- configuration which is a Boon- after installing visit this link- carddavs://owncloud.example.net/remote.php/carddav/  to auto configure the app.</li>
 +<li>Enter your login details</li>
 +<li>After the app has checked your login details you may just select- Sync server to phone option</li>
 +<li>That’s it there is nothing else to do for Android :)</li>
 +</ol>
 +<img alt="../_images/contact_syncopt.jpg" src="../_images/contact_syncopt.jpg" />
 +</div>
 +<div class="section" id="syncing-your-ios-device">
 +<h3>Syncing your IOS device<a class="headerlink" href="#syncing-your-ios-device" title="Permalink to this headline">¶</a></h3>
 +<p>Synchronizing the Address book</p>
 +<ol class="arabic simple">
 +<li>Open the settings application.</li>
 +<li>Select Mail, Contacts, Calendars.</li>
 +<li>Select Add Account.</li>
 +<li>Select other as account type.</li>
 +<li>Select Add CardDAV account.</li>
 +<li>For server, type <a class="reference external" href="http://owncloud.example.net/remote.php/carddav/principals/username">http://owncloud.example.net/remote.php/carddav/principals/username</a></li>
 +<li>Enter your user name and password.</li>
 +<li>Select Next.</li>
 +<li>If your server does not support SSL, a warning will be displayed. Select Continue.</li>
 +<li>If the iPhone is unable to verify the account information perform the following:</li>
 +</ol>
 +<ul class="simple">
 +<li>Select OK.</li>
 +<li>Select advanced settings.</li>
 +<li>Make sure Use SSL is set to OFF.</li>
 +<li>Change port to 80.</li>
 +<li>Go back to account information and hit Save.</li>
 +</ul>
 +<p>Now should now find your contacts in the address book of your iPhone</p>
 +</div>
 +<div class="section" id="other-syncing-options-provided-by-owncloud">
 +<h3>Other Syncing options provided by ownCloud<a class="headerlink" href="#other-syncing-options-provided-by-owncloud" title="Permalink to this headline">¶</a></h3>
 +<ol class="arabic simple">
 +<li>For android you may use their official android app-  <a class="reference external" href="https://owncloud.com/overview/mobileapps">https://owncloud.com/overview/mobileapps</a></li>
 +<li>And for IOS(Iphone and Ipad) use their app - <a class="reference external" href="https://owncloud.com/overview/mobileapps">https://owncloud.com/overview/mobileapps</a></li>
 +</ol>
 +</div>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/index.html
index 22c65a0,0000000..7909a5a
mode 100644,000000..100644
--- a/core/doc/user/pim/index.html
+++ b/core/doc/user/pim/index.html
@@@ -1,168 -1,0 +1,168 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Contacts & Calendar — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="next" title="Using the Contacts App" href="contacts.html" />
-     <link rel="prev" title="Files Encryption" href="../files/encryption.html" />
++    <link rel="prev" title="Big Files" href="../files/configuring_big_file_upload.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="current reference internal" href="">Contacts & Calendar</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="contacts-calendar">
 +<h1>Contacts & Calendar<a class="headerlink" href="#contacts-calendar" title="Permalink to this headline">¶</a></h1>
 +<div class="toctree-wrapper compound">
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/sync_ios.html
index f4e040d,0000000..41b7628
mode 100644,000000..100644
--- a/core/doc/user/pim/sync_ios.html
+++ b/core/doc/user/pim/sync_ios.html
@@@ -1,214 -1,0 +1,214 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>iOS - Synchronize iPhone/iPad — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="Synchronizing with OS X" href="sync_osx.html" />
 +    <link rel="prev" title="Using the Calendar App" href="calendar.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">iOS - Synchronize iPhone/iPad</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#calendar">Calendar</a></li>
 +<li class="toctree-l3"><a class="reference internal" href="#address-book">Address book</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="ios-synchronize-iphone-ipad">
 +<h1>iOS - Synchronize iPhone/iPad<a class="headerlink" href="#ios-synchronize-iphone-ipad" title="Permalink to this headline">¶</a></h1>
 +<div class="section" id="calendar">
 +<h2>Calendar<a class="headerlink" href="#calendar" title="Permalink to this headline">¶</a></h2>
 +<ol class="arabic simple">
 +<li>Open the settings application.</li>
 +<li>Select Mail, Contacts, Calendars.</li>
 +<li>Select Add Account.</li>
 +<li>Select Other as account type.</li>
 +<li>Select Add CalDAV account.</li>
 +<li>For server, type <tt class="docutils literal"><span class="pre">ADDRESS/remote.php/caldav/principals/username</span></tt></li>
 +<li>Enter your user name and password.</li>
 +<li>Select Next.</li>
 +<li>If your server does not support SSL, a warning will be displayed.
 +Select Continue.</li>
 +<li>If the iPhone is unable to verify the account information perform the
 +following:<ul>
 +<li>Select OK.</li>
 +<li>Select advanced settings.</li>
 +<li>Make sure Use SSL is set to OFF.</li>
 +<li>Change port to 80.</li>
 +<li>Go back to account information and hit Save.</li>
 +</ul>
 +</li>
 +</ol>
 +<p>Your calendar should now be visible in the Calendar application</p>
 +</div>
 +<div class="section" id="address-book">
 +<h2>Address book<a class="headerlink" href="#address-book" title="Permalink to this headline">¶</a></h2>
 +<ol class="arabic simple">
 +<li>Open the settings application.</li>
 +<li>Select Mail, Contacts, Calendars.</li>
 +<li>Select Add Account.</li>
 +<li>Select Other as account type.</li>
 +<li>Select Add CardDAV account.</li>
 +<li>For server, type <tt class="docutils literal"><span class="pre">ADDRESS/remote.php/carddav/principals/username</span></tt></li>
 +<li>Enter your user name and password.</li>
 +<li>Select Next.</li>
 +<li>If your server does not support SSL, a warning will be displayed.
 +Select Continue.</li>
 +<li>If the iPhone is unable to verify the account information perform the
 +following:<ul>
 +<li>Select OK.</li>
 +<li>Select advanced settings.</li>
 +<li>Make sure Use SSL is set to OFF.</li>
 +<li>Change port to 80.</li>
 +<li>Go back to account information and hit Save.</li>
 +</ul>
 +</li>
 +</ol>
 +<p>Now should now find your contacts in the address book of your
 +iPhone.
 +If it’s still not working, have a look at the <a class="reference internal" href="troubleshooting.html"><em>Troubleshooting</em></a> guide.</p>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/sync_kde.html
index 037e13b,0000000..cbba5db
mode 100644,000000..100644
--- a/core/doc/user/pim/sync_kde.html
+++ b/core/doc/user/pim/sync_kde.html
@@@ -1,182 -1,0 +1,182 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Synchronizing with KDE SC — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="Troubleshooting" href="troubleshooting.html" />
 +    <link rel="prev" title="Thunderbird - Synchronize Address Book" href="sync_thunderbird.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="synchronizing-with-kde-sc">
 +<h1>Synchronizing with KDE SC<a class="headerlink" href="#synchronizing-with-kde-sc" title="Permalink to this headline">¶</a></h1>
 +<img alt="../_images/kdes1.png" src="../_images/kdes1.png" />
 +<p>From KDE SC 4.8 and forward setting up ownCloud is very easy. From System
 +Settings Personal Information/Akonadi Resources Configuration select DAV
 +Groupware resource.</p>
 +<img alt="../_images/kdes2.png" src="../_images/kdes2.png" />
 +<p>Enter your ownCloud username and password and click “Next”.</p>
 +<img alt="../_images/kdes3.png" src="../_images/kdes3.png" />
 +<p>Select ownCloud in the drop down list and click “Next”.</p>
 +<img alt="../_images/kdes4.png" src="../_images/kdes4.png" />
 +<p>Enter the host name and installation path. If you do not use SSL
 +remember to de-select “Use secure connection”.</p>
 +<img alt="../_images/kdes5.png" src="../_images/kdes5.png" />
 +<p>Test the connection. If everything went well you should see a message
 +like the one below.</p>
 +<img alt="../_images/kdes6.png" src="../_images/kdes6.png" />
 +<p>Click “Finish” and you will be able to change the display name and
 +refresh interval.</p>
 +<img alt="../_images/kdes7.png" src="../_images/kdes7.png" />
 +<p>Now you should see the Akonadi resource doing the first
 +synchronization.</p>
 +<p>You can find the Contacts and Calendars in Kontact (or
 +KOrganizer/KAddressbook if you run the programs separately.)</p>
 +<img alt="../_images/kdes9.png" src="../_images/kdes9.png" />
 +<img alt="../_images/kdes.png" src="../_images/kdes.png" />
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/sync_osx.html
index bcac08a,0000000..03abb4f
mode 100644,000000..100644
--- a/core/doc/user/pim/sync_osx.html
+++ b/core/doc/user/pim/sync_osx.html
@@@ -1,192 -1,0 +1,192 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Synchronizing with OS X — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="Thunderbird - Synchronize Address Book" href="sync_thunderbird.html" />
 +    <link rel="prev" title="iOS - Synchronize iPhone/iPad" href="sync_ios.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="synchronizing-with-os-x">
 +<h1>Synchronizing with OS X<a class="headerlink" href="#synchronizing-with-os-x" title="Permalink to this headline">¶</a></h1>
 +<p>To use ownCloud with iCal you will need to use the following URL: <a class="reference external" href="http://ADDRESS/remote.php/caldav/principals/username/">http://ADDRESS/remote.php/caldav/principals/username/</a></p>
 +<p>The setup is basically the same as with iOS using the path <strong>ADDRESS/remote.php/caldav/principals/username/</strong> to sync with ownCloud. For OS X 10.7 Lion and 10.8 Mountain Lion everything works fine, but OS X 10.6 (Snow Leopard) and older needs some fiddling to work. A user contributed the following:</p>
 +<ol class="arabic">
 +<li><p class="first">Make sure, Addressbook is not running. If it is, select the windows and press Command + Q to terminate it.</p>
 +</li>
 +<li><p class="first">Navigate to <strong>/Users/YOUR_USERNAME/Library/Application Support/AddressBook/Sources</strong>. If you have all ready some kind of address book setup, it is likely you will see some folders named like this <strong>BEA92826-FBF3-4E53-B5C6-ED7C2B454430</strong>. Note down what folders there are now and leave the window open.</p>
 +</li>
 +<li><p class="first">Open addressbook and try to add a new CardDav addressbook. At this point, it does not matter what information you enter. It will come up with the same error message you mentioned before when you click “Create”. Ignore it and click “Create” again. A non-functional address book will be added.</p>
 +</li>
 +<li><p class="first">Close Address-Book again using Command + Q</p>
 +</li>
 +<li><p class="first">Go back to the folder window from step 2. You will now see a newly created folder with another long string as its name.</p>
 +</li>
 +<li><p class="first">Navigate to the newly created folder and edit the <strong>Configuration.plist</strong> with your favorite text editor.</p>
 +</li>
 +<li><p class="first">Search for a section looking like this:</p>
 +<div class="highlight-python"><pre><key>servername</key> <string>http://:0(null)</string> <key>username</key> <string>Whatever_you_entered_before</string></pre>
 +</div>
 +</li>
 +</ol>
 +<ol class="arabic" start="8">
 +<li><p class="first">Make it look like this. Please note that the :80 after <strong>YOUR_DOMAIN</strong> is important:</p>
 +<div class="highlight-python"><pre><key>servername</key <string>http://YOUR_DOMAIN:80/owncloud/remote.php/carddav/principals/username</string> <key>username</key <string>username</string></pre>
 +</div>
 +</li>
 +<li><p class="first">Save the file and open Address Book again. It will not work yet.</p>
 +</li>
 +<li><p class="first">Open the preferences for your ownCloud CardDAV-Account and enter your password.</p>
 +</li>
 +<li><p class="first">You may have to restart Address Book once more. After this, it should work.</p>
 +</li>
 +</ol>
 +<p>If it’s still not working, have a look at the <a class="reference internal" href="troubleshooting.html"><em>Troubleshooting</em></a> guide.</p>
 +<p>There is also an easy <a class="reference external" href="http://forum.owncloud.org/viewtopic.php?f=3&t=132">HOWTO</a> in the forum.</p>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/sync_thunderbird.html
index 6d800d1,0000000..38bcac9
mode 100644,000000..100644
--- a/core/doc/user/pim/sync_thunderbird.html
+++ b/core/doc/user/pim/sync_thunderbird.html
@@@ -1,188 -1,0 +1,188 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Thunderbird - Synchronize Address Book — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="Synchronizing with KDE SC" href="sync_kde.html" />
 +    <link rel="prev" title="Synchronizing with OS X" href="sync_osx.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Thunderbird - Synchronize Address Book</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#address-book">Address book</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="thunderbird-synchronize-address-book">
 +<h1>Thunderbird - Synchronize Address Book<a class="headerlink" href="#thunderbird-synchronize-address-book" title="Permalink to this headline">¶</a></h1>
 +<div class="section" id="address-book">
 +<h2>Address book<a class="headerlink" href="#address-book" title="Permalink to this headline">¶</a></h2>
 +<p>As someone who is new to OwnCloud, New to SoGo Connector, and new to Thunderbird Addressbook... here is what you need in excruciating pithy detail I needed to make this work (for all the other lost souls out there).</p>
 +<ol class="arabic simple">
 +<li><a class="reference external" href="http://www.mozilla.org/en-US/thunderbird/">http://www.mozilla.org/en-US/thunderbird/</a> <strong>Thunderbird</strong> for your OS unless it comes with your OS distribution (Linux)</li>
 +<li><a class="reference external" href="http://www.sogo.nu/english/downloads/frontends.html">http://www.sogo.nu/english/downloads/frontends.html</a> <strong>Sogo Connector</strong> (latest release)</li>
 +</ol>
 +<blockquote>
 +<div>With an installed Thunderbird mailtool, and installed SoGo Connector:</div></blockquote>
 +<ol class="arabic simple">
 +<li>Thunderbird Addressbook is in the Thunderbird “Tools” Menu</li>
 +<li>In the Thunderbird Addressbook application:<ul>
 +<li>“File > New > <strong>Remote Addressbook</strong>” (SoGo Connector added this)</li>
 +<li>“<strong>Name:</strong>” is the name you want to give your Addressbook in the Thunderbird addressbook bar area</li>
 +<li>“<strong>URL:</strong>” is found in your OwnCloud Contacts area, that little Gear symbol</li>
 +</ul>
 +</li>
 +</ol>
 +<img alt="../_images/contact_thunderbird-Symbol_Gear.jpg" src="../_images/contact_thunderbird-Symbol_Gear.jpg" />
 +<p>in the -bottom left- of the Contacts View (same symbol as found in the -top right- in the Calendar view). Then look for a little impeller symbol</p>
 +<img alt="../_images/contact_thunderbird-Symbol_Impeller.jpg" src="../_images/contact_thunderbird-Symbol_Impeller.jpg" />
 +<p>which will display the URL you need for your installation to work.</p>
 +<img alt="../_images/contact_thunderbird-URL_config.jpg" src="../_images/contact_thunderbird-URL_config.jpg" />
 +<p>Once installed, synchronize (right click on your newly made remote addressbook and select “Synchronize”). You’ll see your addressbook populate from OwnCloud! Don’t click “read only” above unless you don’t want to modify your OwnCloud server addressbook, like it contains a listing of corporate contacts and is shared with lots of people, and you don’t want a new user dragging it somewhere unintended.</p>
 +<p>The rest of the details of dealing with Thunderbird addressbook are left to the reader... First thing I learned is dragging a contact to a different addressbook is a “move” operation. If you are worried about losing the contact, save it to a VCF file using OwnCloud (Or LDIF using Thunderbird Addressbook) first! Like dragging from “OwnCloud Addressbook” to “Personal Address Book” removes the contact from OwnCloud Server (<em>deleting it from all the [...]
 +<p>Contact <em>Pictures</em> are also sync’ed!</p>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/pim/troubleshooting.html
index ff846cf,0000000..eba6d71
mode 100644,000000..100644
--- a/core/doc/user/pim/troubleshooting.html
+++ b/core/doc/user/pim/troubleshooting.html
@@@ -1,187 -1,0 +1,187 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Troubleshooting — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="../_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '../',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="../_static/jquery.js"></script>
 +    <script type="text/javascript" src="../_static/underscore.js"></script>
 +    <script type="text/javascript" src="../_static/doctools.js"></script>
 +    <script type="text/javascript" src="../_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="../index.html" />
 +    <link rel="up" title="Contacts & Calendar" href="index.html" />
 +    <link rel="next" title="Using the Bookmarks App" href="../bookmarks.html" />
 +    <link rel="prev" title="Synchronizing with KDE SC" href="sync_kde.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="../contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="../contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="../index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1"><a class="reference internal" href="../webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1 current"><a class="reference internal" href="index.html">Contacts & Calendar</a><ul class="current">
 +<li class="toctree-l2"><a class="reference internal" href="contacts.html">Using the Contacts App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="calendar.html">Using the Calendar App</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_ios.html">iOS - Synchronize iPhone/iPad</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_osx.html">Synchronizing with OS X</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_thunderbird.html">Thunderbird - Synchronize Address Book</a></li>
 +<li class="toctree-l2"><a class="reference internal" href="sync_kde.html">Synchronizing with KDE SC</a></li>
 +<li class="toctree-l2 current"><a class="current reference internal" href="">Troubleshooting</a><ul>
 +<li class="toctree-l3"><a class="reference internal" href="#service-discovery">Service discovery</a></li>
 +</ul>
 +</li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="../bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="../mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="../migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="../external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="troubleshooting">
 +<h1>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline">¶</a></h1>
 +<div class="section" id="service-discovery">
 +<h2>Service discovery<a class="headerlink" href="#service-discovery" title="Permalink to this headline">¶</a></h2>
 +<p>Some clients - especially iOS - have problems finding the proper sync URL, even when explicitly
 +configured to use it.</p>
 +<p>There are several techniques to remedy this, which are described extensively at the
 +<a class="reference external" href="http://code.google.com/p/sabredav/wiki/ServiceDiscovery">Sabre DAV website</a>.</p>
 +<p>Below is what have proven to work with iOS including iOS 7.</p>
 +<p>If your ownCloud instance is installed in a sub-folder under the web servers document root, and
 +the client has difficulties finding the Cal- or CardDAV end-points, configure your web server to
 +redirect from a “well-know” URL to the one used by ownCloud.
 +When using the Apache web server this is easily achieved using a <tt class="file docutils literal"><span class="pre">.htaccess</span></tt> file in the document
 +root of your site.</p>
 +<p>Say your instance is located in the <tt class="docutils literal"><span class="pre">owncloud</span></tt> folder, so the URL to it is <tt class="docutils literal"><span class="pre">ADDRESS/owncloud</span></tt>,
 +create or edit the <tt class="file docutils literal"><span class="pre">.htaccess</span></tt> file and add the following lines:</p>
 +<div class="highlight-python"><pre>Redirect 301 /.well-known/carddav /owncloud/remote.php/carddav
 +Redirect 301 /.well-known/caldav /owncloud/remote.php/caldav</pre>
 +</div>
 +<p>If you use Nginx as web server, the setting looks something like:</p>
 +<div class="highlight-python"><pre>url.redirect = (
 +    "^/.well-known/carddav" => "/owncloud/remote.php/carddav",
 +    "^/.well-known/caldav" => "/owncloud/remote.php/caldav",
 +)</pre>
 +</div>
 +<p>Now change the URL in the client settings to just use <tt class="docutils literal"><span class="pre">ADDRESS</span></tt> instead of e.g. <tt class="docutils literal"><span class="pre">ADDRESS/remote.php/carddav/principals/username</span></tt>.</p>
 +<p>This problem is being discussed in the <a class="reference external" href="http://forum.owncloud.org/viewtopic.php?f=3&t=71&p=2211#p2197">forum</a>.</p>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/search.html
index abfef80,0000000..be04500
mode 100644,000000..100644
--- a/core/doc/user/search.html
+++ b/core/doc/user/search.html
@@@ -1,171 -1,0 +1,171 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>Search — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/searchtools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="index.html" />
 +  <script type="text/javascript">
 +    jQuery(function() { Search.loadIndex("searchindex.js"); });
 +  </script>
 +  
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">User Documentation</a></li>
 +</ul>
 +<ul>
 +<li class="toctree-l1"><a class="reference internal" href="webinterface.html">The ownCloud Web Interface</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <h1 id="search-documentation">Search</h1>
 +  <div id="fallback" class="admonition warning">
 +  <script type="text/javascript">$('#fallback').hide();</script>
 +  <p>
 +    Please activate JavaScript to enable the search
 +    functionality.
 +  </p>
 +  </div>
 +  <p>
 +    From here you can search these documents. Enter your search
 +    words into the box below and click "search". Note that the search
 +    function will automatically search for all of the words. Pages
 +    containing fewer words won't appear in the result list.
 +  </p>
 +  <form action="" method="get">
 +    <input type="text" name="q" value="" />
 +    <input type="submit" value="search" />
 +    <span id="search-progress" style="padding-left: 10px"></span>
 +  </form>
 +  
 +  <div id="search-results">
 +  
 +  </div>
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/doc/user/searchindex.js
index f23ed46,0000000..3211fb4
mode 100644,000000..100644
--- a/core/doc/user/searchindex.js
+++ b/core/doc/user/searchindex.js
@@@ -1,1 -1,0 +1,1 @@@
- Search.setIndex({objects:{},terms:{all:[11,0,20,18,8,14,12,17,19],entri:8,month:17,abil:[0,19],follow:[3,18,8,15,11,12,13,17,19],oldest:[6,15],calendarnam:17,content:[1,11,4],decid:14,middl:[19,8],depend:8,decim:8,carddav:[3,18,19,13],articl:[5,8],program:[7,17],under:3,leav:[18,8],sourc:[0,18],everi:[5,6,8,15,17,19],risk:8,reader:20,offlin:8,ical:[17,18],govern:10,veri:7,brows:[0,8],cool:16,administr:[10,6,11,14],youraddress:8,button:[16,11,17,19,12],list:[7,20,19],upload:[0,10,11,12,1 [...]
++Search.setIndex({objects:{},terms:{all:[4,9,18,19,15,14,5,12,20,21],code:15,month:12,abil:[9,20],follow:[16,1,18,19,11,4,20,6,12,15,21],oldest:[17,11],calendarnam:12,content:[10,4,8],decid:14,middl:[20,19],depend:19,decim:19,carddav:[20,18,6,1],send:15,articl:19,program:[2,12],under:1,leav:[18,19],sent:15,sourc:[9,18],everi:[17,12,20,19,11],risk:19,internet:[9,15],offlin:19,ical:[12,18],govern:3,veri:2,brows:[9,19],cool:7,administr:[3,17,4,14,16],youraddress:19,button:[15,4,21,7,12,20], [...]
diff --cc core/doc/user/webinterface.html
index a750cec,0000000..b6524b9
mode 100644,000000..100644
--- a/core/doc/user/webinterface.html
+++ b/core/doc/user/webinterface.html
@@@ -1,197 -1,0 +1,197 @@@
 +
 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
 +
 +<html xmlns="http://www.w3.org/1999/xhtml">
 +  <head>
 +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 +    
 +    <title>The ownCloud Web Interface — ownCloud User Manual 6.0 documentation</title>
 +    
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/style.css" type="text/css" />
 +    <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
 +    
 +    <script type="text/javascript">
 +      var DOCUMENTATION_OPTIONS = {
 +        URL_ROOT:    '',
 +        VERSION:     '6.0',
 +        COLLAPSE_INDEX: false,
 +        FILE_SUFFIX: '.html',
 +        HAS_SOURCE:  true
 +      };
 +    </script>
 +    <script type="text/javascript" src="_static/jquery.js"></script>
 +    <script type="text/javascript" src="_static/underscore.js"></script>
 +    <script type="text/javascript" src="_static/doctools.js"></script>
 +    <script type="text/javascript" src="_static/bootstrap.js"></script>
 +    <link rel="top" title="ownCloud User Manual 6.0 documentation" href="index.html" />
 +    <link rel="next" title="Files & Synchronization" href="files/index.html" />
 +    <link rel="prev" title="User Documentation" href="index.html" />
 +<script type="text/javascript">
 +(function () {
 +  /**
 +   * Patch TOC list.
 +   *
 +   * Will mutate the underlying span to have a correct ul for nav.
 +   *
 +   * @param $span: Span containing nested UL's to mutate.
 +   * @param minLevel: Starting level for nested lists. (1: global, 2: local).
 +   */
 +  var patchToc = function ($ul, minLevel) {
 +    var findA;
 +
 +    // Find all a "internal" tags, traversing recursively.
 +    findA = function ($elem, level) {
 +      var level = level || 0,
 +        $items = $elem.find("> li > a.internal, > ul, > li > ul");
 +
 +      // Iterate everything in order.
 +      $items.each(function (index, item) {
 +        var $item = $(item),
 +          tag = item.tagName.toLowerCase(),
 +          pad = 15 + ((level - minLevel) * 10);
 +
 +        if (tag === 'a' && level >= minLevel) {
 +          // Add to existing padding.
 +          $item.css('padding-left', pad + "px");
 +          console.log(level, $item, 'padding-left', pad + "px");
 +        } else if (tag === 'ul') {
 +          // Recurse.
 +          findA($item, level + 1);
 +        }
 +      });
 +    };
 +
 +    console.log("HERE");
 +    findA($ul);
 +  };
 +
 +  $(document).ready(function () {
 +    // Add styling, structure to TOC's.
 +    $(".dropdown-menu").each(function () {
 +      $(this).find("ul").each(function (index, item){
 +        var $item = $(item);
 +        $item.addClass('unstyled');
 +      });
 +      $(this).find("li").each(function () {
 +        $(this).parent().append(this);
 +      });
 +    });
 +
 +    // Patch in level.
 +    patchToc($("ul.globaltoc"), 2);
 +    patchToc($("ul.localtoc"), 2);
 +
 +    // Enable dropdown.
 +    $('.dropdown-toggle').dropdown();
 +  });
 +}());
 +</script>
 +
 +  </head>
 +  <body>
 +  
 +
 +<div class="container">
 +  <div class="content">
 +    <div class="page-header">
 +      <h1><a href="contents.html">ownCloud User Manual</a></h1>
 +
 +    </div>
 +    
 +			<div class="row">
 +				<div class="span3">
 +					<div class="sidebar">
 +						<div class="well">
 +							<div class="menu-support-container">
 +								<ul id="menu-support" class="menu">
 +									<ul>
 +										<li><a href="contents.html">Overview</a></li>
 +									</ul>
 +                  <ul>
 +<li class="toctree-l1"><a class="reference internal" href="index.html">User Documentation</a></li>
 +</ul>
 +<ul class="current">
 +<li class="toctree-l1 current"><a class="current reference internal" href="">The ownCloud Web Interface</a><ul>
 +<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li>
 +</ul>
 +</li>
 +<li class="toctree-l1"><a class="reference internal" href="files/index.html">Files & Synchronization</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="pim/index.html">Contacts & Calendar</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="bookmarks.html">Using the Bookmarks App</a></li>
- <li class="toctree-l1"><a class="reference internal" href="mediaplayer.html">Native Media Player Support</a></li>
 +<li class="toctree-l1"><a class="reference internal" href="migration.html">User Account Migration</a></li>
++<li class="toctree-l1"><a class="reference internal" href="external_storage/google_drive.html">External storage</a></li>
 +</ul>
 +
 +								</ul>
 +							</div>
 +						</div>
 +					</div>
 +				</div>
 +        
 +
 +				<div class="span9">
 +					<div class="page-content">
 +						
 +  <div class="section" id="the-owncloud-web-interface">
 +<h1>The ownCloud Web Interface<a class="headerlink" href="#the-owncloud-web-interface" title="Permalink to this headline">¶</a></h1>
 +<p>You can connect to ownCloud with your web browser by pointing
 +it to the address that you have received from your service
 +provider. In case you are administering the server yourself,
 +have a look at ownCloud Administrators Manual.</p>
 +<p>When you enter the URL, you will receive a page that is similar
 +to the one depicted below:</p>
 +<div class="figure">
 +<a class="reference internal image-reference" href="_images/oc_connect.png"><img alt="_images/oc_connect.png" src="_images/oc_connect.png" /></a>
 +<p class="caption">The ownCloud login screen</p>
 +</div>
 +<p>Login with the user name and password with you have received from
 +your service provider. If you have set up the server yourself,
 +log in with the user name which you have created during the
 +setup process. You can add further users through the settings,
 +or by hooking up a user backend, such as LDAP.</p>
 +<div class="section" id="overview">
 +<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h2>
 +<p>After clicking the <em class="guilabel">Log in</em> button, you will be redirected
 +to ownCloud’s main web interface:</p>
 +<div class="figure">
 +<a class="reference internal image-reference" href="_images/oc_ui.png"><img alt="_images/oc_ui.png" src="_images/oc_ui.png" /></a>
 +<p class="caption">The ownCloud main interface with the essential elements numbered</p>
 +</div>
 +<p>The web interface comprises of the following items:</p>
 +<ol class="arabic simple">
 +<li><strong>Navigation bar</strong>: Allows navigation between different parts of ownCloud,
 +provided by apps. Not all apps depicted in this screen shot are installed
 +and enabled by default.</li>
 +<li><strong>Application view</strong>: This is where apps show their content. By default, this
 +will show the files and directory (file view) of your user on the ownCloud
 +installation.</li>
 +<li><strong>Upload/Create button</strong>: This allows you to create new files or upload
 +existing ones from your device. Note that you can also drop files from
 +Explorer or Finder onto the ownCloud file view and they will get uploaded to
 +ownCloud.</li>
 +<li><strong>Search/Logout</strong>: Search allows you to look for files and
 +directories. Currently, ownCloud does not provide a full text search, but
 +this may change in future releases.</li>
 +<li><strong>Settings</strong>: This button provides access to the settings menu, where you can
 +change your personal settings, such as the interface language or your
 +password. You can also retrieve the WebDAV URL (see next chapter) and show
 +your quota. Administrators will also get access to user management
 +(<em class="guilabel">Users</em>), the apps settings (<em class="guilabel">Apps</em>) and administrative
 +settings (<em class="guilabel">Admin</em>) including access to ownCloud’s log.</li>
 +</ol>
 +</div>
 +</div>
 +
 +
 +					</div>
 +				</div>
 +			</div>
 +    
 +  </div>
 +</div>
 +  </body>
 +</html>
diff --cc core/skeleton/ownCloudUserManual.pdf
index d5f0041,0000000..75a199c
mode 100644,000000..100644
Binary files differ
diff --cc version.php
index c7877a0,2e3b8f1..a02831b
--- a/version.php
+++ b/version.php
@@@ -1,6 -1,17 +1,6 @@@
 -<?php
 -
 -// We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel when updating major/minor version number.
 -$OC_Version=array(6, 00, 0, 8);
 -
 -// The human readable string
 -$OC_VersionString='6.0 beta 5';
 -
 -// The ownCloud edition
 -$OC_Edition='';
 -
 -// The ownCloud channel
 -$OC_Channel='git';
 -
 -// The build number
 -$OC_Build='';
 -
 +<?php 
- $OC_Version = array(6,0,0,6);
- $OC_VersionString = '6.0 beta 4';
++$OC_Version = array(6,0,0,8);
++$OC_VersionString = '6.0 beta 5';
 +$OC_Edition = '';
 +$OC_Channel = 'testing';
- $OC_Build = '2013-11-13T18:45:41+00:00';
++$OC_Build = '2013-11-20T18:40:56+00:00';

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list